Ida:如何在内存

时间:2017-04-30 22:15:25

标签: buffer memory-address ida

我有一个可执行文件似乎正在发生堆栈缓冲区溢出。我很确定我理解了大部分正在发生的事情,但我需要知道的是缓冲区存储在内存中的位置。如果我知道它的绝对地址,或者相对于EBP或任何其他寄存器,我会是金色的。

我知道Ida会跟踪字符串和函数,但是有什么方法可以找到缓冲区或类似的变量吗?至少有一种方法可以获得某种线索吗?

我已经能够为程序提供参数,但我不知道这些参数如何与缓冲区相关。如果我能找到这些变量的位置,那就不难了。

我对Ida相当新,所以我觉得这不应该是那么难以完成,我只是错过了一些关键信息。

谢谢, 森

1 个答案:

答案 0 :(得分:0)

好吧,由于没有人回答我的问题,我不妨提供我发现的最好的答案。

1)了解程序集如何写入内存

在x86处理器中,将一个字节写入内存的汇编指令如下所示:

MOV Ptr Byte [ECX], EAX

在此示例中,寄存器EAX的内容被写入ECX内容指定的存储单元。使用Immunity,在这种指令中设置断点。例如,一旦程序到达此行,请检查ECX的内容并在该位置查找内存转储。这应该是写缓冲区的地方。

2)了解内存的存储方式

在Immunity的内存窗口中,每个内存转储对应于在运行时创建的已分配空间。如果禁用ASLR(您可以使用EMET强制禁用它),则只需运行程序,然后在事后搜索内存。如果启用了ASLR,请尝试找出每次重新运行时写入的内存类型,然后尝试推断正在写入哪个内存转储。扣除后,在内存转储中设置一个断点,设置为在写入或读取任何内容时立即触发。

如果说这么多的话就会杀了你? HM?