含泪求助有关在VC6.0中使用Miracl库的问题

含泪求助有关在VC6.0中使用Miracl库的问题,第1张

嗯,你这不是第一次运行了吧?有一个比较笨的做法就是,将你这个123文件完全删除,再重新创建就会没事了。我跟你一样,之前也运行了这个,后来就不行了。后来摸索发现,重新打开这个文件的时候,第一次添加进去的miracl\lib\ms32.lib已经没有了,所以你再添加一次这个文件进去可以了。

步骤:打开123.c文件后,在右边的workspace工作区间中,点击“fileview”,再右键点击击“123 files”,点“添加文件到工程”,然后把ms32.lib添加进去(要是看不进ms32.lib,将“文件类型”改为“所有文件”)

为了解决大数运算的问题,世界各国的软件开发人员和研究学者都进行了很多的研究和实践。近年来,越来越多的开发人员开始重视软件工程的作用,为了减少重复劳动,提高软件的质量和代码复用,许多优秀的大数运算库随之出现。下面对几种优秀的大数库进行简单的介绍:

GMP:GMP大数库是GNU项目的一部分,诞生于1991年。作为一个任意精度的大整数运算库,它包括了任意精度的带符号整数、有理数、浮点数的各种基本运算 *** 作。它是一个c语言的库,但是官方提供了c++的包装类,主要的应用方向是密码学、网络安全、代数系统、计算科学等。GMP库的运行速度非常快的,它的官方网站上称自己为地球上最快的大数库,但是GMP库所提供的只是数学运算功能,并没有密码学相关的高级功能。

Miracl:Miracl库是Shamus Software Ltd开发的一个大数库,它的使用许可针对教育科学研究或者非商业目的地应用是免费的。在应用上它是一个c语言的库,同时提供了几个较为简单的c++包装类。在功能上它不但提供了高精度的大整数和分数的各种数学运算 *** 作而且提供了很多密码学算法中的功能模块,如SHA、AES、DSA等中的一些底层 *** 作。最为特别的是它还提供了很多椭圆曲线密码体制中的底层功能模块。由于Miracl库的内部实现采用了很多的汇编层的代码,故运行速度也非常快。

Crypto++:Crypto++库是一个开源项目,也是免费使用的。由于它是一个纯c++实现的库,所以应用非常的方便,库的结构清晰,使用方便,文档也很健全。Crypto++库提供了很多密码学算法的实现。

OpenSSL:OpenSSL是一个开放源代码的实现了SSL及相关加密技术的软件包,由加拿大的Eric Yang等发起编写的。它可以实现消息摘要、文件的加密和解密、数字证书、数字签名和随机数字等。 它的主要用途并不是大数库,而是SSL协议的实现和应用,但是其中也有一些关于大整数的功能,此外它也是基于c语言。

一、Java软件加密基本思路

对于应用软件的保护笔者从两个方面进行考虑,第一是阻止盗版使用软件,第二是阻止竞争对手对软件反编译,即阻止对软件的逆向工程。

1、阻止盗版

在软件运行时对自身存在的合法性进行判断,如果认为自身的存在和运行是被授权的、合法的,就运行;否则终止运行。这样即使软件可以被随意复制,只要盗版用户没有相应的授权信息就无法使用软件。

2、阻止反编译

对编译产生的Class文件加密处理,并在运行时进行解密,解密者无法对软件进行反编译。

二、Java软件加密的总体流程

为了保护用Java语言开发的软件,我们设计并实现了一个实用、高强度的加密算法。以下称需要保护的Java软件为“受保护程序”,称对“受保护程序”进行加密保护的软件为“加密程序”。对软件加密保护的流程如图1所示。

三、加密算法分析设计

1、用户信息提取器设计

为了防止用户发布序列号而导致“一次发行,到处都是”的盗版问题,提取用户机器中硬件相关的、具有唯一性的信息——用户计算机的硬盘分区C的序列号,并要求用户将此信息与用户名一起返回,之后用“序列号生成器”根据用户返回信息生成一个唯一合法的软件注册序列号发回用户,用户即可使用此号码注册使用软件。

这个信息提取器使用Winclows 32汇编以一个独立的小程序方式实现,程序代码如图2所示。

2、序列号生成器与序列号合法性判断函数的设计

序列号生成器与序列号合法性判断函数中运用RSA加密算法。在序列号生成器中是使用私钥将用户返回的信息(硬盘序列号,用户名)进行加密得到相应的注册序列号;在序列号合法性判断函数中使用私钥将用户输入的注册序列号解密,再与(硬盘序列号,用户名)进行比较,一致则调用程序装载器将程序其他部分解密装入内存,初始化删环境并运行程序主体;否则退出。

RSA加密算法的实现需要使用大数运算库,我们使用MIRACL大数库来实现RSA计算,序列号生成器的主要代码如下:

char szlnputString[]=”机器码和用户名组成的字符串”

char szSerial[256]=[0]//用于存放生成的注册码

bign,d,c,m//MIRACL中的大数类型

mip→IBASE=16//以16进制模式

n= mlrvar(0)//初始化大数

d= mirvar(0)

c= mirvar(0)//C存放输入的字符串大数

m= mlrva(o)

bytes to big( len, szlnputString,c)

//将输入字符串转换成大数形式并存入变量c中

cinstr(n,”以字符串形成表示的模数”)//初始化模数

cinstr(d,”以字符串形成表示的公钥”)://初始化公钥

powmod(c,d,n,m)//计算m=cdmod n

cotstr(m,szSerial);//m的16进制字符串即为注册码

序列号合法性检测函数的主要代码如下:

char szlnputStringL]=”机器码和用户名组成的字符串”

char szSerial[ 256]=”用户输入的序列号”

bign,e,c,m//MIRACL中的大数类型

mip→IBASE=16//以16进制模式

cinstr(m,szSerial)//将序列号的16进制转成大数形式

cinstr(n,”模数n的字符串形式”)//初始化模数n

cinstr(e,”字符串形式的公钥”)//初始化公钥

if compare(m,n)==-1) //m<n时才进行解密

{

powmod(m,e,n,c)//计算m=me mod n

big_to _bytes(0,c,szSerial,0)//转为字符串

return lstrcmp( szlnputString,szSerial)

}

3、强耦合关系的设计

如果在序列号合法性检测函数中简单地使用图3所示流程:

解密者可以使用以下几种手段进行攻击:

(1)修改“判断合法性子函数”的返回指令,让它永远返回正确值,这样可以使用任意的序列号,安装/使用软件。

(2)修改判断后的跳转指令,使程序永远跳到正确的分支运行,效果和上一种一样。

(3)在“判断合法性子函数”之前执行一条跳转指令,绕过判断,直接跳转到“正常执行”分支运行,这样可以不用输入序列号安装/使用软件。

为阻止以上攻击手段,笔者在程序中增加了“序列号合法性检测函数”与程序其他部分“强耦合”(即增强其与程序其他部分的关联度,成为程序整体密不可分的一部分,一旦被修改程序将无法正常工作)的要求(见图1),并且设置一个“完整性检测函数”用于判断相关的代码是否被修改过。当然,基于同样的原因,“完整性检测函数”也必须与程序其他部分存在“强耦合”关系。

强耦合关系通过以下方式建立:

在程序其他部分的函数(例如函数A)中随机的访问需要强耦合的“序列号合法性检测函数”和“完整性检测函数”,在调用时随机的选择使用一个错误的序列号或是用户输入的序列号,并根据返回结果选择执行A中正常的功能代码还是错误退出的功能代码,流程如图4所示。

经过这种改进,如果破解者通过修改代码的方式破解将因“完整性检测”失败导致程序退出;如果使用SMC等技术绕过“序列号合法性判断函数”而直接跳至序列号正确时的执行入口,在后续的运行中,将因为随机的耦合调用失败导致程序退出。破解者要破解软件将不得不跟踪所有进行了耦合调用的函数,这显然是一个艰巨的任务。

4、完整性检测函数的设计

我们使用CRC算法算出需进行完整性检测的文件的校验码,并用RSA加密算法的公钥(不同于序列号合法性检测中的公钥/私钥对)将其加密存放在特定的文件中,在检测时先用CRC算法重新生成需进行完

整性检测的文件的校验码,并用私钥将保存的校验码解密,两者相比较,相等则正常运行;否则退出。

5、程序加载器的设计

与编译成机器码执行的程序不同,Java程序只能由Java虚拟机解释执行,因此程序加载器的工作包括:初始化Java虚拟机;在内存中解密当前要运行的class文件;使解密后的c:lass文件在虚拟机中运行,在

需要时解密另一个class文件。图5是用于初始化JVM的代码:

以上介绍了我们设计的针对Java软件的加密保护方法,其中综合运用了多种加密技术,抗破解强度高;使用纯软件保护技术,成本低。经笔者在Windows系列平台上进行测试,运行稳定,效果良好。

在研宄开发过程中,我们还总结出加密保护软件的一些经验:

1、对关键代码和数据要静态加密,再动态解密执行;要结合具体的工作平台使用反跟踪/调试技术;

2、要充分利用系统的功能,如在Windows下使用DLL文件或驱动程序形式能得到最大的丰又限,可以充分利用系统具有的各种功能;

3、如果可能应该将关键代码存放在不可禚复制的地方;

4、序列号要与机器码等用户信息相关以阻止盐复布序列号;

5、加密流程的合理性比加密算法本身的强度更重要。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9985396.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-04
下一篇2023-05-04

发表评论

登录后才能评论

评论列表(0条)

    保存