| 
注册时间2007-1-1
阅读权限10
最后登录1970-1-1UID26644 周游历练 
 
 该用户从未签到 | 
 
| 本人上一篇发布的 揭开加密狗模拟的神秘面纱之rockey6 首发在PYG 然后在看雪发
 
 发帖没有别的目的,其一是想赚点虚荣心,其二是这种技术很少很少有人拿出来交流
 
 原因不说大伙都明白吧,结果虚荣心一点没赚到,PYG的反应还算可以的
 在看雪发的就惨不忍睹了,1000人浏览不足10人回帖
 算了,至少在这里多赚点回帖,混个脸熟,嘿嘿
 
 本文 揭开加密狗模拟的神秘面纱之rockey2
 欢迎转载,但请保留作者信息
 言归正传
 
 Rockey2加密狗算是飞天系列最简单的一种,简单到什么程度呢
 简单到你看完本文就会硬复制Rockey2啦
 
 废话少说
 
 本文这种介绍关于Rokey2的两种应对处理
 1,硬复制,所谓硬复制既是在不改动程序的前提下做出和原版加密狗一模一样的狗出来,原则上只要程序不换狗,复制狗永远支持升级
 2,软模拟,所谓软模拟既是在不改动程序的前提下模拟出软件对狗操作时狗对软件做出的反应
 
 ===================================Begin================================
 本文内容有所借鉴,如有雷同实属正常
 本文表达或描述有误之处欢迎拍砖  拍砖方式  [email protected]
 
 在罗嗦一句,本文适合有编程基础的朋友研究,哪怕是只会个易语言也成
 不会编程的就当是看热闹了
 先说说程序操作加密狗的一半流程
 
 首先软件要先找到狗->然后打开狗->验证狗->读数据
 
 不管目的是硬复制还是软模拟,最起码你要知道软件对狗做了什么坏事,才好做到有的放矢
 
 找狗函数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;
 写操作和关闭操作就不写了,思想是一样的
 
 复制狗的思路和模拟差不多,只不过是把得到的数据写进真实狗罢了,参考飞天资料即可
 这里不罗嗦了
 
 好了,到这里本文完  老刘 作于 2009.06.23 0:55分
 本文内容有所借鉴,如有雷同实属正常
 ========================The End===============================
 | 
 评分
| 参与人数 1 | 威望 +100 | 飘云币 +100 | 收起
理由 |  
|  Nisy | + 100 | + 100 | 您的贴子很精彩,希望能再次分享! |  
查看全部评分
 |