1、ROCKEY2 说明ROCKEY2说明目 录 第一章 简介1 关于 ROCKEY2 1 ROCKEY2 加密锁类型 1 ROCKEY2 加密锁的优点 2 选择合适的加密方案 2 第二章 ROCKEY2 加密锁的内部构造 4 ROCKEY2 加密锁的硬件接口 4 ROCKEY2 加密锁的安装问题 4 第三章 ROCKEY2 加密锁的开发包 5 第四章 ROCKEY2 加密锁的基本概念 11 用户ID(即用户密码) 11 硬件 ID 11 用户内存区 11 内置算法 11 第五章 ROCKEY2 加密锁的初始化工具 12 简介 12 第六章 ROCKEY2 加密锁的外壳加密 16 外壳加密步骤 初
2、始ROCKEY2加密锁,生成UID 外壳加密 其他功能说明 16 17 17 17 第七章 ROCKEY2 加密锁的函数调用(API). 19 ROCKEY2 API 接口 19 错误码 基本应用示例 综合应用示例 常见问题21 22 28 第八章 34 一些问题的通常处理手段 34 常见问题 34 第一章 简 介 关于 ROCKEY2 ROCKEY2加密锁是一套先进的软件保护产品,它是插在计算机的USB端口上的硬件设备。对于受保护的软件,通过它,可以保护该软件不被非法复制和非授权访问或使用。当使用加密锁加密保护您的软件后,启动所加密保护的程序时,此时若加密锁不在或对某个应用模块的访问已超过预
3、先设定的次数,程序会发出错误信息,从而终止,这就达到了加密保护软件的目的。同时ROCKEY2加密锁也可以支持许多其它的加密保护限制。 与其它一些同类产品不同,ROCKEY2加密锁实际上是个小型计算机,它配有CPU、存储器和特制的中间件,可以与应用程序交互运行。 ROCKEY2加密锁提供外壳加密功能。外壳加密程序(Ry2Env32.exe)可以加密Windows PE文件(如.dll,.exe及.arx等文件),使用极为简便,只需几秒钟就可完成。如果您没有程序的源代码,或不熟悉API,外壳加密就是一个理想的加密手段。如果可能,同时使用调用API函数与外壳加密可以大大增强加密性能。 ROCKEY2
4、为单机锁,用于单机版的软件保护,提供源代码和外壳两种加密方式。内含CPU和存储器。 本手册会逐一论述加密锁软件的一些组件,下面是一些简要介绍,并注明详细阐述的具体位置。 * 加密锁外壳加密程序(Ry2Env32.exe)是一种快速方便的加密.dll、.exe和.arx等PE格式文件的工具。适用于没有源程序,不熟悉加密锁的API的软件商。(详细参见 第六章 ROCKEY2加密锁的外壳加密) * 加密锁的API可以用来灵活的创建高强度的加密保护方法。本手册以VC+为示例程序程序进行了详细介绍,另外在光盘的Samples目录下提供了其它语言的例子程序。(详细参见 第七章 ROCKEY2加密锁的函数调
5、用(API) ROCKEY2 加密锁实现软件保护的原理: 通过在程序执行过程中对加密锁的访问,使程序带有对加密锁的硬件依赖性,利用加密锁硬件专用芯片的不可复制性,使软件也具有不可复制性,从而实现软件保护的目的。 ROCKEY2 加密锁类型 ROCKEY2加密锁为USB接口方式,该加密锁的优点为即插即用,设备独立性好,缺点在于不是所有的计算机都带有 USB 端口。 ROCKEY2 加密锁采用的是传统 EPROM 结构,但可供用户读写的空间有 2560 个字节,远远大于一般 EPROM 类型的加密锁,能够满足大量数据存储的需要。 ROCKEY2 加密锁的优点 1. 兼容性好 ROCKEY2 加密锁
6、不仅对打印机、扫描仪等设备具有高度的透明性,特别是相同的ROCKEY2 加密锁也可以使用USB HUB并联在一起使用,相互之间不会干扰。 2. 速度快 对于已使用ROCKEY2 加密锁加密后的软件,其运行速度同加密前区别不大, ROCKEY2 加密锁也能够在很短的时间内处理完毕,保证用户程序的顺畅运行。 3. 使用简便 ROCKEY2 加密锁在API函数调用加密和外壳加密上都是从用户角度出发,最大限度地简化使用接口。用户能够在很短的时间内掌握 ROCKEY2 加密锁的使用方法,节约在软件加密上所投入的时间。 4. 高加密度 ROCKEY2 加密锁是全新设计的高强度加密锁,有完整的用户管理,在用
7、户生成 UID 的时候需要给出1个长度不超过64个字节的字符串作为种子,加密锁会根据这个种子生成 UID,这个生成算法是在加密锁内部完成的,而且是不可逆的,也就是说,只有生成者才知道什么样的种子能生成什么样的 UID,别的人即使知道 UID,也能够调用这个计算过程,但因为不知道种子是什么,是无法生成您的 UID 的。 5. 系统支持 ROCKEY2 加密锁支持多种操作系统,加密的应用程序可以支持的系统平台: Windows98、Windows2000/XP、Linux、MAC、FreeBSD。 6. 软件接口丰富 ROCKEY2 加密锁对于绝大多数开发工具都有相应的软件接口, DELPHI、V
8、FP、VB、VC、C+ BUILDER等等。 选择合适的加密方案 软件的保护强度并不仅仅依赖加密锁本身,其中很大程度取决于开发者如何使用加密锁,即使有优秀的加密锁产品,但是开发者不能把它的功能完全发挥出来也跟最差的加密锁 没有区别。ROCKEY2 加密锁提供了两种方式的加密手段,第一种是外壳加密,另外一种是 API 调用加密。 外壳加密是通过我们光盘 UtilitiesEnveloper 目录下的 Ry2Env32.exe 外壳加密工具来实现的,顾名思义,外壳加密是通过给用户的某些文件加上一层运行时访问调用 ROCKEY2 加密锁的机制来实现对软件的保护。在开发者执行加过壳的程序的时候,外壳部
9、分的程序会自动访问 ROCKEY2 加密锁,并根据访问结果来决定是否允许程序继续执行下去。外壳加密是直接对开发者编译后的文件进行的加密处理,它的优点是不需要开发者学习很多的加密知识,也不需要开发者对源程序做任何的改动,当开发者没有多余的时间学习如何加密软件,或者源程序遗失的情况下,这种加密方式无疑是很便利的,但这种方法的加密强度不算很高,因为是由程序自动完成的加密处理,所以有一定的规律可循,而且对 VBA 等无法编译的脚本性语言无法加密,这些都是外壳加密的固有缺陷。 API 调用加密是开发者根据自己的开发语言选择 ROCKEY2 加密锁提供的合适的语言接口进行加密锁的访问处理,API 调用加密
10、使用灵活,可以发挥 ROCKEY2 加密锁提供的所有功能,而且加密点和加密方式由开发者自己掌握。但 API 调用方式必须结合开发者的源程序来进行,要求开发者学习并掌握 ROCKEY2 加密锁的 API 调用方法,对开发者要求的起点比较高。 第二章 ROCKEY2 加密锁的硬件特性 ROCKEY2 加密锁的内部构造 ROCKEY2 加密锁的核心是带USB接口的专用CPU。另外加密锁CPU内部还有一片存储器芯片,存储的数据掉电后不会丢失。我们把它划分成五个存储单元。开发者则可以将软件的一些重要信息(如序列号等)保存在加密锁中,需要注意的是,每个存储单元可写 10 万次,读的次数不受限制。10 万次
11、是个很大的数,一般完全可以满足绝大多数开发者的要求,只要不当成内存单元来使用就好。 ROCKEY2 加密锁的硬件接口 ROCKEY2 加密锁支持 USB 1.1 标准,通过 USB HUB 进行扩展,并且在每个 USB 加密锁上面有附加的信号灯,开发者可以通过信号灯来判定一些常见的问题(正常状态在插入 USB 加密锁以后信号灯常亮,如果信号一闪一闪表示系统加载错误等)。 ROCKEY2 加密锁的安装问题 原则上说, USB 口加密锁是即插即用的,可随时插拔。实际上,因为现在的计算机主板都有很好的保护措施,大多数情况带电插拔也没有什么问题。要注意的是在比较干燥的环境下,主机和人体间可能存在很高的
12、电压差(几百到几千伏),若带电插拔,也可能会造成锁中芯片的过压损坏。USB 加密锁虽然是即插即用,但如果在程序正在访问的过程中拔出加密锁,可能会导致系统的不稳定。 第三章 ROCKEY2 加密锁的开发包 在我们的开发套件(大盒子)内有一张光盘,这个就是 ROCKEY2 加密锁的开发包,开发者可以通过里面提供的工具和接口完成软件的加密工作。浏览光盘目录。光盘上的内容是未经压缩的,对于熟练的开发者,完全可以不安装整个开发包,只从光盘上找到需要的内容拷贝到硬盘上即可。 安装硬件 ROCKEY2 加密锁是 USB 接口的 HID 设备,在Win32、Linux 等多种平台下都有系统自带的驱动支持,不需
13、要安装额外的驱动程序。如图,插入Windows系统时在设备管理器中显示为“人体学输入设备”,如图3-1: 光盘目录及相关软件运行图如下:第四章 ROCKEY2 加密锁的基本概念 为了更好发挥使用ROCKEY2 加密锁来实现软件保护,建议开发者详细阅读本章内容,本章介绍了 ROCKEY2 加密锁相关的基本概念。 用户ID(即用户密码) 在用户生成 UID 的时候需要给出1个长度不超过64个字节的字符串作为种子,加密锁会根据这个种子生成 UID,这个生成算法是在加密锁内部完成的,而且是不可逆的,也就是说,只有生成者才知道什么样的种子能生成什么样的 UID,别的人即使知道 UID,也能够调用这个计算
14、过程,但因为不知道种子是什么,是无法生成您的 UID 的,从而该ID就成为用户ID,即用户密码。 开发商刚从我公司拿到 ROCKEY2 加密锁的时候,缺省的 UID 为 0,这时候虽然能够使用这个等于0 的 UID 来打开加密锁并进行读写操作,但无法获得正确的硬件ID(HID),因为我们的设定是当 UID 等于 0 的时候,表示的是出厂状态,这时候 HID 也会返回 0。只有当用户设定了自己的 UID 以后,才能够获得正确的硬件ID(HID)。 硬件 ID 每个 ROCKEY2 加密锁内部都有一个唯一的硬件 ID,这个硬件 ID 是在加密锁出厂时烧入的,即使是厂家也不能修改这个硬件 ID,而且
15、这个硬件 ID 具有唯一性, 即世界上不可能有两个相同硬件 ID 的 ROCKEY2 加密锁,当开发者需要给特定用户加密时,可以通过检查这个 ID 来确认加密的唯一有效性。 用户内存区 每个 ROCKEY2 加密锁内部有五个存储区,开发者可以读/写这一区域,例如在此区域写入一些软件运行所需得重要信息或相关的内容来检验软件的合法性,促使软件在只有加密锁的情况下才能正常工作。 ROCKEY2 加密锁的每个区域大小为512字节。 内置算法 ROCKEY2 加密锁内置不公开算法,可以利用此算法进行加密处理相关数据等,以便提高您软件的加密强度。 第五章 ROCKEY2 加密锁的初始化工具 简介 ROCK
16、EY2 加密锁初始化(UtilitiesInitInit ROCKEY2.exe)工具可以对 ROCKEY2 加密锁进行UID(即用户密码)的生成,用户内存区的写入/读取操作 (如图5-1所示)。下面分别介绍这几部分的功能: 图5-1 (1) 点击“Generate UID”如图5-2所示,您可以发现已经找到一只ROCKEY2加密锁,弹出的对话框需要您输入原始密码,如图中的“12345”,当以该串为原始密码点击“OK”,则如图5-3,生成UID为715400947的用户加密锁。 图5-2 图5-3 :该原始密码长度不超过64个字节,而且请您牢记,否则您无法再次重新生成同样UID的ROCKEY2
17、加密锁,同时提醒您初始化加密时会清空锁中已有的数据信息。 (2) 待初始化ROCKEY2加密锁后,点击“Write”按钮,则可以根据生成的UID来写入读取加密锁5个存储单元的内容,如图5-4,5-5,5-6,对ROCKEY2加密锁0存储单元写入数据: 图5-4 图5-5 图5-6 (3) 点击“Read”按钮,如图5-7所示,显示写入0区的内容: 图5-7 第六章 ROCKEY2 加密锁的外壳加密 ROCKEY2 加密锁的外壳加密是保护您的软件最快捷的方法,使用外壳加密工具这种加密方案非常简单,对于没有源代码或没有很多时间编写代码加密的开发者是极为方便的。考虑到软件的发展趋势,我们的外壳加密工
18、具目前仅对32位应用程序有效。目前支持的文件格式有 Win32 PE 格式的文件 EXE、DLL,ARX 等。 在光盘或安装目录UtilitiesEnveloper Ry2Env32.exe 是 ROCKEY2 加密锁的外壳加密工具,如下图6-1所示: 图6-1 : 在采用外壳加密(Ry2Env32.exe)工具加密保护您的软件之前,请您注意备份要保护的文件。 您可以仅利用一把ROCKEY2加密锁使用外壳加密(Ry2Env32.exe)工具来多次和采用不 同方法处理保护您的软件。 如果您采用外壳加密(Ry2Env32.exe)工具和函数调用(API)共同保护软件时,请您先用(API)加密处理您
19、的源程序后(API)加密处理,请您参见第七章 ROCKEY2 加密所的函数调用),再用外壳加密(Ry2Env32.exe)工具。 外壳加密步骤: 1初始ROCKEY2加密锁,生成UID: 该步骤详细操作,参见第五章。 2外壳加密: 执行加密,这时进度条会显示工作进度,最后提示“文件加密成功,如图6-2所示: 图6-2 3其它功能说明: 进行定时检测:该功能表现为当软件加密启动后,以此间隔时间查找加密锁,一旦发现加密锁不存在,则立刻终止程序正常运行。 高级:为您提供多线程方式,最大化的提供外壳加密处理机制,如图6-3。 图6-3 : 开发者可以同时使用 API(参见 第七章 ROCKEY2加密锁
20、的函数调用(API)和外壳加密来实现最大限度的保护。 第七章 ROCKEY2 加密锁的函数调用( API) ROCKEY2 加密锁应用程序开发界面 (API) 是 ROCKEY2 加密锁最基本也是最灵活的加密方式。使用我们提供的 API 来加密的程序,能够最大限度的发挥加密锁的功能,加密效果的好坏依赖于您如何使用它。我们最大限度地简化了 API 的接口。 使用API通过应用程序在ROCKEY2中插入调用来提高安全性。您可以在应用程序的任何地方来检测ROCKEY2 加密锁的存在,并决定如何响应检测结果。您也可以检测您存储在ROCKEY2加密锁各个内存区中的数据。 下面以 C 的接口来举例说明一下
21、接口参数的含义,其它语言基本是大同小异的。 Rockey2 API 接口 1. RY2_Find:查找计算机上连接的 Rockey2 加密锁设备 EXTERN_C int WINAPI RY2_Find(); 返回 小于 0 表示返回的是一个错误码。 为 0 表示没有任何 Rockey2 设备存在 大于 0 返回的是找到的 Rockey2 加密锁的个数 2. RY2_Open: 打开指定的加密锁 EXTERN_C int WINAPI RY2_Open(int mode, DWORD uid, DWORD* hid); 输入 mode 此参数表示打开加密锁的方式 mode = 0 表示的是打开
22、第1个找到的 Rockey2,不理会 UID 和 HID mode 0 表示的是按 UID 方式打开,这时候 mode 的值表示的是要打开锁的序号譬如: uid=12345678, mode=2 表示的是希望打开 uid 等于12345678 的第2把加密锁。 mode = -1 表示的是按 HID 方式打开,要求 *hid 不能为 0 为了使用方便.定义了两个宏: AUTO_MODE=0 HID_MODE= -1 uid(UserID) 当按 UID 方式打开的时候,在这给出要打开加密锁的 UID,此 UID 就是用户调用RY2_GenUID 功能获得的用户 ID。 hid 这个是加密锁的硬
23、件 ID,这是1个输入/输出值,如果按 HID 方式打开加密锁的时候,表示希望打开硬件ID = *hid 的加密锁。 不论以哪种方式打开加密锁,在成功打开加密锁以后会在这返回加密锁的硬件 ID 返回 =0 表示成功,返回的就是打开的加密锁的句柄 0 返回的是一个错误码。 3. RY2_Close: 关闭指定的加密锁 EXTERN_C void WINAPI RY2_Close(int handle); 输入 handle 设备的句柄,跟 RY2_Open 命令返回的 handle 一致。 返回 返回的是一个错误编码,具体含义请看下面的错误编码部分。 4. RY2_GenUID: 生成用户 ID
24、 EXTERN_C int WINAPI RY2_GenUID(int handle, DWORD* uid, char* seed, int isProtect) 输入 handle 设备的句柄,跟 RY2_Open 命令返回的 handle 一致。 uid 输出参数,生成的用户 ID 从此参数返回 seed 用户给出的用于生成用户 ID 的种子,这是一个最大长度可以是 64 个字节的字符串 isProtect 返回 一个错误编码,具体含义请看下面的错误编码部分 5. RY2_Read; 读取加密锁内容 EXTERN_C int WINAPI RY2_Read(int handle, int
25、 block_index, char* buffer512); 输入 handle 设备的句柄,跟 RY2_Open 命令返回的 handle 一致。 block_index块索引,指明要读取的是哪1个块,取值为(0-4) buffer512 读出块的缓冲区,因为每个块的长度固定为 512 个字节,所以这个 buffer 的大小至少是 512 个字节 返回 一个错误编码,具体含义请看下面的错误编码部分 6. RY2_Write:写入加密锁内容 EXTERN_C int WINAPI RY2_Write(int handle, int block_index, char* buffer512);
26、 输入 handle 设备的句柄,跟 RY2_Open 命令返回的 handle 一致。 block_index块索引,指明要读取的是哪1个块,取值为(0-4) buffer512 读出块的缓冲区,因为每个块的长度固定为 512 个字节,所以这个 buffer 的大小至少是 512 个字节 返回 一个错误编码,具体含义请看下面的错误编码部分 7. RY2_Transform:进行数据变换(内部算法实现) EXTERN_C int WINAPI RY2_Transform(int handle, int len, BYTE* data); 输入 handle 设备的句柄,跟 RY2_Open 命
27、令返回的 handle 一致。 len 输入数据data的长度,最大不超过32个字节 data 用户输入数据 返回 Data变换后的数据 一个错误编码,具体含义请看下面的错误编码部分 8. RY2_GetVersion:取硬件版本号 EXTERN_C int WINAPI RY2_ GetVersion (int handle); 输入 handle 设备的句柄,跟 RY2_Open 命令返回的 handle 一致。 返回 硬件版本号 错误编码 宏 值 含义 RY2ERR_SUCCESS 0 成功,没有错误 RY2ERR_NO_SUCH_DEVICE 0xA0100001 没有找到给定要求的设备(参数错误) RY2ERR_NOT_OPENED_DEVICE 0xA0100002 在调用此功能前需要先调用 RY2_Open 打开设备(操作错误) RY2ERR_WRONG_UID 0xA0100003 给出的 UID 错误(参数错误) RY2ERR_WRONG_INDEX 0xA0100004 读写操作给出的块索引错误(参数错误) RY2ERR_TOO_LONG_SEED 0xA0100005 调用 GenUID 功能的时候,给出的 seed 字符串长度超过了 64 个字节(参数错误) RY2ERR_WRITE_PROTECT 0xA0100006 试图改写已经写保护
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1