系统 : Windows xp
程序 : keyme2
程序下载地址 :http://pan.baidu.com/s/1pKqlHiF
要求 : 找出序列号
使用工具 : IDA Pro & OD
可在“PEDIY CrackMe 2007”中查找关于此程序的破文,标题为“一个很简单的crackme”。
运行程序,发现这是一个没有图形用户界面的小程序,验证方式为输入序列号。使用IDA载入程序,在字符串表找出“ Try again! ”的位置,并定位判断算法关键位置。本程序中,用OD在00401622处下断点:
0040161B |. C70424 003040>mov dword ptr [esp], 00403000 ; |||ASCII "moofy's keyme #2",LF,"Very simple :)",LF,LF,"Enter: "
00401622 |. E8 A9050000 call <jmp.&msvcrt.printf> ; ||printf
00401627 |. 8D45 FC lea eax, dword ptr [ebp-4] ; ||
0040162A |. 894424 04 mov dword ptr [esp+4], eax ; ||
0040162E |. C70424 293040>mov dword ptr [esp], 00403029 ; ||ASCII "%d"
00401635 |. E8 86050000 call <jmp.&msvcrt.scanf> ; |scanf
0040163A |. 8B45 FC mov eax, dword ptr [ebp-4] ; |
0040163D |. 3B05 24414000 cmp eax, dword ptr [404124] ; |
00401643 |. 75 0E jnz short 00401653 ; |
00401645 |. C70424 2C3040>mov dword ptr [esp], 0040302C ; |ASCII LF,"Correct :) Write a keygen and tutorial and submit it to crackmes.de",LF
0040164C |. E8 7F050000 call <jmp.&msvcrt.printf> ; printf
00401651 |. EB 0C jmp short 0040165F
00401653 |> C70424 723040>mov dword ptr [esp], 00403072 ; |ASCII 0A,"Try again!"
0040165A |. E8 71050000 call <jmp.&msvcrt.printf> ; printf
0040165F |> C70424 7F3040>mov dword ptr [esp], 0040307F ; |ASCII "PAUSE"
00401666 |. E8 45050000 call <jmp.&msvcrt.system> ; system
0040166B |. B8 00000000 mov eax, 0
00401670 |. C9 leave
00401671 . C3 retn
单步跟踪过一遍流程可知,程序将位于[404124]处的固定值作为程序的序列号,需要用户输入一个十进制的字串并与其对比。完全匹配即可。此处跟入内存发现其值为:10427410,转化为十进制则是:272790544。
效果如下: