首页
社区
课程
招聘
[求助][求助]如何定位栈溢出点
发表于: 2012-1-1 01:42 5162

[求助][求助]如何定位栈溢出点

2012-1-1 01:42
5162
2012年的今天我在用一个应用程序,突然嘣的一声,弹出一个框:
提示:
0xC0000005(ACCESS_VIOLATION) at 00 1B:00000000
The instruction at '0x00000000' referenced memory at '0x00000000'
The memory cold not be 'read'.

请问我该如何快速定位,这个代码溢出点呢....有没有什么好的思路.我折腾一天了..也没找到它!!


对了,快不快速都不无所谓了.有没有啥子办法找到是哪条代码把栈返回地址给盖了(当然在附近也行啊)!!
我自己写了一个单步跟踪工具调试器.就是他程序跑起来,我从OEP处工具自动 开始单步跟踪.只跟踪他的模块.系统模块不进行跟踪.
我在单步异常里,每次记录EIP值.  当EIP 值为0时,绝不会再触发单异常,而是先触发内存异常.所以这个时候,我就把程序在蹦的前一条指令地址
记录下来了! 想法很美满,现实很骨感....最后以失败告终....不知道为什么调试器跟踪到一个地址后就不跟了......然而我工具先自动单步到这个地址处停下来,我再用 手工单步又可以跟下去
费解....找不到原因..说这么没用,我只是把自己的所做了一些思路说出来..谁能帮我想想办法?有没有别的什么方法呢.补充一下,栈里的信息,触目不堪..冒似没什么信息.
期待回复,先谢谢各位了!又是一个失眠夜啊!!平安夜!!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 822
活跃值: (380)
能力值: ( LV12,RANK:310 )
在线值:
发帖
回帖
粉丝
2
确定是栈溢出吗,如果每次触发时esp的地址都一样,可以试试在esp上硬件断点
记录指令的话,可以试试OD的trace功能,不用自己写
可以先静态分析一下,关注一些拷贝函数如memcpy, strcpy之类

一般来讲普通的栈溢出通过这类分析方法大体上都能找出原因吧,如果实在不行,又不惜一切代价也要搞定的话

可以尝试一下PinTool, DynamoRIO等Instrument工具,只记录Ret相关指令就可以
当然也可以用虚拟机做full trace,基于Qemu的BitBlaze就不错,只不过trace文件会相当大,可能要自己写一些代码来减少记录的量,Bochs也行
Branch Trace也可以试试: http://bbs.pediy.com/showthread.php?t=66975

以上是几种思路,希望对楼主有帮助
2012-1-1 10:29
0
雪    币: 108
活跃值: (56)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
3
非常感谢ls的热心朋友给我回复~我去试试!祝你新年健康快乐...
2012-1-1 11:50
0
雪    币: 108
活跃值: (56)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
4
最后经过恩师指点,还是在栈里面找到信息,确实不是栈溢出..... ..唉,学shellcode学的太上心了
2012-1-3 22:12
0
游客
登录 | 注册 方可回帖
返回
//