首页
社区
课程
招聘
[原创]异常处理流程(一) 异常处理三剑客
发表于: 2018-5-9 17:35 6544

[原创]异常处理流程(一) 异常处理三剑客

2018-5-9 17:35
6544

异常处理流程是学习逆向中至关重要的一环,我们试图揭开异常处理流程的神秘面纱。

调试器:OllyDbg

环境:WIN XP SP3 虚拟机

异常处理的本质是一个外部中断。中断是计算机硬件的一个重要概念,这里分享一个百度百科的解释给不清楚的朋友参考。

https://baike.baidu.com/item/%E4%B8%AD%E6%96%AD/3933007?fr=aladdin

具体讲,就是在遇到异常时,程序会跳出正常的程序执行流程,执行一段远在程序代码之外的代码,这段代码叫SEH( Structured Exception Handling )结构化异常处理函数。顾名思义是处理异常的专用函数。很多壳会利用系统的这一特性实现反调试,可谓是别出心裁了。只要有想法,任何一个不起眼的函数或者机制都可以摇身一变成为反调试的利器。本例就是如此

初次配置反调试插件时,首先忽略所有异常,用插件把FindWindow和IsDebuggerPresent过掉,保存,重启,让插件生效。

载入OD,发现运行以后停下来,显示无法处理的异常,很奇怪,明明忽略所有的异常,为什么还会因为异常被断下?

遇到这情况,需要明白异常区前都执行了什么函数

载入程序,首先来了解一些,SetUnhandleExeptionFilter函数的作用


翻译第二段:当这个函数调用完成后,如果一个未调试器调试的进程有异常发生后,异常会让这个进程运行结构化异常处理函数(SEH),这个函数(原文是filter,不是function。所以这里是意译)会调用由 lpTopLevelExceptionFilter所指定的异常处理函数。

所以这个函数很关键很关键很关键。

这个函数怎么用呢?我们看一下。

查看函数列表,有这个函数,下断(请思考,如果没有该怎么办呢?)

该函数的参数很重要,它要做的事很重要

断下,看堆栈:

Cal到SetUnhandledExceptionFilter来自00401005

Ptoplevelfilter=00401108

返回到7c81776f

给00401108设置断点bp 401108,这个参数就是 lpTopLevelExceptionFilter 。它是一个专门处理异常的函数的首地址,有异常就执行这个函数。

然而这里401108不是处理异常的,一点异常处理的功能都没有,由于无法处理,系统就自动退出了,实现了反调试。作者很有想法,他的思路值得我们借鉴。

SetUnhandledExceptionFilter 这个函数的返回值有三种情况:


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

最后于 2018-5-11 12:29 被r0Cat编辑 ,原因:
收藏
免费 2
支持
分享
最新回复 (2)
雪    币: 1907
活跃值: (6004)
能力值: ( LV7,RANK:116 )
在线值:
发帖
回帖
粉丝
2
文章写得很清楚,小白学习了一波,谢谢
2018-6-5 11:18
0
雪    币: 2694
活跃值: (80)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
3
2018-6-18 08:41
0
游客
登录 | 注册 方可回帖
返回
//