加入收藏  |  设为首页  |  联系我们
网站首页 公司概况 公司文化 新闻动态 加密狗展示 工作坏境 招贤纳士 精诚合作 在线留言
新闻中心
公司新闻
行业资讯
 
地    址:广东省深圳市地王大厦38层8801号。
客服QQ1:4642967
客服QQ2:5915307
手    机:13528540969(刘先生)
邮    箱:4642967@qq.com
网    址:http://www.taixuan.net/
新闻中心 当前位置:首页 >> 新闻中心 >> 行业资讯

R4狗代码的详细分析!

发表时间:2013-10-30    来源:本站    浏览次数:9048

 前天一个兄弟问我有没rockey4加密狗破解方面的材料,我是历来不做这方面的纪录的,嘿嘿,人对比懒嘛!所以帮他在网上找了查找了不少有关方面的材料,可是都不是很满足,那就只要自个出手了。正巧手上有一个R4的加密狗了,就用它来做剖析了……

  下面就简略的说说R4狗的剖析吧:


一、调用狗的指令

1. 查找狗(RY_FIND)
意图: 查找指定暗码的加密狗是不是存在
输入参数:
function = RY_FIND  功用码 1
*p1 = 暗码1    //有必要
*p2 = 暗码2    //有必要
*p3 = 暗码3 (可选)
*p4 = 暗码4 (可选)
回来:
retcode = 0 表明成功,其它为过错码。无狗过错码为3
当成功时,*lp1 中为加密狗的硬件ID

//阐明:1)暗码1及暗码2的是有必要的,也是查找狗的根底,也称为一级口令。
        暗码3和暗码4是高档暗码,只要有了这一组暗码才能够写狗的用
        户ID区,模块区,自界说算法区,这三块的内容中除用户ID区
        外,其它二个正是狗的仿制难点之处。
        2)回来的lp1中数据类型为无符号整数,这一个也正是辨认不一样的R4
        狗的重要之处。一起也是一些软件加密要用的内容。由于厂商声称
        硬件ID全世界仅有。

2.查找下一狗(RY_FIND_NEXT)
意图: 查找是不是还有指定暗码的加密狗
输入参数:
function = RY_FIND_NEXT
*p1 = 暗码1
*p2 = 暗码2
*p3 = 暗码3 (可选)
*p4 = 暗码4 (可选)
*lp1 = RY_FIND或RY_FIND_NEXT所找到的上一把加密狗的硬件ID
回来:
retcode = 0 表明成功,其它为过错码。
当成功时,*lp1 中为加密狗的硬件ID

3. 翻开狗(RY_OPEN)
意图: 翻开指定暗码及硬件ID 的加密狗
输入参数:
function = RY_OPEN
*p1 = 暗码1   //和1功用中大概一样,且不行改动Lp1中的硬件ID
*p2 = 暗码2   //和1功用中大概一样
*p3 = 暗码3 (可选)
*p4 = 暗码4 (可选)
*lp1 = 硬件ID
回来:
retcode = 0 表明成功,其它为过错码。
当成功时,*handle 为加密狗的句柄
lp2 为加密狗的类型
TYPE_ROCKEY4      1 // ROCKEY4 规范并口类型
TYPE_ROCKEY4P     2 // ROCKEY4+增强并口类型
TYPE_ROCKEYUSB    3 // ROCKEY4 规范USB 类型
TYPE_ROCKEYUSBP   4 // ROCKEY4+增强USB 类型
TYPE_ROCKEYNET    5 // ROCKEY4 网络并口类型
TYPE_ROCKEYUSBNET 6 // ROCKEY4 网络USB 类型

//阐明: 在lp2中的类型对比重要,一些狗用的对比好的。会判别当
         前的狗的类型,若是类型不对,即是其它的参数一样,也会
         不认当时的狗。
         在这儿请注意狗的类型不一样,相应的数据量也不一样,标版内
         存区为24个字节,自界说算法区 32条指令,增强版及网络版
         内存区为120个字节,自界说算法区为80条指令。

4. 封闭狗(RY_CLOSE)
意图: 封闭相应handle 的加密狗
输入参数:
function = RY_CLOSE
*handle = 狗的句柄
回来:
retcode = 0 表明成功,其它为过错码。


5. 读狗(RY_READ)
意图: 读出加密狗用户读写区的内容
输入参数:
function = RY_READ
*handle = 狗的句柄
*p1 = 方位
*p2 = 长度(以字节为单位)
buf = 缓冲区的指针
回来:
retcode = 0 表明成功,其它为过错码。
当成功时,buf 中为读入的内容。

//buf是直接的内存区,在读数据时要依据功用3中回来的类型判别长度,不
  要超长,标版24 增强及网络版是120。

6. 写狗(RY_WRITE)
意图: 向用户读写区内写入内容
输入参数:
function = RY_WRITE
*handle = 狗的句柄
*p1 = 方位
*p2 = 长度(以字节为单位)
buffer = 缓冲区的指针
回来:
retcode = 0 表明成功,其它为过错码。

//阐明同上

7. 随机数(RY_RANDOM)
意图: 从加密狗得到一个随机数
输入参数:
function = RY_RANDOM
*handle = 狗的句柄
回来:
retcode = 0 表明成功,其它为过错码。
当成功时,*p1 中为加密狗回来的随机数

//这个在实践加密的过程中没有多大的意义,在自界说的算法中有意
  义,但不是咱们调用得到的。这个功用对用户敞开无多大的意义。

8. 种子码(RY_SEED)
意图: 得到种子码的回来码
输入参数:
function = RY_SEED
*handle = 狗的句柄
*lp2 = 种子码    //重要之处,在剖析时必定要注意这个进口值是多少
回来:
retcode = 0 表明成功,其它为过错码。
当成功时,
*p1 = 回来码1
*p2 = 回来码2
*p3 = 回来码3
*p4 = 回来码4

//阐明:4个回来值用途很大,也是加密者常常运用的功用,这个种子码和狗的密
        码有关,同号狗(指暗码一样)生成的种子回来值都是一样的。
        这个功用在狗壳的剖析中也是难度最大的,若是没有狗,那是没有方法
        晓得回来值的,但能够选用变通的方法来完结,然后取得种子码的回来
        值,也即是常说的无狗脱狗壳的方法。

9. 写用户ID [*] (RY_WRITE_USERID)
意图: 写入用户界说的ID
输入参数:
function = RY_WRITE_USERID
*handle = 狗的句柄
*lp1 = 用户ID     //是一个无符号长整型
回来:
retcode = 0 表明成功,其它为过错码。

//这个功用需求在1功用和3功用中翻开狗时指定高档暗码,不然是不答应写入的,
  若是无高档暗码状况下写入次数过多,将可能会损坏狗或将狗狗死,请稳重操作。

10. 读用户ID (RY_READ_USERID)
意图: 读出用户界说的ID
输入参数:
function = RY_READ_USERID
*handle = 狗的句柄
回来:
retcode = 0 表明成功,其它为过错码。
当成功时,*lp1 为用户ID

//读能够不必高档暗码。

11. 设置模块[*] (RY_SET_MOUDLE)
意图: 设置模块字及递减特色
输入参数:
function = RY_SET_MOUDLE
*handle = 狗的句柄
*p1 = 模块号
*p2 = 用户模块字
*p3 = 是不是答应递减(1 = 答应,0 = 不答应)
回来:
retcode = 0 表明成功,其它为过错码。

//模块的数据对比特别,只要有高档暗码的情况下才能够写,但即是具有了悉数的
暗码,也不能读出模块的内容,但能够用变通的方法来读出它的数值。

12. 查看模块特色(RY_CHECK_MOUDLE)
意图: 查看模块特色字
输入参数:
function = RY_CHECK_MOUDLE
*handle = 狗的句柄
*p1 = 模块号
回来:
retcode = 0 表明成功,其它为过错码。
当成功时,
*p2 = 1 表明此模块有用
*p3 = 1 表明此模块能够递减

//这一项功用常用在一些试用版的软件上,运用了递减功用,使模块内的数据逐渐
  减1,当为0时,当时模块将无效,测验功用也就完毕了。


13. 写算法[*] (RY_WRITE_ARITHMETIC)
意图: 向加密狗中写入自界说算法
输入参数:
function = RY_WRITE_ARITHMETIC
*handle = 狗的句柄
*p1 = 算法区方位
buffer = 算法指令串
回来:
retcode = 0 表明成功,其它为过错码。

// 自界说是难度最高的有些,也是这个R4的狗特色之一,能够将一些要害核算写到
狗中,指令格局见后边。但由于狗的本身缘由,不行能写入太多的指令,不然软件
的速度会很受影响,算法常是1-10条之间,当然并不必定,若是指令少,还能够用
猜的方法来取得算法,但若是过长,那时刻将是天文数字。


14. 核算1 (RY_CALCULATE1)   功用码:E
意图: 让加密狗进行指定方法的运算,核算成果由用户算法决议。
输入参数:
function = RY_CALCULATE1
*handle = 狗的句柄
*lp1 = 核算开端点     //从第几行代码开端履行
*lp2 = 模块号         //模块参加运算
*p1 = 输入值1
*p2 = 输入值2
*p3 = 输入值3
*p4 = 输入值4
回来:
retcode = 0 表明成功,其它为过错码。
当成功时,
*p1 = 回来值1
*p2 = 回来值2
*p3 = 回来值3
*p4 = 回来值4

//若是指定的开端点不是狗内的自界说算法开端点,那么回来的值都是随机数,
没有多少意义,但正是运用这一点,咱们能够判别出狗内有几组算法区。

15. 核算2 (RY_CALCULATE2)  功用码:F
意图: 让加密狗进行指定方法的运算,核算成果由用户算法决议。
输入参数:
function = RY_CALCULATE2
*handle = 狗的句柄
*lp1 = 核算开端点
*lp2 = 种子码    //种子码参加运算
*p1 = 输入值1
*p2 = 输入值2
*p3 = 输入值3
*p4 = 输入值4
回来:
retcode = 0 表明成功,其它为过错码。
当成功时,
*p1 = 回来值1
*p2 = 回来值2
*p3 = 回来值3
*p4 = 回来值4

16. 核算3 (RY_CALCULATE3)   功用码:10H
意图: 让加密狗进行指定方法的运算,核算成果由用户算法决议。
输入参数:
function = RY_CALCULATE3
*handle = 狗的句柄
*lp1 = 核算开端点
*lp2 =模块字开端地址    //完全由模块来参加运算,
*p1 = 输入值1
*p2 = 输入值2
*p3 = 输入值3
*p4 = 输入值4
回来:
retcode = 0 表明成功,其它为过错码。
当成功时,
*p1 = 回来值1
*p2 = 回来值2
*p3 = 回来值3
*p4 = 回来值4


//关于算法来说,直接参数大概是9个,1是方位的开端点 2是 p1,p2,p3,p4 对
  应ABCD 4个进口参数 3即是狗内的E F G H,对应由LP2指定功用区数据,
  E功用中 E硬件ID高位  F硬件ID低位  G模块字    H随机
  F功用中 E是种子码生成的数值1  F数值2   G 数值3   H 数值4
  10功用中即是模块的值了,由LP2指定的开端模块的接连4个。

17. 递减(RY_DECREASE)
意图: 对指定模块字进行递减操作
输入参数:
function = RY_DECREASE
*handle = 狗的句柄
*p1 = 模块号
回来:
retcode = 0 表明成功,其它为过错码。

//用于测验值中递减模块中的数据

常用过错码
ERR_SUCCESS                0 //没有过错         **最佳的一个
ERR_NO_DRIVER              2 //没装置驱动程序
ERR_NO_ROCKEY              3 //没有ROCKEY       **易用的一个
ERR_INVALID_PASSWORD       4 //有ROCKEY狗,但根本暗码错  
ERR_OPEN_OVERFLOW         16 //翻开的狗太多(>16)

                    Rockey 4规范版   Rockey4+增强版   NetRockey网络狗
用户可读写内存区巨细    24             120                 120
模块字区巨细            32              32                  32
算法区巨细              64              80                  80
是不是撑持网络调用        否              否                  是


参数格局:
WORD Rockey
(
 WORD  function,
 WORD*  handle,
 DWORD* lp1,
 DWORD* lp2,
 WORD*  p1,
 WORD*  p2,
 WORD*  p3,
 WORD*  p4,
 BYTE*  buffer
);
 C 言语调用样例,下面的阐明都会按照这个样例来阐明:
retcode = Rockey(function,handle,lp1,lp2,p1,p2,p3,p4,buffer);
ROCKEY函数的参数界说如下:
 参数称号  参数类型      参数意义
Function  16位数        API 函数功用
Handle    16位数的地址  狗操作句柄的指针
lp1       32位数的地址  长参数1
lp2       32位数的地址  长参数2
p1        16位数的地址  参数 1
p2        16位数的地址  参数 2
p3        16位数的地址  参数 3
p4        16位数的地址  参数 4
Buffer     8位数的地址  字符缓冲区指针
<注意>:
一切的接口参数有必要在程序中界说,不能传递一个 NULL 类型的空指针曩昔,不然程序会呈现过错。
1.1 function 是 16 位数字,它代表详细的功用,其界说如下:
 RY_FIND                 1 //找狗
 RY_FIND_NEXT            2 //找下一把狗
 RY_OPEN                 3 //翻开狗
 RY_CLOSE                4 //封闭狗
 RY_READ                 5 //读狗
 RY_WRITE                6 //写狗
 RY_RANDOM               7 //发生随机数
 RY_SEED                 8 //发生种子码
 RY_WRITE_USERID         9 //写用户 ID
 RY_READ_USERID         10 //读用户 ID
 RY_SET_MOUDLE          11 //设置模块字
 RY_CHECK_MOUDLE        12 //查看模块状况
 RY_WRITE_ARITHMETIC    13 //写算法
 RY_CALCULATE1          14 //核算 1
 RY_CALCULATE2          15 //核算 2
 RY_CALCULATE3          16 //核算 3
 RY_DECREASE            17 //递减模块单元


算法指令格局

咱们一切的算法指令有必要是下列方式:
reg1 = reg2 op reg3/value
其间 reg1,reg2,reg3 都是某个寄存器,value 是个当即数,op 是运算符。
例如: A = A + B
咱们所撑持的一切运算符有:
  +  加法   -  减法   <  循环左移  *  乘法
  ^  异或   &  与     |  或        ~  取反(规范版)
  ?  对比(增强版和网络版)
value 是数值,只能是 0 - 63 之间的十进制数值。

<注意>:

~ 是咱们规范版加密狗才有的指令,在增强版和网络版中,本来的这个指令代码被用于
对比,运用新的符号 "?"。
1) ~ 指令是单参数操作符,所以 A = A ~ B 即是 A = ~A 后边的 B 参数被疏忽。
2) ? 指令用于对比两个操作数,例如 C = A ? B,对比成果如下:

C    A?B    B?A
A A=B  FFFF  FFFF
A>B  FFFF  0
C 里面会依据对比成果放入 0 或许 FFFF

算法指令的一些约束

  在开发者编写加密狗算法指令的时分,会有一些特定的约束,联系一些比如,咱们会介
绍这些约束是什么:
A = A + B  合法指令
D = D ^ D  合法指令
A = B    不合法指令,有必要按算法格局,可写成 A = B | B
A = 0    不合法指令,有必要按算法格局,可写成 A = A ^ A
C = 3 * B  不合法指令,常数有必要放在后边,可写成 C = B * 3
D = 3 + 4  不合法指令,一条指令内只能运用一个常数
A = A / B  不合法指令,咱们不撑持除法运算符
H = E*200  不合法指令,常数有必要小于 64
A = A*63   看情况,咱们不答应在算法中的第一条指令和最终一条指令中运用常数。

若是这条指令呈现在中心即是合法指令,若是是算法的第一条或最终一条指令即是不合法指令。

至此,简略的剖析就写完了,这其间也学习了网上许多兄弟的加密狗复制剖析材料,在这儿,要谢谢各位了!
对rockey4的剖析不行能一篇文章就悉数写完,这儿仅仅做了点简略剖析,今后有时刻或许还会持续写……


关闭窗口】 【打印本页】 【收藏页面
Copyright (c) 2013 - 2016 加密狗破解网 Inc. All Rights Reserved 备案号:粤ICP备08125688号 版权所有:加密狗破解网