所以我正在拆解一些代码(二进制炸弹实验室)并需要一些帮助来弄清楚发生了什么。
以下是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中的令牌填满?
注意:这是家庭作业,但它表示不添加家庭作业标签,因为它已经过时或者其他东西。作业是通过命令行找出要进入每个阶段的秘密短语。
注意2:我真的不知道如何使用IDA,我的朋友刚刚告诉我在IDA中打开炸弹文件。也许有一种简单的方法让我在IDA中进行实验和弄清楚,但我不知道如何。
答案 0 :(得分:1)
局部变量存储在帧指针的正下方。参数位于帧指针之上。 x86使用BP / EBP / RBP作为帧指针。
天真的反汇编只会将lea eax, [ebp+var_10]
反汇编为lea eax, [ebp-10h]
。该指令引用一个局部变量,其地址低于帧指针所指向的10h(16字节)。 LEA表示加载有效地址:它在[ebp - 10h]
的{{1}}加载变量的地址,因此eax
现在包含指向该变量的指针。
IDA显然正在尝试为局部变量提供有意义的名称,但由于显然没有可用的调试信息,因此最终使用虚拟名称。无论如何:
eax
只是IDA告诉它已为var_10= dword ptr -10h
创建别名var_10
的方式。