一个简单crackme的算法分析2013.06.16
本帖最后由 PoJie_小雨 于 2013-6-17 11:07 编辑【文章标题】:一个简单crackme的算法分析
【文章作者】: xiaoyu
【作者邮箱】: hy_xiaoyu@126.com
【下载地址】: http://pan.baidu.com/share/link?shareid=968304825&uk=892352529
【保护方式】: UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo
【使用工具】: PEiD,OllyDbg
【作者声明】: 主要记录自己的学习过程!欢迎交流学习
--------------------------------------------------------------------------------
【详细过程】
1.脱壳
首先查壳:我们用PEID v0.95版
是很老的UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo
我们用ESP 定律即可脱壳
用OD自带的dump即可
OEP如下:
脱壳后不用修复可以运行
查下壳,发现是汇编写的,废话不多说。
我们接着破解
2.破解
将unpacked的程序用OD载入,运行起来
接着下API断点CreatDlg、WM_command、GetDlgItemTextA
找到注册码的地址的地址段
下面我们进行分析:
看到右边的ASCII码和2个CMP
1个CMP EAX,1
1个CMP EAX,32 2进制为50
可以确定用户名长度为1到50
继续单步走............................发现:
00402174 E8 AB050000 call <jmp.&USER32.GetDlgItemTextA> ; 获取Serial
继续单步走、、、、
0040219A E8 C3010000 call unpacked.00402362 ; 序列号位数验证
这里我们进去分析一下
分析 看我的注视
要注意的是:都是16进制的 计算要转换
输入40为序列号。。。。继续走。。。来到:
注意关键CALL 下面那一条对比语句
说明这个CALL 里EAX运算值及为重要,不为1则验证失败
进去关键CALL后,我们继续分析:
接着继续向下来到:图中算法CALL其实就是tea算法
00402435 E8 62010000 call unpacked.0040259C ; TEA 算法
0040243A 6A 08 push 8
0040243C FF35 947B4000 push dword ptr ds:
00402442 FF75 0C push dword ptr ss:
00402445 E8 87000000 call unpacked.004024D1 ; 继续跟进这个CALL压了几个数据
0040244A 68 00400000 push 4000
0040244F 68 E8030000 push 3E8
00402454 FF35 947B4000 push dword ptr ds:
0040245A E8 97030000 call <jmp.&kernel32.VirtualFree>
0040245F 6A 40 push 40
00402461 68 00100000 push 1000
00402466 68 E8030000 push 3E8
0040246B 6A 00 push 0
0040246D E8 7E030000 call <jmp.&kernel32.VirtualAlloc>
00402472 A3 987B4000 mov dword ptr ds:,eax
00402477 68 D87A4000 push unpacked.00407AD8 ; ASCII "11111"
0040247C E8 7B030000 call <jmp.&kernel32.lstrlen>
00402481 FF35 987B4000 push dword ptr ds:
00402487 50 push eax
00402488 68 D87A4000 push unpacked.00407AD8 ; ASCII "11111"
0040248D E8 C2010000 call unpacked.00402654 ; base64算法
00402492 6A 00 push 0
00402494 50 push eax
00402495 FF35 987B4000 push dword ptr ds:
0040249B E8 90000000 call unpacked.00402530 ; 再用crc32算法
004024A0 8B55 0C mov edx,dword ptr ss:
004024A3 2902 sub dword ptr ds:,eax ; 与TEA算法结果 比较
其实就是Serial的tea算法算出来的值“+”00402190计算出来的一个值
与Name的BASE64算法的结果再用CRC32算法算出来的结果相比较
一致则注册成功
反之失败!
最后,再用peid的插件K-analysis检测下如图:
最后累死了 。。。
希望与君共勉。
最后也感谢下H老大...没来报道没删我号- -谢了!
感谢教程,很详细,给大神加分,今天花了百多个冤枉爱币。 膜拜楼主,小菜现在还不会分析算法...... 小雨细无声 发表于 2013-6-16 22:38 static/image/common/back.gif
感谢教程,很详细,给大神加分,今天花了百多个冤枉爱币。
谢谢。。。。。怎么冤枉了。。。 E_eYYF 发表于 2013-6-16 22:38 static/image/common/back.gif
膜拜楼主,小菜现在还不会分析算法......
加油吧先学汇编。 PoJie_小雨 发表于 2013-6-16 22:45 static/image/common/back.gif
谢谢。。。。。怎么冤枉了。。。
莫提起
提起泪流满江河{:1_923:}
小雨细无声 发表于 2013-6-16 23:09 static/image/common/back.gif
莫提起
提起泪流满江河
。。。加油。 Shark恒 发表于 2013-6-16 23:18 static/image/common/back.gif
论坛禁止留下QQ,已帮你修改。特此提醒。期待更多作品!
好的。谢谢。 学习了,谢谢分享
页:
[1]
2