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
你好,大佬,一直跟着你的帖子学习,请问的追码有什么方法么,目前爆破还可以,但是追码对于我来说还是很难 ...
你好!首先说明我虽不是小白,但更不是大佬!追码确实比爆破要难得多,爆破是比较简单粗暴的办法,追码却要弄明白作者的思路,被别人带着走,同时要掌握相应的编程语言,等等。我追码应该也没什么好的方法,也是从爆破点开始向上查看代码,一点一点地对照检查来的。最主要的还是要有足够的耐心,我现在练习这160个CM,应该说是破解初步吧,刚开始时一两个星期甚至一个月才破出一个来! 看了一下,还是很简单的
页:
[1]