您的位置:首页 > 其它

加密算法运用不当的后果

2005-12-02 14:03 281 查看
加密算法运用不当的后果
lnn1123[BCG][DCM][DFCG][D.4s]
看题目就知道这次的目标软件里用到了加密算法,哈哈,现在的软件用加密算法的真的是不少,软件作者已经不象以前那样的不重视加密软件了,但是用加密算法失败的例子也有不少的哦,这期我为大家带来的就是运用不好的加密算法,现在的软件很多是加的猛壳或者什么变态的加密算法,使得小菜门看了就跑,为了给大家学习破解的信心,我带了一个击败加密算法的例子.
软件介绍:房地产开发项目经济评价可行性研究及概预决算管理系统 专业版 6.36,可实现项目成本(造价)、销售收入、投资计划、资金筹措计划、土地拍卖多方案经济分析、敏感性分析(风险性分析)电算化,可以以最快速度准确地计算出项目的造价(成本)、销售收入计算、投资计划、资金筹措计划、土地拍卖多方案经济分析、敏感性分析(风险性分析)等有关数据,并可撰写可行性报告,为房地产开发或固定资产投资企业(单位)的项目投资决策,项目实施过程中成本核算、成本控制和项目竣工后的财务决算提供依据,是土地拍卖招投标报价的好助手。

呵呵,软件功能好像满强大的,但是注册算法的保护是不是很强大呢,
呵呵,软件功能好像满强大的,但是注册算法的保护是不是很强大呢,
呵呵,软件功能好像满强大的,但是注册算法的保护是不是很强大呢,初步观察:
破解工具:PEID 0.93
Ollydbg 1.10(下面简称OD)
这2个工具是每个喜欢破解的人必备的软件啊
先用PEID看看有没有加壳,现在的软件加壳的真的是不少啊,查看情况如图1所示(图1)看到没有壳,是delphi编写的,情况还比较好哦 ^_^运行软件看看如图2所示(图2)发现窗口上方有”尚未注册”的提示,看起来真的不爽啊,决定把它给干了跟踪过程:试着注册一下机器码: ACA9B-B9EEC-324A3-02A00注册码:78787878点注册后就是注册失败(如果不是建议买彩票 ^_^ )如图3所示(图3) 刚才看到有错误提示,那么我的第一个想法就是找字符参考,用老罗大牛的插件(支持中文的哦)
Ultra String Reference,项目 2986
Address=0061C6A7
Disassembly=MOV EDX,EEV.0061C7D4
Text String=注册失败,请再次注册!
现在好了,下断在
0061C508 . 55 PUSH EBP //下断处
0061C509 . 8BEC MOV EBP,ESP
0061C50B . 83C4 D4 ADD ESP,-2C
算法分析:
0061C592 . E8 3D56E6FF CALL EEV.00481BD4 ; 得到机器码
0061C597 . 8B55 F4 MOV EDX,DWORD PTR SS:[EBP-C] ; 机器码
省略代码。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
0061C5E4 . E8 EB55E6FF CALL EEV.00481BD4 ; 得到假码
0061C5E9 . 8B55 F0 MOV EDX,DWORD PTR SS:[EBP-10] ; 假码
0061C5EC . A1 D4D36C00 MOV EAX,DWORD PTR DS:[6CD3D4]
省略代码。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。[/b]
0061C618 . B8 A8C76100 MOV EAX,EEV.0061C7A8 ; ASCII "75EA2-2D12A-AA55A-FBCC7"
0061C61D . E8 9E88DEFF CALL EEV.00404EC0 ; 要进去,因为涉及到注册
0061C622 . 85C0 TEST EAX,EAX ;位测试
0061C624 . 74 0A JE SHORT EEV.0061C630 ;必须跳
0061C626 . E8 257DDEFF CALL EEV.00404350
0061C62B . E9 B3000000 JMP EEV.0061C6E3
0061C630 > 8D55 DC LEA EDX,DWORD PTR SS:[EBP-24] ; 机器码
0061C633 . A1 10D76C00 MOV EAX,DWORD PTR DS:[6CD710]
0061C638 . 8B00 MOV EAX,DWORD PTR DS:[EAX]
0061C63A . E8 49B3F8FF CALL EEV.005A7988 ; 要跟进,对机器码进行MD5运算
0061C63F . 8D45 DC LEA EAX,DWORD PTR SS:[EBP-24]
0061C642 . 8D55 EC LEA EDX,DWORD PTR SS:[EBP-14]
0061C645 . E8 1A090000 CALL EEV.0061CF64 ; 产生的注册码,好像可以做内存注册机哦
0061C64A . 8B45 EC MOV EAX,DWORD PTR SS:[EBP-14] ; MD5后的前8个字符连接,****-****这个样子
0061C64D . 8B15 D4D36C00 MOV EDX,DWORD PTR DS:[6CD3D4] ; EEV.006CF42C
0061C653 . 8B12 MOV EDX,DWORD PTR DS:[EDX] ; 假码
0061C655 . E8 6688DEFF CALL EEV.00404EC0 ; 重要CALL,要进去
0061C65A . 85C0 TEST EAX,EAX ;不能够让它返回EAX=0
0061C65C . 7E 2E JLE SHORT EEV.0061C68C ; 关键跳转,跳就注册失败
0061C65E . 6A 40 PUSH 40 ;注册成功的提示
0061C660 . 8D55 D8 LEA EDX,DWORD PTR SS:[EBP-28]
0061C663 . A1 24D86C00 MOV EAX,DWORD PTR DS:[6CD824]
0061C68C > 6A 10 PUSH 10 ; 注册失败的提示
0061C68E . 8D55 D4 LEA EDX,DWORD PTR SS:[EBP-2C]
0061C691 . A1 24D86C00 MOV EAX,DWORD PTR DS:[6CD824]
0061C696 . 8B00 MOV EAX,DWORD PTR DS:[EAX]
0061C698 . E8 AB73E8FF CALL EEV.004A3A48
省略代码。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
比较的方式:
=============================== 进CALL EEV.00404EC0================================
00404EC0 /$ 85C0 TEST EAX,EAX ; 是否为空
00404EC2 |. 74 40 JE SHORT EEV.00404F04
00404EC4 |. 85D2 TEST EDX,EDX ; 是否为空
00404EC6 |. 74 31 JE SHORT EEV.00404EF9
00404EC8 |. 53 PUSH EBX
00404EC9 |. 56 PUSH ESI
00404ECA |. 57 PUSH EDI
00404ECB |. 89C6 MOV ESI,EAX
00404ECD |. 89D7 MOV EDI,EDX
00404ECF |. 8B4F FC MOV ECX,DWORD PTR DS:[EDI-4]
00404ED2 |. 57 PUSH EDI
00404ED3 |. 8B56 FC MOV EDX,DWORD PTR DS:[ESI-4]
00404ED6 |. 4A DEC EDX
00404ED7 |. 78 1B JS SHORT EEV.00404EF4
00404ED9 |. 8A06 MOV AL,BYTE PTR DS:[ESI] ; 取一个字节
00404EDB |. 46 INC ESI
00404EDC |. 29D1 SUB ECX,EDX ; 假码的长度减运算得到的字符的长度
00404EDE |. 7E 14 JLE SHORT EEV.00404EF4 ; 假码长度不能小于8位
00404EE0 |> F2:AE /REPNE SCAS BYTE PTR ES:[EDI] ; 串扫描
00404EE2 |. 75 10 |JNZ SHORT EEV.00404EF4
00404EE4 |. 89CB |MOV EBX,ECX
00404EE6 |. 56 |PUSH ESI ; 比较的参数
00404EE7 |. 57 |PUSH EDI ; 比较的参数
00404EE8 |. 89D1 |MOV ECX,EDX ; 比较的位数
00404EEA |. F3:A6 |REPE CMPS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI] ; 串比较
00404EEC |. 5F |POP EDI
00404EED |. 5E |POP ESI
00404EEE |. 74 0C |JE SHORT EEV.00404EFC ; 串比较是否相等
这里比较的方式是串比较,这里就是看看注册码是不是75EA2-2D12A-AA55A-FBCC7为这个,注册失败,后面最后一次比较注册码也用到这个CALL
MD5计算过程:
======================进CALL EEV.005A7988==========================================
005A79AD |. E8 AEFEFFFF CALL EEV.005A7860 ; MD5常数初始化
005A79B2 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] ; 机器码
005A79B5 |. E8 C2D1E5FF CALL EEV.00404B7C ; 是否为空
005A79BA |. 50 PUSH EAX
005A79BB |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
005A79BE |. E8 B9D3E5FF CALL EEV.00404D7C
005A79C3 |. 8BD0 MOV EDX,EAX
005A79C5 |. 8D45 A4 LEA EAX,DWORD PTR SS:[EBP-5C]
005A79C8 |. 59 POP ECX
005A79C9 |. E8 C6FEFFFF CALL EEV.005A7894 ; 标准的MD5运算
005A79CE |. 8BD3 MOV EDX,EBX
005A79D0 |. 8D45 A4 LEA EAX,DWORD PTR SS:[EBP-5C]
005A79D3 |. E8 3CFFFFFF CALL EEV.005A7914
005A79D8 |. 33C0 XOR EAX,EAX
005A79DA |. 5A POP EDX
005A79DB |. 59 POP ECX
005A79DC |. 59 POP ECX
005A79DD |. 64:8910 MOV DWORD PTR FS:[EAX],EDX
005A79E0 |. 68 F5795A00 PUSH EEV.005A79F5
005A79E5 |> 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
005A79E8 |. E8 BFCEE5FF CALL EEV.004048AC
005A79ED /. C3 RETN
标准MD5的特征:
==========================进CALL EEV.005A7860=====================================
005A7860 /$ C700 01234567 MOV DWORD PTR DS:[EAX],67452301 ; 标准MD5的四个常数
005A7866 |. C740 04 89ABCD>MOV DWORD PTR DS:[EAX+4],EFCDAB89
005A786D |. C740 08 FEDCBA>MOV DWORD PTR DS:[EAX+8],98BADCFE
005A7874 |. C740 0C 765432>MOV DWORD PTR DS:[EAX+C],10325476
005A787B |. 33D2 XOR EDX,EDX
005A787D |. 8950 10 MOV DWORD PTR DS:[EAX+10],EDX
005A7880 |. 33D2 XOR EDX,EDX
005A7882 |. 8950 14 MOV DWORD PTR DS:[EAX+14],EDX
005A7885 |. 83C0 18 ADD EAX,18
005A7888 |. BA 40000000 MOV EDX,40
005A788D |. E8 DA06E6FF CALL EEV.00407F6C
005A7892 /. C3 RETN
这段的功能就是把机器码用MD5加密算法加密得到一个MD5值,结果为16字节,机器码: ACA9B-B9EEC-324A3-02A00
我这里的机器码MD5值是: d6d11c05c3b225b10d95ec54a4cd7f9c
转化MD5:
=======================进CALL EEV.0061CF64=======================================
省略代码。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
0061CF6D |. 33C9 XOR ECX,ECX
0061CF6F |. 894D D8 MOV DWORD PTR SS:[EBP-28],ECX ; 为0
0061CF72 |. 894D E8 MOV DWORD PTR SS:[EBP-18],ECX
0061CF75 |. 894D DC MOV DWORD PTR SS:[EBP-24],ECX
0061CF78 |. 894D FC MOV DWORD PTR SS:[EBP-4],ECX
0061CF7B |. 8BF0 MOV ESI,EAX
0061CF7D |. 8D7D EC LEA EDI,DWORD PTR SS:[EBP-14]
0061CF80 |. A5 MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI] ; MD5产生的16个字节
0061CF81 |. A5 MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI] ; MD5产生的16个字节
0061CF82 |. A5 MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI] ; MD5产生的16个字节
0061CF83 |. A5 MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI] ; MD5产生的16个字节
省略代码。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
0061CF9E |. E8 59AAF8FF CALL EEV.005A79FC ; MD5产生的16个字节
0061CFA3 |. 8B45 DC MOV EAX,DWORD PTR SS:[EBP-24] ; |MD5值
0061CFA6 |. 8945 E0 MOV DWORD PTR SS:[EBP-20],EAX ; |
0061CFA9 |. C645 E4 0B MOV BYTE PTR SS:[EBP-1C],0B ; |
0061CFAD |. 8D55 E0 LEA EDX,DWORD PTR SS:[EBP-20] ; |
0061CFB0 |. 33C9 XOR ECX,ECX ; |
0061CFB2 |. B8 5CD06100 MOV EAX,EEV.0061D05C ; |ASCII "%s"
0061CFB7 |. E8 6CDBDEFF CALL EEV.0040AB28 ; /转化为字符形式
0061CFBC |. 8B45 E8 MOV EAX,DWORD PTR SS:[EBP-18] ; 转化为字符
0061CFBF |. 8D55 FC LEA EDX,DWORD PTR SS:[EBP-4]
0061CFC2 |. E8 39C3DEFF CALL EEV.00409300 ; MD5转化后的字符小写转化为大写,跟进
0061CFC7 |. 8BC6 MOV EAX,ESI
0061CFC9 |. E8 DE78DEFF CALL EEV.004048AC
0061CFCE |. 33DB XOR EBX,EBX
0061CFD0 |> 85DB /TEST EBX,EBX
0061CFD2 |. 75 15 |JNZ SHORT EEV.0061CFE9
0061CFD4 |. 56 |PUSH ESI
0061CFD5 |. 8BD3 |MOV EDX,EBX
0061CFD7 |. C1E2 02 |SHL EDX,2
0061CFDA |. B9 04000000 |MOV ECX,4 ; 从首位开始,取4个
0061CFDF |. 8B45 FC |MOV EAX,DWORD PTR SS:[EBP-4] ; 转化为大写的MD5字符
0061CFE2 |. E8 F57DDEFF |CALL EEV.00404DDC
0061CFE7 |. EB 2C |JMP SHORT EEV.0061D015
0061CFE9 |> FF36 |PUSH DWORD PTR DS:[ESI] ; 转化为大写后的前4个字符
0061CFEB |. 68 68D06100 |PUSH EEV.0061D068
0061CFF0 |. 8D45 D8 |LEA EAX,DWORD PTR SS:[EBP-28]
0061CFF3 |. 50 |PUSH EAX
0061CFF4 |. 8BD3 |MOV EDX,EBX ; EDX=1
0061CFF6 |. C1E2 02 |SHL EDX,2 ; 左移2位得到4
0061CFF9 |. B9 04000000 |MOV ECX,4 ; 再取四个,从第四位开始
0061CFFE |. 8B45 FC |MOV EAX,DWORD PTR SS:[EBP-4] ; 转化为大写的MD5字符
0061D001 |. E8 D67DDEFF |CALL EEV.00404DDC
0061D006 |. FF75 D8 |PUSH DWORD PTR SS:[EBP-28] ; 取的5-8位MD5字符
0061D009 |. 8BC6 |MOV EAX,ESI
0061D00B |. BA 03000000 |MOV EDX,3
0061D010 |. E8 277CDEFF |CALL EEV.00404C3C
0061D015 |> 43 |INC EBX ; 用"-"连接字符
0061D016 |. 83FB 02 |CMP EBX,2
0061D019 |.^75 B5 /JNZ SHORT EEV.0061CFD0
0061D01B |. 33C0 XOR EAX,EAX
0061D01D |. 5A POP EDX
0061D01E |. 59 POP ECX
0061D01F |. 59 POP ECX
0061D020 |. 64:8910 MOV DWORD PTR FS:[EAX],EDX
0061D023 |. 68 4DD06100 PUSH EEV.0061D04D
0061D028 |> 8D45 D8 LEA EAX,DWORD PTR SS:[EBP-28]
0061D02B |. BA 02000000 MOV EDX,2
0061D030 |. E8 9B78DEFF CALL EEV.004048D0
0061D035 |. 8D45 E8 LEA EAX,DWORD PTR SS:[EBP-18]
0061D038 |. E8 6F78DEFF CALL EEV.004048AC
0061D03D |. 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
0061D040 |. E8 6778DEFF CALL EEV.004048AC
字母转化:
======================进CALL EEV.00409300===================================
00409329 |> 8B0424 /MOV EAX,DWORD PTR SS:[ESP] ;eax指向md5值
0040932C |. 8A00 |MOV AL,BYTE PTR DS:[EAX] ; 依次取MD5值的一个字节
0040932E |. 3C 61 |CMP AL,61 ; 大于97?
00409330 |. 72 06 |JB SHORT EEV.00409338 ; 不小于就是小写字母了
00409332 |. 3C 7A |CMP AL,7A ; 是否大于122?
00409334 |. 77 02 |JA SHORT EEV.00409338 ; 大于就不是字母了
00409336 |. 2C 20 |SUB AL,20 ; AL=AL-0X20,小写转化为大写
00409338 |> 8B5424 04 |MOV EDX,DWORD PTR SS:[ESP+4]
0040933C |. 8802 |MOV BYTE PTR DS:[EDX],AL ; 保存
0040933E |. FF0424 |INC DWORD PTR SS:[ESP] ; 指针下移
00409341 |. FF4424 04 |INC DWORD PTR SS:[ESP+4]
00409345 |. 4B |DEC EBX ; 计数器减1
00409346 |. 85DB |TEST EBX,EBX ; 位测试
00409348 |.^75 DF /JNZ SHORT EEV.00409329 ; 循环转化
这段的C语言表示:
int a,b;
for(a=0;a<strlen(md5_ID);a++)
{
b=md5_ID([a];
if(b>97 && b<122)
b=b-32;
md5_ID[a]=b
}

到这里软件的注册算法已经很清楚了,什么不清楚再看一次,
算法总结:
1;取得软件的机器码,用标准MD5加密一下得到一个值即为MD5_SN,把MD5值转化为字符型,然后把小写转化为大写,结果为SN
2;取SN(1-4),SN(5-8),就是取SN的前4位和SN的(5-8)位,用”-”连接,得到KEY,即注册码
算法就这样,算法很失败吧,MD5强大的作用好像没发挥哦,^_^我的注册信息:
机器码: ACA9B-B9EEC-324A3-02A00
注册码: D6D1-11C0
这个软件的加密方式是这样的
If(md5(机器码)=注册码)
注册成功
Else
注册失败
这是使用MD5最失败的方式;
注册成功的截面如图4所示:
图(4)

注册机也很简单,代码我就不弄上来,就一个MD5模块,不然有骗稿费之嫌
我做的注册机界面如图(5):
图(5)

声明:笔者水平有限,如有错误请指出,请有能力的朋友支持国产软件,本篇文章只交流技术,如果利用本文的相关技术去做违法的事本人概不负责.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: