2

所以我正在反汇编一些代码(二进制炸弹实验室),需要一些帮助来弄清楚发生了什么。

这是 IDA 屏幕截图:

在此处输入图像描述

(下面有一些跳表的东西和另一个比较,但我对这些东西感觉更舒服(我想))

现在,我想我知道这个阶段发生了什么,正如我所读到的:

http://teamterradactyl.blogspot.com/2007/10/binary-bomb.html(向下滚动到第 3 阶段)

但是,我习惯了不同形式的程序集。

我不明白的最大的事情是顶部的所有这些 var_28 = dword ptr -28h 东西。

当 sscanf 被调用时,它如何知道将每个令牌放在哪里?并且只会有三个标记(这就是上面的链接所说的,虽然我看到一个 %d、%d ......所以也许两个,但我认为是三个)。基本上,谁能告诉我在调用 sscanf 后这些 var_x(和 arg_0)将指向什么?

它们只是对堆栈指针的相对寻址,对吧......?但是这些地址是如何被来自 sscanf 的令牌填充的呢?

注意:这是作业,但它说不要添加作业标签,因为它已经过时了。作业是找出通过命令行输入的密码短语以通过每个阶段。

NOTE2:我真的不知道怎么用IDA,我朋友只是告诉我在IDA中打开炸弹文件。也许有一种简单的方法可以让我在 IDA 中进行实验并找出答案,但我不知道如何。

4

1 回答 1

3

局部变量存储在帧指针的正下方。参数位于帧指针之上。x86 使用 BP/EBP/RBP 作为帧指针。

天真的反汇编只会反汇编lea eax, [ebp+var_10]lea eax, [ebp-10h]. 该指令引用了一个局部变量,其地址在帧指针指向的位置下方 10h(16 个字节)。LEA 表示加载有效地址:它在[ebp - 10h]in加载变量的地址eax,因此eax现在包含指向该变量的指针。

IDA 显然正试图为局部变量赋予有意义的名称,但由于显然没有可用的调试信息,它最终使用虚拟名称。反正:

var_10= dword ptr -10h

这只是 IDA 的一种说法,它已经var_10-10.

于 2012-09-17T21:07:22.267 回答