ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

破解Rockey3加密狗复制方法:调用狗的指令

2019-10-30 13:50:48  阅读:1811  来源: 互联网

标签:retcode 加密狗 句柄 RY 错误码 密码 Rockey3 破解


破解Rockey3加密狗复制方法:调用狗的指令

 

目的:普及一下Rockey3狗的基本知识及分析的一些方法,有机会分析一下Rockey3的狗壳。

练习内容:系统所带的文件

说明:Rockey3下文中简称R3狗

  

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

        狗的重要之处。同时也是一些软件加密要用的内容。

  

2. 打开狗(RY_OPEN)

目的: 打开指定密码及硬件ID 的加密狗

输入参数:

function = RY_OPEN

*p1 = 密码1   //和1功能中应该相同,且不可改变Lp1中的硬件ID

*p2 = 密码2   //和1功能中应该相同

*p3 = 密码3 (可选)

*p4 = 密码4 (可选)

*lp1 = 硬件ID

返回:

retcode = 0 表示成功,其它为错误码。

当成功时,*handle 为加密狗的句柄

lp2 为加密狗的类型

 //说明: 在lp2中的类型比较重要,一些狗用的比较好的。会判断当

         前的狗的类型,如果类型不对,就是其它的参数相同,也会

         不认当前的狗。

         在这里请注意狗的类型不同,相应的数据量也不同,标版内

         存区为24个字节,自定义算法区 32条指令,增强版及网络版

         内存区为120个字节,自定义算法区为80条指令。

 

3. 关闭狗(RY_CLOSE)

目的: 关闭相应handle 的加密狗

 输入参数:

 function = RY_CLOSE

*handle = 狗的句柄

返回:

retcode = 0 表示成功,其它为错误码。

 

4. 读狗(RY_READ)

目的: 读出加密狗用户读写区的内容

输入参数:

function = RY_READ

*handle = 狗的句柄

*p1 = 位置

*p2 = 长度(以字节为单位)

buf = 缓冲区的指针

返回:retcode = 0 表示成功,其它为错误码。

当成功时,buf 中为读入的内容。

 //buf是直接的内存区,在读数据时要根据功能3中返回的类型判断长度,不

  要超长,标版24 增强及网络版是120。

 

5. 写狗(RY_WRITE)

目的: 向用户读写区内写入内容

输入参数:

function = RY_WRITE

*handle = 狗的句柄

*p1 = 位置

*p2 = 长度(以字节为单位)

buffer = 缓冲区的指针

返回:

retcode = 0 表示成功,其它为错误码。

 //说明同上

 

6. 随机数(RY_RANDOM)

目的: 从加密狗得到一个随机数

输入参数:

function = RY_RANDOM

*handle = 狗的句柄

返回:

retcode = 0 表示成功,其它为错误码。

当成功时,*p1 中为加密狗返回的随机数

 //这个在实际加密的过程中没有多大的意义,在自定义的算法中有意

  义,但不是我们调用得到的。这个功能对用户开放无多大的意义。

 

7. 种子码(RY_SEED)

目的: 得到种子码的返回码

输入参数:

function = RY_SEED

*handle = 狗的句柄

*lp2 = 种子码    //重要之处,在分析时一定要注意这个入口值是多少

返回:

retcode = 0 表示成功,其它为错误码。

当成功时,

*p1 = 返回码1

*p2 = 返回码2

*p3 = 返回码3

*p4 = 返回码4

 //说明:4个返回值用处很大,也是加密者经常使用的功能,这个种子码和狗的密

        码相关,同号狗(指密码相同)生成的种子返回值都是相同的。

        这个功能在狗壳的分析中也是难度最大的,如果没有狗,那是没有办法

        知道返回值的,但可以采用变通的方式来完成,从而取得种子码的返回

        值,也就是常说的无狗脱狗壳的方法。

 

8. 写用户ID(RY_WRITE_USERID)

目的: 写入用户定义的ID

输入参数:

function = RY_WRITE_USERID

*handle = 狗的句柄

*lp1 = 用户ID     //是一个无符号长整型

返回:

retcode = 0 表示成功,其它为错误码。

 //这个功能要求在1功能和3功能中打开狗时指定高级密码,否则是不允许写入的,

  如果无高级密码状态下写入次数过多,将可能会损坏狗或将狗狗死,请慎重操作。

 

9. 读用户ID (RY_READ_USERID)

目的: 读出用户定义的ID

输入参数:

function = RY_READ_USERID

*handle = 狗的句柄

返回:

retcode = 0 表示成功,其它为错误码。

当成功时,*lp1 为用户ID

 //读可以不用高级密码。

 

10. 设置模块(RY_SET_MOUDLE)

目的: 设置模块字及递减属性

输入参数:

function = RY_SET_MOUDLE

*handle = 狗的句柄

*p1 = 模块号

*p2 = 用户模块字

*p3 = 是否允许递减(1 = 允许,0 = 不允许)

返回:

retcode = 0 表示成功,其它为错误码。

 //模块的数据比较特殊,只有有高级密码的情况下才可以写,但就是具有了全部的

密码,也不能读出模块的内容,但可以用变通的方法来读出它的数值。

 

11. 检查模块属性(RY_CHECK_MOUDLE)

目的: 检查模块属性字

输入参数:

function = RY_CHECK_MOUDLE

*handle = 狗的句柄

*p1 = 模块号

返回:

retcode = 0 表示成功,其它为错误码。

当成功时,

*p2 = 1 表示此模块有效

*p3 = 1 表示此模块可以递减

 //这一项功能常用在一些试用版的软件上,使用了递减功能,使模块内的数据逐步

  减1,当为0时,当前模块将无效,测试功能也就结束了。

 

12. 写算法(RY_WRITE_ARITHMETIC)

目的: 向加密狗中写入自定义算法

输入参数:

function = RY_WRITE_ARITHMETIC

*handle = 狗的句柄

*p1 = 算法区位置

buffer = 算法指令串

返回:

retcode = 0 表示成功,其它为错误码。

 // 自定义是难度最高的部分,也是这个R3的狗特点之一,可以将一些关键计算写到

狗中,指令格式见后面。但因为狗的自身原因,不可能写入太多的指令,否则软件

的速度会很受影响,算法常是1-10条之间,当然并不一定,如果指令少,还可以用

猜的办法来获得算法,但如果过长,那时间将是天文数字。

 

标签:retcode,加密狗,句柄,RY,错误码,密码,Rockey3,破解
来源: https://www.cnblogs.com/q528621124/p/11764419.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有