所以我正在反汇编一些代码(二进制炸弹实验室)并需要一些帮助来弄清楚发生了什么。
这是 IDA 屏幕截图:
![enter image description here](https://i.stack.imgur.com/JEzTC.png)
(下面有一些跳转表的内容和另一个比较,但我对这些内容感觉更舒服(我认为))
现在,我想我知道这个阶段发生了什么,正如我所读到的:
http://teamterradactyl.blogspot.com/2007/10/binary-bomb.html(向下滚动至第 3 阶段)
然而,我已经习惯了不同形式的装配。
我最不明白的是顶部的所有 var_28 = dword ptr -28h 内容。
当 sscanf 被调用时,它如何知道将每个标记放在哪里?并且只会有三个标记(这就是上面的链接所说的,尽管我看到了%d,%d......所以可能是两个,但我认为是三个)。基本上,谁能告诉我在调用 sscanf 后这些 var_x (和 arg_0)将指向什么?
它们只是相对于堆栈指针的寻址,对吧......?但是这些地址是如何填充来自 sscanf 的令牌的呢?
注意:这是作业,但它说不要添加作业标签,因为它已过时或其他原因。作业是找出通过命令行输入的秘密短语以通过每个阶段。
注2:我真的不知道如何使用IDA,我的朋友只是告诉我在IDA中打开炸弹文件。也许有一种简单的方法可以让我在 IDA 中进行实验并找出答案,但我不知道如何做。
局部变量存储在帧指针的正下方。参数位于帧指针上方。 x86使用BP/EBP/RBP作为帧指针。
天真的反汇编只会反汇编lea eax, [ebp+var_10]
as lea eax, [ebp-10h]
。该指令引用一个局部变量,其地址位于帧指针指向下方的 10h(16 字节)处。 LEA 表示加载有效地址:它正在加载变量的地址[ebp - 10h]
in eax
, so eax
现在包含指向该变量的指针。
IDA 显然试图为局部变量赋予有意义的名称,但由于显然没有可用的调试信息,它最终使用了虚拟名称。反正:
var_10= dword ptr -10h
只是 IDA 告知它已创建别名的方式var_10
for -10
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)