coolszy 发表于 2010-2-22 20:19

一个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

mantoou 发表于 2010-2-22 21:11

象这类直接下万能断点就搞定了

coolszy 发表于 2010-2-22 21:19

回复 2# mantoou
不知什么是万能断点,还请指点

明次 发表于 2010-2-22 22:01

本帖最后由 明次 于 2010-2-22 22:04 编辑

mingci
1389634180mingci

呵呵,我也简单的追了一下

明次 发表于 2010-2-22 22:02

回复mantoou
不知什么是万能断点,还请指点
coolszy 发表于 2010-2-22 21:19 http://www.52pojie.cn/images/common/back.gif


    论坛有万能断点的文章,搜一下就有了,推荐看HPKER写的那篇!

mantoou 发表于 2010-2-22 22:21

(1)用OD打开所要调试的软件,右键单击汇编区域在“查看”菜单里选择“模块USER32”。

(2)利用Ctrl+B快捷键,查找F3 A5 8B C8 83 E1 03 F3 A4 E8,点击确定。

(3)由上步操作可以定位到万能断点。

coolszy 发表于 2010-2-23 09:05

(1)用OD打开所要调试的软件,右键单击汇编区域在“查看”菜单里选择“模块USER32”。

(2)利用Ctrl+B ...
mantoou 发表于 2010-2-22 22:21 http://www.52pojie.cn/images/common/back.gif
嗯,试一下

richard257 发表于 2010-9-20 19:17

我是新手还只会脱壳,我试试你们的这个办法先

richard257 发表于 2010-9-20 20:02

我也追了下,两种办法都试验成功,
用户名lin
注册码794121640lin
方法一:DEDE找Edt2Change事件,如果事件很多,名字很复杂就不好找了,
      因为你这个程序简单,所以一下子就找到了
方法二:万能断点法虽然听起来很不错,但是却是体力活,找码要找半天,没耐心的话没找几      下就会放弃的,
各有优缺点。

4275579@qq.com 发表于 2012-2-13 00:42

高手啊,受教了
页: [1]
查看完整版本: 一个Delphi写的CrackMe分析