海天一色001 发表于 2019-6-23 19:11

160个Crackme之028学习笔记

本帖最后由 海天一色001 于 2019-6-23 19:14 编辑

第28个CM程序,输入name/serial=“52pojie/1234567890”,程序自动将小写字母转换成大写形式,点击“CHECK”按钮,弹出错误提示框:

第一步、查壳:

和上一个一样,无壳,VC++6.0编程:
第二步、爆破用OD载入CoSH.2.exe,智能搜索字符串:

在0040153D这一行双击进入CPU窗口:

在错误提示上面的00401536处是由7个地方跳转来的,走向错误,直接将这一行改成jmp 0040154D让它跳到正确提示,保存成可执行文件CoSH.2.jmp.exe,运行一下,不输入任何东西,点击“CHECK”按钮,弹出正确提示,爆破成功。

第三步、追码:将00401536处的跳转指令撤消修改,观察代码,本以为是很复杂的算法,没想到出乎意料的简单,name最少5位字符,小写字母自动转化成大写字母,serial是固定的值6287-A!所以就没有注册机了。


具体分析过程如下:
004014CE   .8DBE A0000000 lea edi,dword ptr ds:
004014D4   .8BCF          mov ecx,edi
004014D6   .E8 6F030000   call <jmp.&MFC42.#CWnd::GetWindowTextLengthA_3876>         ;得到name长度
004014DB   .8B1D FC214000 mov ebx,dword ptr ds:[<&USER32.PostQuitMessage>]
004014E1   .83F8 05       cmp eax,0x5                                                ;name不少于5位
004014E4   .7E 50         jle short CoSH_2.00401536
004014E6   .8D6E 60       lea ebp,dword ptr ds:
004014E9   .8BCD          mov ecx,ebp
004014EB   .E8 5A030000   call <jmp.&MFC42.#CWnd::GetWindowTextLengthA_3876>         ;得到假码长度
004014F0   .83F8 05       cmp eax,0x5                                                ;序列号不少于5位
004014F3   .7E 41         jle short CoSH_2.00401536
004014F5   .8D86 E0000000 lea eax,dword ptr ds:
004014FB   .8BCF          mov ecx,edi
004014FD   .50            push eax
004014FE   .E8 41030000   call <jmp.&MFC42.#CWnd::GetWindowTextA_3874>               ;eax=len(name);=name.text
00401503   .8DBE E4000000 lea edi,dword ptr ds:
00401509   .8BCD          mov ecx,ebp
0040150B   .57            push edi
0040150C   .E8 33030000   call <jmp.&MFC42.#CWnd::GetWindowTextA_3874>               ;=len(Serial);=serial.text
00401511   .8B07          mov eax,dword ptr ds:
00401513   .8038 36       cmp byte ptr ds:,0x36                                 ;cmp(asc(serial(1),0x36):第一位与6比较,说明第一位是6
00401516   .75 1E         jnz short CoSH_2.00401536
00401518   .8078 01 32    cmp byte ptr ds:,0x32                           ;第二位与2比较,说明第二位是2
0040151C   .75 18         jnz short CoSH_2.00401536
0040151E   .8078 02 38    cmp byte ptr ds:,0x38                           ;第三位是8
00401522   .75 12         jnz short CoSH_2.00401536
00401524   .8078 03 37    cmp byte ptr ds:,0x37                           ;第四位是7
00401528   .75 0C         jnz short CoSH_2.00401536
0040152A   .8078 04 2D    cmp byte ptr ds:,0x2D                           ;第五位是“-”
0040152E   .75 06         jnz short CoSH_2.00401536
00401530   .8078 05 41    cmp byte ptr ds:,0x41                           ;第六位是A
00401534   .74 17         je short CoSH_2.0040154D                                 ;注册码应该是固定的:6287-A关键跳
00401536      6A 00         push 0x0
00401538   .68 64304000   push CoSH_2.00403064                                       ;ERROR
0040153D   .68 38304000   push CoSH_2.00403038                                       ;One of the Details you entered was wrong
00401542   .8BCE          mov ecx,esi
00401544   .E8 F5020000   call <jmp.&MFC42.#CWnd::MessageBoxA_4224>
00401549   .6A 00         push 0x0
0040154B   .FFD3          call ebx                                                   ;user32.PostQuitMessage
0040154D   >8D8E E0000000 lea ecx,dword ptr ds:
00401553   .8D5424 14   lea edx,dword ptr ss:
00401557   .51            push ecx
00401558   .68 2C304000   push CoSH_2.0040302C                                       ;Well done,
附件,含CM原程序、爆破后的程序、OD的调试文件等。百度链接是:http://pan.baidu.com/s/1skMkJY9,密码: 86pm,160个CM、我已练习过的前28个crackme程序(不含012)都在里面。   

zimengmeng131 发表于 2019-6-25 11:30

你好,大佬,一直跟着你的帖子学习,请问的追码有什么方法么,目前爆破还可以,但是追码对于我来说还是很难,不知如何下手,请问大佬有什么思路么。

海天一色001 发表于 2019-6-25 15:46

zimengmeng131 发表于 2019-6-25 11:30
你好,大佬,一直跟着你的帖子学习,请问的追码有什么方法么,目前爆破还可以,但是追码对于我来说还是很难 ...

你好!首先说明我虽不是小白,但更不是大佬!追码确实比爆破要难得多,爆破是比较简单粗暴的办法,追码却要弄明白作者的思路,被别人带着走,同时要掌握相应的编程语言,等等。我追码应该也没什么好的方法,也是从爆破点开始向上查看代码,一点一点地对照检查来的。最主要的还是要有足够的耐心,我现在练习这160个CM,应该说是破解初步吧,刚开始时一两个星期甚至一个月才破出一个来!

52lxw 发表于 2019-7-2 11:05

看了一下,还是很简单的
页: [1]
查看完整版本: 160个Crackme之028学习笔记