本帖最后由 海天一色001 于 2017-5-8 10:38 编辑
第五个程序,先运行看看情况:注册名是个什么鬼?不管,输入“52pojie.cn”,点击“注册”,没反应。
查壳,有UPX的壳:
这就是第一层的设防了!没说的,脱之!先用工具脱,很简单的UPX壳,很轻松就脱掉了。
打开,能正常运行,载入OD,熟悉的OEP特征出来了。
再试着自己手脱一下练练:载入OD中,用ESP定律,首先F8单步一下,此时寄存器窗口中ESP变红了!
此时右键点击,选择数据窗口跟随,再在数据窗口中右键下硬件访问Word断点,F9运行,程序断下来至此处:
观察00477B8F和0044768C,这两个地址距离相当远,跳过去应该就是OEP了:
然后用OD插件脱壳,保存为CKme002_1.exe,运行一下,可以正常使用;再查壳,已经没有壳了。显示是Delphi的程序。将ckme002_1.exe导入OD中,习惯性地先查字符串,又找到了一堆相关的提示,
很熟悉的提示啊!有4个未成功提示,两个成功提示,先爆破,自然是看看成功提示了!双击“注册了”的地址,进入CPU窗口,
向上查找跳转指令,竟然有5个跳过了成功的指令! 3个je,2个jnz,都跳到了0044747F 处:
层层设防可能就是这5个跳吧!加上壳,6层设防了!真令人头疼啊!每个跳前都有一个比较指令,问题是堆栈段的地址是个什么鬼?!又在什么地方给它赋的值?!在第五个跳转下面的指令又是干什么的?只能说是正确注册的相关参数计算吧。先爆破试试:将这五个跳逐一nop掉:先试第一个,在004473F1地址处下断,并将指令用nop填充,如下图所示:
F9运行,点击图片框,仍是失败!
再点击确定,还未有其他动作,程序又断在了这里!!继续F9,什么动作都没有,稍等一小会儿,程序又断在了004473F1处!猜测程序中可能有定时器,循环调用本地址,所以总断在这里。因为只nop掉这一句,下面还有4句跳过了成功,所以还是失败,那么将下面4句跳也改成nop试一试:
这次再F9运行,下面的注册按钮变成了“注册了”的字样,爆破成功了。
返回OD,保存成CKme002_NOP.exe,打开CKme002_NOP.exe,随意输入注册名,怎么还是“注册尚未成功”的提示?哪里又错了?点击确定,下面的“注册”变成了“注册了”!哦,忘了刚才猜想的可能有时间控件在起作用,需要等会才能看到结果。关闭程序,重新打开,这次不输入注册名,等了一小会儿,果然变成了“注册了”。在OD中对上面nop掉的代码段仔细观察,发现这些指令不执行后,都到了00447429处开始执行,那么我可以在第一个跳处直接让它无条件跳至00447429,下面几个跳就不再执行了,试一下:
[Asm] 纯文本查看 复制代码 004473F1 /0F84 88000000 je CKme002_.0044747F ; 第一个跳过了成功,改为jmp CKme002_.00447429
004473F7 |81BB 08030000 0>cmp dword ptr ds:[ebx+0x308],0x230D
00447401 |74 7C je short CKme002_.0044747F ; 第二个跳过了成功
00447403 |81BB 10030000 9>cmp dword ptr ds:[ebx+0x310],0xF94
0044740D |75 70 jnz short CKme002_.0044747F ; 第三个跳过了成功
0044740F |8B83 18030000 mov eax,dword ptr ds:[ebx+0x318]
00447415 |3B83 14030000 cmp eax,dword ptr ds:[ebx+0x314]
0044741B |75 62 jnz short CKme002_.0044747F ; 第四个跳过了成功
0044741D |81BB 1C030000 E>cmp dword ptr ds:[ebx+0x31C],0x3E7
00447427 |74 56 je short CKme002_.0044747F ; 第五个跳过了成功
00447429 33D2 xor edx,edx
OD自动变成了jmp short CKme002_00447429,F9运行,仍是不断在004473F1处不断的暂停,F9运行,显示“注册了”,说明jmp爆破也成功了。保存成新文件! 接下来是找一找注册算法了。在数据窗口中看到一大堆这样的数据:Image3MouseDown、Image4MouseDown、Timer2Timer等事件(控件)名称,回想上一个ajj的crackme,对这一个明显有些害怕,太麻烦了!
在OD中还是找不到该如何下手,还是利用专门的工具吧:DarkDe4
FormCreate是窗体创建事件,Timer1Timer是第一个时钟事件,共有12个事件!太多了!上一个程序好歹还有个chkcode,猜测是检查注册码的,这个倒好,完全是编程语言默认的事件名称,想有个参考都没有啊!没办法,挨着查看吧!分别双击这12个过程(事件)的名称,出现如下界面,记下每个过程(事件)的始终地址,在OD中找到相应位置,做好注释,在每个起始位置下上断点(防止自己找不到位置)!
从上图和OD中看出,那个注册按钮基本上没起什么用,只有一个赋值就进入了系统领空,不需要费劲去看;
接着看Timer2Timer事件,整个是5个跳过注册成功的代码呀!怪不得在爆破时还没动作呢就断下来了,原来是时间控件在起作用!
Image1MouseDown—Image4MouseDown过程(事件),代码均一致,作用应该是点击图片框中4个不同的图片时判断未注册成功时就弹出注册失败的消息框;
FormMouseMove过程(事件)里,一大堆的各种条件的跳和call把我绕晕了!看不懂了!
Edit2DblClick又是干什么用的?从哪里来的Edit2???其他几个过程(事件)里面也是看不懂!!!
水平太差了!这才第5个,已经弄不明白了,下面的可能就更难了。
没办法,从论坛里搜一下,有好多关于这个CM的帖子,基本上都是爆破完事,跟我水平差不多啊(自我陶醉一下,鼓舞自己吧)!
认真地看了Pnmke大神之作《160个CrackMe练手之005》,链接是:http://www.52pojie.cn/thread-366291-1-1.html,太牛了!里面有具体的注册流程分析,虽然我很多都看不明白,照着去做也时不时出错,找不到文中的地址(毕竟是新手),先收藏下来,待以后将编程语言及其他各种工具熟悉之后再来继续学习。
自己的005练习附件:
005.rar
(576.2 KB, 下载次数: 16)
,包括ajj大神的原程序,我脱壳后的程序及爆破后的程序。
百度链接是: http://pan.baidu.com/s/1skMkJY9 密码: 86pm,个人学习过的crackme程序都在里面。 |