海天一色001 发表于 2017-5-8 10:02

初练160个CrakeMe程序之005

本帖最后由 海天一色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,下面几个跳就不再执行了,试一下:
004473F1   /0F84 88000000   je CKme002_.0044747F                     ; 第一个跳过了成功,改为jmp CKme002_.00447429
004473F7   |81BB 08030000 0>cmp dword ptr ds:,0x230D
00447401   |74 7C         je short CKme002_.0044747F               ; 第二个跳过了成功
00447403   |81BB 10030000 9>cmp dword ptr ds:,0xF94
0044740D   |75 70         jnz short CKme002_.0044747F            ; 第三个跳过了成功
0044740F   |8B83 18030000   mov eax,dword ptr ds:
00447415   |3B83 14030000   cmp eax,dword ptr ds:
0044741B   |75 62         jnz short CKme002_.0044747F            ; 第四个跳过了成功
0044741D   |81BB 1C030000 E>cmp dword ptr ds:,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练习附件:,包括ajj大神的原程序,我脱壳后的程序及爆破后的程序。
百度链接是: http://pan.baidu.com/s/1skMkJY9 密码: 86pm,个人学习过的crackme程序都在里面。

兰陵笑笑生 发表于 2017-5-8 10:16

顶顶顶,支持楼主这样子的!

伸个大懒腰 发表于 2017-5-8 10:47

学习了。。。。。。。

RunningMan 发表于 2017-5-8 10:55

楼主厉害,学习了。谢谢

夏雨微凉 发表于 2017-5-8 12:59

学习了!      

车只黑大炮啊 发表于 2017-5-8 14:49

好强,期待后面的crake

周天易 发表于 2017-5-8 17:30

谢谢分享

biscuitlx 发表于 2017-5-9 00:47

支持楼主{:1_921:}

阿1 发表于 2017-6-2 16:25

为什么我脱壳了不可以运行呢

阿1 发表于 2017-6-2 16:25

楼主你QQ多少
页: [1]
查看完整版本: 初练160个CrakeMe程序之005