记得是在某个国外论坛下载的一个 crackme,当时技术菜,简单调试了下没分析出来,
后来有空闲时间久再拿出来分析了下,现在就拿出来跟大家分享下。记录下来过程给新手作
为参考。先说下本文用到的工具,Peid、od、vc6.0。
逆向工程是个需要很刻苦很有兴趣才能做得工作,需要规范的操作,扎实的基础知识、
丰富的实战经验。逆向一个软件其基本流程大致如下:查壳、运行、调试、分析算法、写出
注册码、写出注册机。
拿到一个软件首先查下有没有加壳,有壳的脱壳有 anti 的去 anti,用 peid 载入该
crackme 发现无壳,是用 Borland Delphi 3.0 写的。那么我们接下来的工作就是开始对这
个软件进行入手分析了。
首先试着运行下软件,在UserName输入 aaaa,Serial输入bbb,如图1
由此我们可以得出可以通过搜索字符串Wrong Serial Number!的方法来进入我们分析的领
空或者断点函数 MessageBox(MessageBoxA)。我们直接载入 Od 后右键 Ultra String
ReferenceFind Ascii,之后进行查找Wrong Serial Number!
果不其然正是我们出错弹出的字符串,双击进入如下区域:
00427BA5 |> \6A 00 push 0
00427BA7 |. 68 087C4200 push 00427C08
error
00427BAC |. 68 107C4200 push 00427C10
wrong serial number !
00427BB1 |. A1 44974200 mov eax, dword ptr [429744]
00427BB6 |. E8 411EFFFF call 004199FC
00427BBB |. 50 push eax
|hOwner
00427BBC |. E8 4FD9FDFF call <jmp.&user32.MessageBoxA>
\MessageBoxA
果然不出所料是来到 MessageBoxA 处,正好是我们需要找的相关区域。在 0x00427BA5
处下断,F9运行,空 UserName 空Serial,点击 OK 程序中断在此处,证明此处跟我们
预想的是一致的。
至此我们找到了最关键的区域了接下来我们就来分析下程序,在每个关键代码后
都加了注释,通过注释来理解汇编的意思,如下:
//判断函数
00427B44 /. 55 push ebp
00427B45 |. 8BEC mov ebp, esp
00427B47 |. 6A 00 push 0
00427B49 |. 6A 00 push 0
00427B4B |. 53 push ebx
00427B4C |. 8BD8 mov ebx, eax
00427B4E |. 33C0 xor eax, eax
00427B50 |. 55 push ebp
00427B56 |. 64:FF30 push dword ptr fs:[eax]
00427B59 |. 64:8920 mov dword ptr fs:[eax], esp
00427B5C |. 8D55 FC lea edx, dword ptr [ebp-4]
00427B5F |. 8B83 DC010000 mov eax, dword ptr [ebx+1DC]
00427B65 |. E8 26E2FEFF call 00415D90
00427B6A |. 8B45 FC mov eax, dword ptr [ebp-4]
00427B6D |. E8 3EBCFDFF call 004037B0 ; |