|
楼主 |
发表于 2009-1-19 23:56:16
|
显示全部楼层
|阅读模式
来自 黑龙江省哈尔滨市
文章作者:Trojan
信息来源:噩靈戰隊[Evil-Soul Security Team](http://bbs.x-xox-x.com)
最近学了下算法,算法大牛duguyue100也给我指点了很多。再次感谢下。顺便鄙视下叫小锋工作室的,整个NB僵尸自己捆绑好了后门,还死不承认。这个骗子。。。
论坛自从开放以来到现在加密解密版块不是很火,估计没人热爱哈。其实加密解密也很有意思的。今天我的文章叫加密和校验方式,让大家进入什么的加密解密大门,也多多关注论坛这个版块,废话不多说了。开始把。。
加过密的朋友都知道用户可以根据自己软件的实际情况选择相应的加密算法机制,来防止自己的东东不被别人破。提高软件保护的关键就是选择合适的加密算法和软件校验方式。如果连加密算法都不会选择,就别说什么软件保护了。因为不同的算法之间的区别是很大滴!使用的范围不同,实现的方式也不一样,因此选择适用的加密算法,才能达到自己满意的软件加密效果.经常用到的加密算法主要是这样几类:对称算法、非对称算法、Hash算法等等。其中Hash算法属于不可逆算法,如大家都知道的MD5.而对称算法是一种双密钥的算法,用公钥加密,私钥加密,如RSA算法等..
1.Hash算法作为注册码验证方法
使用Hash算法作为注册码验证算法的完整代码如下:- Uses MD5Unit;
- Procedure TForm1.ButtonClick(Sender:TObject);
- Var
- UserName, Serial:String;
- begin
- UserName:=Edit1.Text;//用户名
- Serial:=Edit2.Test; //注册码
- If GetStrMD5 (UserName) =Serial then
- MessageBox(Handle,"注册成功!"."提示",MB-OK)
- else
- MessageBox(Handle,"注册失败!","提示",MB-OK);
- End;
复制代码 将以上的代码进行编译之后,在用W32Dasm编辑器打开,通过串式参考方式即可找到验证码注册码的关键代码部分:- : 004****0503 E8E440FBFF call 00***45EC
- : 004****0508 751Bjne004****0525
- : 00***50A 6A00push000****0000
复制代码 在使用0D打开程序,输入004****0503来到关键call代码处,设置断点,在运行,此时在运行起来的程序里面输入用户名和注册码,单击\"注册认证\",程序就断了下来,此时在寄存器窗口中把真的注册码和假的注册码都显示出来了,但Hash算法的缺点就是不适合用于软件注册码验证,只适合用户辅助其他算法进行注册码验证.
2.对称算法作注册码验证算法
完整代码如下:- Uses DesUnit;
- procedure TForm1,ButtonClick (Sender.TObject);
- Var
- UserName, Serial:String;
- begin
- UserName:=Edit2.TEXT;
- IFDESEncrypt (UserName,”123****7890“)=Serial then
- MessageBox(Handle,"注册成功!","提示", MB-OK)
- else
- MessageBox(Handle,"注册失败!","提示", MB-OK)
- End;
复制代码 将上诉代码进行编译之后,用W32Dasm编辑器打开,通过串式参考方式即可找到验证注册码的关键代码部分:- :00***43C E8AB41FBFF call 00***45EC
- :004****0441 751Bjne00***45E
- :004****0443 6A00 push000****0000
复制代码 OD打开,00***43C来到call代码处,设置断点,然后运行。此时程序输入用户名和注册码之后,点注册认证,程序就断了下来,此时,寄存器窗口中把真的注册码和假的注册码就显示出来了。
可以看到使用Hash算法和对称算法同样是明码比较,很容易就拦截到真的注册码,
推荐使用对称算法方式如下- if 用户名 =SesDe (注册码,公钥)then
- messageBox(Handle,"注册成功","提示", MB-OK)
- else
- MesageBox(Handle,"注册失败","提示", MB-OK)
复制代码 大概就是这个样子具体实例代码不打了,然后打好完整的代码后继续W32Dasm在用OD打开程序,将会发现没有显示的信息,这种方式属于非明码比较方式。就要求破解者需要在深入进行分析软件使用了何种算法后,才能选择何时的破解方式。还可以使用多种对称算法,采用非明码的方式实现对注册码的验证,注册验证的实现方式如下:- If DesDe (BlowFishDe(注册码,密钥),密钥)=用户名 then
- MessageBox(Handle,"注册成功!","提示", MB-OK)
- else
- MessageBox(Handle,"注册失败!","提示", MB-OK)
复制代码 在上面的例子只使用了2种算法,其实,实现注册码校验还可以采用更多的算法来进行.不过都是非明码的方式比较注册码,虽然说使用的算法越多越好,但是由于算法的速度问题,一般推荐使用3~5种算法即可。
对注册码进行比较时,不管使用了多少种对称算法,密钥都是以明文方式提供的。在实际应用过程中需要对密钥进行一下变换,就可以使用Hash算法作为变换算法。应用MD5算法作为交换算法,密钥不是MD5(密钥)里面的密钥,而是经MD5运算之后得到的值才是最后的密钥,在此时以MD5作为例子来讲,在具体应用时还可以选选其他的Hash算法。
3.公开密钥算法作为注册码算法
对称算法应用于非明码比较方式,在很大程度增加了软件的破解难度。只要破解者分析出所用的算法是什么,然后找到密钥,就可以轻易写出注册机。所以使用对称算法的保密效果不是很理想。RSA算法采用了2个密钥,公钥加密和私钥加密。它的解密难度是基于大数分解。并切RSA是一种非对称算法。在密钥未知的情况下,很难做出注册机。
对RSA算法最后效的攻击就是对N进行因式分解,从而得到密钥进行解密。在RSA算法使用时要提高模数的倍数。- If RSADecrypt (注册码,公钥,模数) =用户名 then
- messageBox(Handle,"注册成功!","提示", MB-OK)
- else
- MessageBox(handle,"注册失败!","提示", MB-OK)
复制代码 用在注册码验证里面的模数要和注册机里的一样,并且私钥与公钥要配对使用。如果对模数、私钥、公钥进行转换,那就全部重新计算,而不是计算一次只取一个或几个值而已。
加密解密高手多批评.. |
|