首页
社区
课程
招聘
[原创]WIN寻找异常发生代码技巧,高手勿入
发表于: 2014-7-9 15:20 10789

[原创]WIN寻找异常发生代码技巧,高手勿入

2014-7-9 15:20
10789

写一篇寻找异常发生点的小技巧,适合新手,大神忽略。。。

当我们拿到程序时可能在某种情况下发生异常,无论出于什么目的(可能你要挖掘一些可利用漏洞,或者你是在汇编重构某软件),你都需要知道异常发生的现场在哪个地址,对于简单的程序来讲,单步跟踪就可以发现异常点,但是如果是一个庞大的程序,消息循环复杂,线程众多,并不好跟踪,这就需要一点技巧了,分享几个我的技巧吧。

一般方法:关键api下断,如你在点击某个button的时候出现异常,如果这个button是打开某以文件那你可以在openfile下断,等等吧,不多说了,需要你分析一下执行的过程中需要通过哪些系统api,这是一般的思路。

利用SEH方法:利用ntdll的exceptiondispatch函数。

当系统发生能够被SHE捕获的异常时候,系统会首先在内核进行相关的一些处理,如果此异常发生在用户空间,那么异常发生后系统返回到用户空间的第一个位置就是exceptiondispatch,并且内核压入了两个重要的数据结构,含有异常发生的现场,这两个结构是EXCEPTION_RECORD,与CONTEXT,其中EXCEPTION_RECORD中的+C偏移处是异常的发生地址,有些的异常我们能够通过这个值直接找到地址,下图是EXCEPTION_RECORD,

可以看到+c处是异常发生地址,但很多情况下这个地址是不准确的,因为程序很有可能是jmp到了一个不合法地址,而异常发生地址往往显示0x00000000引用不合法指令等等,这就需要另一个小技巧,去栈里找案发现场,那就需要用到CONTEXT了,不贴出这个数据结构了 ,比较大,有用的值是esp偏移是+C4,下面我给出一个例子

这是我系统中exceptiondispatch的地址,在此下断

程序运行后发生异常 ,断在了exceptiondispatch处,此时看上图是栈的状态,esp指向的32fb70是EXCEPTION_RECORD的地址,32fb8c则是CONTEXT的地址,可以看到异常发生地址是0,错误类型c0000005,是一个内存读写非法,明显是程序跳到了0地址处,究竟是怎么发生的呢,我们可以寻找异常发生时的esp,向下追溯案发现场

从CONTEXT中找到esp,然后跳转到esp的地址,32fe58就是异常时候的esp

从esp向下看到一个返回地址,%80这就是当时的异常发生的调用者,因为异常发生后对于栈是不破坏的,跟进去就能找到异常的具体原因了,看看是不是可以利用的或者调一下bug。

跟异常方法技巧很多,我只介绍了我习惯的方法,具体问题还得具体分析,大神不要拍砖啊


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 3
支持
分享
最新回复 (15)
雪    币: 21
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
楼主写得很详细。另,研究一下wow的异常派发和jit调试,多科普科普
2014-7-9 18:11
0
雪    币: 144
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
mark
2014-7-9 20:15
0
雪    币: 300
活跃值: (2477)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
mark
2014-8-5 13:26
0
雪    币: 185
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
图片挂了,哥们
2014-8-12 00:54
0
雪    币: 47147
活跃值: (20465)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
6
能否将图片转到论坛本地?

帖图方法见:http://bbs.pediy.com/showpost.php?postid=292659
2014-8-12 15:39
0
雪    币: 119
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
哥们,你图挂了,求更新
2014-8-19 16:21
0
雪    币: 101
活跃值: (29)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
留个脚印
2014-8-19 17:40
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
mark
2014-12-21 21:17
0
雪    币: 719
活跃值: (777)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
10
mark
2014-12-26 19:53
0
雪    币: 188
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
Mark,多谢楼主分享。
2014-12-26 20:21
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
信息量有点大。。 我还得消化一阵
2015-2-12 10:56
0
雪    币: 55
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
mark
2015-4-21 12:40
0
雪    币: 115
活跃值: (23)
能力值: (RANK:20 )
在线值:
发帖
回帖
粉丝
14
大牛,留下联系方式,我向向你请教如何学习技术!
2015-6-19 10:57
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
mark
2015-12-1 21:29
0
雪    币: 3725
活跃值: (619)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
16
学习了,正在学习这一块的东西. 客户端崩溃,崩溃信息的记录有涉及到这一块.
2015-12-3 13:00
0
游客
登录 | 注册 方可回帖
返回
//