五个crackme中的第五个分析
【破文标题】五个crackme中的第五个分析【破文作者】surge
【作者邮箱】[email protected]
【作者主页】http://surge.blog.com.cn
这是我发的五个crackme中的第五个,提供的答案是老外用delphi写的控制台程序源代码,不过他没有给出第五个的答案。这里简单分析一下。
程序加壳了,od载入就出现异常,shift+F9通过异常后,单步几下,用esp定律很容易脱去。
这个crackme的关键其实是keyfile,下面的代码载入了map文件,map文件可以用ida生成,因为是borland c++程序,用dede也应该可以生成map,不过我用了ida。
为了看起来更整齐一点我将机器码删了。
004012B0 push ebp ;DialogFunc
004012B1 mov ebp, esp
004012B3 push ebx
004012B4 mov ebx, 0040D878
004012B9 mov eax,
004012BC sub eax, 10 ;Switch (cases 10..111)
004012BF je 00401394
004012C5 sub eax, 8
004012C8 je short 004012DA
004012CA sub eax, 0F9
004012CF je 004013A5
004012D5 jmp 004013CF
004012DA push 0040B26F ; /step 5 of 5by:
004012DF push dword ptr ; |hWnd
004012E2 call <SetWindowTextA> ; \SetWindowTextA
004012E7 push 0040B296 ; /r
004012EC push 0040B289 ; |step5key.key
004012F1 call <_fopen> ; \5.004040C0
上面可以知道是在读step5key.key文件,所以创建这个文件,随便输入点内容。
再次载入脱壳的程序。
004012F6 add esp, 8
004012F9 mov , eax
004012FE cmp dword ptr , 0
00401305 je 004013D3
0040130B xor edx, edx
0040130D mov , edx
0040130F jmp short 00401331
00401311 /push dword ptr ; /Arg1 = 00000000
00401317 |call 00404C5C ; \5.00404C5C
0040131C |pop ecx
0040131D |mov , al ;al=文件中的一个字节内容
00401322 |mov ecx,
00401324 |mov al,
00401329 |mov , al ;文件中的内容放到40b14c开始的内存处
0040132F |inc dword ptr ;计数加1
00401331 cmp dword ptr , 0F ;读0x0F个字节
00401334 \jb short 00401311
00401336 push dword ptr ; /Arg1 = 00000000
0040133C call <_fclose> ; \5.00403D54
00401341 pop ecx
00401342 xor edx, edx
00401344 mov , edx ;计数清0
00401346 jmp short 00401357
00401348 /mov cl,
0040134A |add cl, 77 ;循环次数加上0x77
0040134D |mov eax,
0040134F |xor , cl ;(读入文件内容的每一个字节) 异或 (循环次数加0x77)
00401355 |inc dword ptr
00401357 cmp dword ptr , 0F ;计数加1
0040135A \jb short 00401348
0040135C push 0040B15C ;step 5 was fun!
00401361 push 0040B14C ;计算结果与开始的内容比较,相等ok
00401366 call <_strcmp>
构造正确的step5key.key内容,先不着急计算,因为算法只是简单的异或一次,根据异或原理,a==a xor a xor a,所以把40b15c的内容输入到step5key.key中,并在401361下断点,让程序自己来帮我们算正确的key,重新运行,断下来后看40b14c的内容是什么240C1C0A5B495D091EF3A1E4F6EAA400,找个十六进制编辑器,把这些写入step5key.key。
再次运行程序显示:
Step5 has been solved
Step5 unlock code is: 1A2E3D
这应该是crackme的作者想看到的答案吧。
【版权声明】本文纯属技术交流,转载请注明作者信息并保持文章的完整,谢谢! 支持一下,呵呵 写的不错,支持!!! 支持一下,呵呵/:001 /:001
页:
[1]