逆向工程核心原理——第八章

第八章,书本带领我们在此破解一个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跳转到函数。

原文地址:https://www.cnblogs.com/lex-shoukaku/p/13284206.html