第八章,书本带领我们在此破解一个crackme。
在破解的时候,书本引出了一些新的概念,我们先对crackme进行破解,而书上补充的知识点,我们统一放在最后。
我们先来破解这个crackme。
首先是查看这个软件的流程:
进入首页输入name和serial:
不输入name点击check:
点击about:
输入name和serial后点击check:
quit就直接退出。
然后我们就可以根据所得到的信息检索字符串:
然后我们向上翻动,就可以看到输入成功的字符串:
所以我们就要往上查看关键跳和关键call:
于是我们在地址00403332的地方找到了关键跳,在00403329处找到了关键call。
我们看到比较函数前面将edx和eax压入栈,而edx和eax则是存放的ebp-0x44和ebp-0x34的地址。
所以我们猜测,这里传递的就是假码和真码,所以我们在栈区看一看:
ebp-0x44和ebp-0x34的地址分别是0018F41C和0018F42
我们在栈区看到这一块区域:
就发现了真码。
在这里我们找到了真码,所以说真码生成的代码应该就在上面。
然后我们接着向上找:
在004031F0处找到了一个取字符函数和一个转化ascii码的函数:
然后再将ascii码和0x64相加:
最后再转化为unicoed的函数:
*备注上将unicoed写错了
最后再通过循环,把所有的name加密。
所以serial的公式为:
(ASCII码+0x64)转化为unicode
现在crackme解决了,我们来看看书上提到的一个写知识点:
1.不同的编写语言和编译器都有各自特有的函数,比如VB的msgBox();C语言的messageBoxA()。
2.简介调用,是指不直接用call指令调用函数,而是使用jmp跳转到函数。