2017-04-30 178 views
0

我有一个可执行文件,似乎是堆栈缓冲区溢出。我很确定我理解大部分情况,但我需要知道的是缓冲区存储在内存中的位置。如果我知道它的绝对地址,或者相对于EBP或任何其他注册表,我会是金黄的。Ida:如何在内存中找到一个缓冲区变量

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

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

我对Ida相当陌生,所以我觉得这不应该很难完成,我只是缺少一些关键信息。

感谢, 弥敦道

+0

为什么这会降低投票率? – NirIzr

+0

我真的不知道,坦率地说我真的很想回答 – Nathan

回答

0

好了,因为没有人回答我的问题,我也可以提供我发现了什么是最好的回答自己。

1)了解如何组装写入内存

在x86处理器,汇编指令写一个字节的内存将是这个样子:

MOV Ptr Byte [ECX], EAX 

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

2)了解如何存储器正存储

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

它会杀了你说这么多的话?嗯?