软件执行过程:
1、查找是否有狗
2、如果有狗——打开狗,如果无狗,程序一般会给出提示
3、验证狗
4、从狗中读数据
不管是硬复制还是软模拟,首先你要知道狗都干了些啥.
一、
找狗函数RY2_Find
看看定义,TRY2_Find=function():integer;stdcall;
简单吧
太简单了,不说了
抄点飞天的解释就成了
//return value
// <0 Error code
// =0 No ROCKEY2 dongle is attached
// >0 The number of attached ROCKEY2 dongle(s)
好了,现在狗找到了,下一步就是打开狗
RY2_Open
看定义
TRY2_Open=function(mode:integer; uid :cardinal; var hid :cardinal):integer;stdcall;
好像也挺简单的吧,通俗的解释下吧
就是打开自己定义好UID和HID的狗
比如说你拿A软件的狗运行B软件是不行滴
这里面比较重要的信息就是mode如果值为0拿恭喜你,可以完美的模拟狗了
否则只能模拟
// input:
// mode—-This parameter indicates the way to open the dongle
// mode = 0, open the first found ROCKEY2 dongle
// mode > 0, open the dongle according to the UID. The mode value is the dongle number,
// for example: uid=12345678, mode=2, this means it will open the second dongle with UID 12345678
// mode = -1, open the dongle according to the HID, and *hid can not be 0
二、
现在狗打开了,怎么也得验验正身吧
用这个
function RY2_GenUID(handle:integer; var uid : cardinal; seed: pchar; isProtect:integer):integer;stdcall;
// input:
// handle—Dongle handle. It is the handle returned from RY2_Open.
// uid—Output parameter. The generated UID.
// seed—Seed to generate UID. It is a character string with the maximum length of 64 bytes
// isProtect—Sets write protection. 0=dongle not write protected, 1=dongle write protected.
// ROCKEY2_DISABLE_WRITE_PROTECT = 0
// ROCKEY2_ENSABLE_WRITE_PROTECT =1
// Return:
// Error code. Please refer to the later
如果软件用到了这个函数那么被硬件复制的可能性很大
最重要的是seed数据
{有些很罗嗦的文字就不打了,自己到官方看}
三、
验明正身之后就该读取狗内的数据了
function RY2_Read(handle:integer;block_index : integer; buffer512:pchar):integer;stdcall;
// input:
// handle—Dongle handle. It is the handle returned from RY2_Open.
// block_index—Block index. Specify the block to read. The value range is 0-4.
// buffer512—Read buffer. The buffer must be at least 512 bytes to accommodate the 512 byte block size.
// Return:
// Error code. Please refer to the later
Rockey2定义了4个读模块1.2.3.4为序号就是Index的值 4个模块占据了狗512字节的存储空间
软件执行读命令之后,狗会把相应模块的数据写进内存缓冲区buffer
至于写操作就不说了,就是读的反操作
后面的关闭加密狗也不说了
下面说说软模拟的问题
总结下来软件会调用到加密狗的如下函数
RY2_Find,
RY2_Open,
RY2_GenUID,
RY2_Read;
RY2_Close
根据上面的思路和函数定义我们就可以开始写模拟狗的DLL
注意本文所讲的模拟狗必须是软件动态调用加密狗接口方式才有效
静态编译无效,需要另辟奇径,不在本文探讨范围之内
在写模拟狗之前需要说明的是,前提你得有和软件配套的狗才行
不然一切都是白说,有了狗还有监视软件对狗做了哪些坏事
这位说了:”怎么监视?”
问得好,如果你能通读一遍Rockey2的SDK那么自己写个监视器不成问题
如果没有能力写,那只有用我附件提供的监视器来监视软件对狗的操作了
好
开始写了,会Delphi的操起家伙,不会Delphi的,嘿嘿,慢慢啃吧
俺只用Delphi,C++不感冒
function RY2_Find(): integer; stdcall;
begin
Result:=1;
{这样软件就找到狗了,如果是个傻作者,只需这一句代码就模拟了,真晕,上哪找这么傻的作者哦}
end;
function RY2_Open(mode:integer; uid :cardinal; var hid :cardinal):integer;stdcall;
begin
Result:=0;
{这样就把狗打开了,mode不等于0的情况大伙自己研究处理方法吧}
end;
使用RY2_GenUID功能软件我还没有遇到过,我写的程序无法测试,怕写错了误人子弟,就不发了
function RY2_Read(handle:integer;block_index : integer; buffer512:pchar):integer;stdcall;
begin
{这里先把得到的狗内数据按照请求Index的值写到内存,写内存不用我再说了吧,编程的基本功}
Result:=0;
{返回0代表执行成功}
end;
写操作和关闭操作就不写了,思想是一样的
复制狗的思路和模拟差不多,只不过是把得到的数据写进真实狗罢了,大家可去官网参考相关资料.
附:
官网对ROCKEY2的描述:
ROCKEY2 加密锁采用传统的 EEPROM 结构,但其CPU内置大容量flash存储单元,可供用户读写的空间有 2560 个字节,远远大于一般 EEPROM 类型的加密锁,能够支持大量数据存储的需要。
ROCKEY2 加密锁是 USB 接口的 高速HID 无驱设备,提供丰富灵活的API接口、高强度的外壳加密工具以及专用Flash加密工具。
微信扫一扫打赏
支付宝扫一扫打赏
