我有一个可执行文件似乎正在发生堆栈缓冲区溢出。我很确定我理解了大部分正在发生的事情,但我需要知道的是缓冲区存储在内存中的位置。如果我知道它的绝对地址,或者相对于EBP或任何其他寄存器,我会是金色的。
我知道Ida会跟踪字符串和函数,但是有什么方法可以找到缓冲区或类似的变量吗?至少有一种方法可以获得某种线索吗?
我已经能够为程序提供参数,但我不知道这些参数如何与缓冲区相关。如果我能找到这些变量的位置,那就不难了。
我对Ida相当新,所以我觉得这不应该是那么难以完成,我只是错过了一些关键信息。
谢谢, 森
答案 0 :(得分:0)
好吧,由于没有人回答我的问题,我不妨提供我发现的最好的答案。
1)了解程序集如何写入内存
在x86处理器中,将一个字节写入内存的汇编指令如下所示:
MOV Ptr Byte [ECX], EAX
在此示例中,寄存器EAX的内容被写入ECX内容指定的存储单元。使用Immunity,在这种指令中设置断点。例如,一旦程序到达此行,请检查ECX的内容并在该位置查找内存转储。这应该是写缓冲区的地方。
2)了解内存的存储方式
在Immunity的内存窗口中,每个内存转储对应于在运行时创建的已分配空间。如果禁用ASLR(您可以使用EMET强制禁用它),则只需运行程序,然后在事后搜索内存。如果启用了ASLR,请尝试找出每次重新运行时写入的内存类型,然后尝试推断正在写入哪个内存转储。扣除后,在内存转储中设置一个断点,设置为在写入或读取任何内容时立即触发。
如果说这么多的话就会杀了你? HM?