一个Delphi写的CrackMe分析
本帖最后由 coolszy 于 2010-2-22 20:22 编辑【文章标题】: 一个Delphi写的CrackMe分析
【文章作者】: coolszy
【软件名称】: CrackMe
【下载地址】: 附件中
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
1.PEID查壳:Borland Delphi 6.0
2.运行程序输入用户名和密码,但是没有【确定】等按钮,OD载入查找字符串也无果。
3.观察程序,未输入注册码时在用户名下面有如下字符串“Hello...”,但是输入注册码后,字符串消失了,估计如果输入
正确的注册码应该在该处会提示注册码正确等类似的提示。
4.懂得编程的都知道在注册码输入内容后会引发一个Change事件,由此我想到下该断点,但是才疏学浅,不知道是哪个断点,
百度也无果。
5.无法解决,怎么办呢,突然想到是Delphi的,于是用DeDe试试。
6.载入DeDe分析完毕后,点击“过程”,选中“TForm1”后看到事件窗口中存在一个Edt2Change事件,并发现RVA=00452ED0,OK,
7.OD载入,来到00452ED0,下断,F9运行,输入用户名,刚输入注册码OD断下。
00452ED0/.55 push ebp ;下断
00452ED1|.8BEC mov ebp,esp
00452ED3|.33C9 xor ecx,ecx
00452ED5|.51 push ecx
00452ED6|.51 push ecx
00452ED7|.51 push ecx
00452ED8|.51 push ecx
F8单步走,
00452EF1|.8B83 00030000 mov eax,dword ptr ds:
00452EF7|.E8 20EDFDFF call Project1.00431C1C
00452EFC|.8B45 F4 mov eax, ;读取用户名
00452EFF|.E8 CC11FBFF call Project1.004040D0
00452F04|.69C0 B2E42E01 imul eax,eax,12EE4B2
00452F0A|.05 AE0D2F01 add eax,12F0DAE
00452F0F|.8D55 F8 lea edx,
00452F12|.E8 414CFBFF call Project1.00407B58
00452F17|.FF75 F8 push
00452F1A|.8D55 EC lea edx, ;一数字串
00452F1D|.8B83 00030000 mov eax,dword ptr ds:
00452F23|.E8 F4ECFDFF call Project1.00431C1C
00452F28|.8B45 EC mov eax, ;读取用户名
00452F2B|.E8 A011FBFF call Project1.004040D0
在往下走,来到该处
00452F59|.BA 03000000 mov edx,3
00452F5E|.E8 2D12FBFF call Project1.00404190 ;进入
00452F63|.8B45 FC mov eax, ;在该处有一字符串有数字和用户名组成,进入上面的Call分析看看
00452F66|.E8 6511FBFF call Project1.004040D0
00452F6B|.8D55 E4 lea edx,
F7进入到00452F5E处Call,具体内容自己进去分析,出Call后eax=1588138361coolszy,即为注册码。
继续往下走可找到爆破的地方。
00452F7F|.E8 9812FBFF call Project1.0040421C
00452F84|.75 1E jnz short Project1.00452FA4 ;关键跳,Nop掉即可爆破
00452F86|.8D55 E0 lea edx,
00452F89|.8B83 10030000 mov eax,dword ptr ds:
分析完毕,我们再试试我们找到的注册码是否正确。
--------------------------------------------------------------------------------
【经验总结】
第一次接触没有按钮的CrackMe,因此输入用户名和密码后不知怎么办,幸好这个是Delphi写的,因此知道使用DeDe,但是
如果是其他语言,下断点还要多动脑筋了。总之多动手,多总结,多分析方可提高水平。
--------------------------------------------------------------------------------
【版权声明】: 本文原创于coolszy, 转载请注明作者并保持文章的完整, 谢谢!
2010年02月22日 20:31:06 象这类直接下万能断点就搞定了 回复 2# mantoou
不知什么是万能断点,还请指点 本帖最后由 明次 于 2010-2-22 22:04 编辑
mingci
1389634180mingci
呵呵,我也简单的追了一下 回复mantoou
不知什么是万能断点,还请指点
coolszy 发表于 2010-2-22 21:19 http://www.52pojie.cn/images/common/back.gif
论坛有万能断点的文章,搜一下就有了,推荐看HPKER写的那篇! (1)用OD打开所要调试的软件,右键单击汇编区域在“查看”菜单里选择“模块USER32”。
(2)利用Ctrl+B快捷键,查找F3 A5 8B C8 83 E1 03 F3 A4 E8,点击确定。
(3)由上步操作可以定位到万能断点。 (1)用OD打开所要调试的软件,右键单击汇编区域在“查看”菜单里选择“模块USER32”。
(2)利用Ctrl+B ...
mantoou 发表于 2010-2-22 22:21 http://www.52pojie.cn/images/common/back.gif
嗯,试一下 我是新手还只会脱壳,我试试你们的这个办法先 我也追了下,两种办法都试验成功,
用户名lin
注册码794121640lin
方法一:DEDE找Edt2Change事件,如果事件很多,名字很复杂就不好找了,
因为你这个程序简单,所以一下子就找到了
方法二:万能断点法虽然听起来很不错,但是却是体力活,找码要找半天,没耐心的话没找几 下就会放弃的,
各有优缺点。 高手啊,受教了
页:
[1]