首页
论坛
课程
招聘
[原创]Ollydbg之SetUnhandledExceptionFilter调试
2010-10-8 22:48 6741

[原创]Ollydbg之SetUnhandledExceptionFilter调试

2010-10-8 22:48
6741
Windows处理异常一般有下面两种方式:
筛选器异常处理
SHE异常处理

这两个名词具体指什么,我就不介绍了,因为前辈们已经介绍的很详细了.
如果你还不甚了解,建议去看看罗云彬的Win32汇编书籍,里面介绍的很详细.

下面结合一个Win32汇编写的案例,介绍一下Ollydbg如何完成SetUnhandledExceptionFilter的调试的

案例代码
;=====================================================
.386
.model flat,stdcall
option casemap:none
;=====================================================
include         windows.inc
include         user32.inc
includelib      user32.lib
include         kernel32.inc
includelib      kernel32.lib
;=====================================================
.data?
lpOldHandler    dd      ?

.const
szMsg           db      'ExceptionAddress:%08X',0dh,0ah
                db      'ExceptionCode:%08X',0dh,0ah
                db      'ExceptionFlag:%08X',0
szSafe          db      'Ignore Exceptions successfully!',0
szCaption       db      'Exception Handler',0
;======================================================
.code
_Handler        proc    _lpExceptionPoint
                local   @szBuffer[100h]:byte

                pushad
                mov     esi,_lpExceptionPoint
                
                assume  esi:ptr EXCEPTION_POINTERS
                mov     edi,[esi].ContextRecord
                mov     esi,[esi].pExceptionRecord

                assume  esi:ptr EXCEPTION_RECORD,edi:ptr CONTEXT
                invoke  wsprintf,addr @szBuffer,addr szMsg,\
                                                [edi].regEip,\
                                                [esi].ExceptionCode,\
                                                [esi].ExceptionFlags
                invoke  MessageBox,NULL,addr @szBuffer,NULL,MB_OK
                
                mov     [edi].regEip,offset _SafePlace
               
                assume  esi:nothing,edi:nothing
                popad
                mov     eax,EXCEPTION_CONTINUE_EXECUTION
                ret
_Handler        endp

start:
                invoke  SetUnhandledExceptionFilter,addr _Handler
                mov     lpOldHandler,eax

                xor     eax,eax
                mov     dword ptr [eax],0
                
_SafePlace:
                invoke  MessageBox,NULL,addr szSafe,addr szCaption,MB_OK
                invoke  SetUnhandledExceptionFilter,lpOldHandler
                invoke  ExitProcess,NULL
end start


Ollydbg载入编译好的程序Anti.exe,打开”Debugging options”,对Exceptions项进行设置,将勾全部取消.


设置完成,重新载入Anti.exe,F9运行程序,到达异常地址



Xor eax,eax   ;执行后eax值为0
Mov byte ptr [eax],0   ;产生异常[往地址00000000处写入数据]

遇到这样的情况F7,F8,F9是无法继续向下调试的。
此时大家看看栈的窗口,会发现



也就是说如果这个异常跳过,程序会到调到00401000,处,现在在地址00401000处设置F2断点.



另外我们还需要在0040106E处下F2断点,因为异常部分运行过后,程序将转到下面的正常指令处[这里就是处理异常的子过程]



注意上面将Exceptions选项的勾去掉就是为了分析出00401000这个地址,现在我们将Exceptions里面的勾全部还原.
Exception选项勾全部选中是无法分析出上面的那个地址00401000



现在要做的是如何步过异常,利用插件HideOD,



设置完成后,Ctrl+F2重载程序,然后隐藏利用HideOD隐藏OD
现在F9运行程序


F8单步向下调试,


一直F8单步向下分析,来到下面的位置


继续F8单步向下,转到下面的断点处


接下来大家继续就可以继续调试了!

注意:1>异常处理子过程式如何分析出来的
    2>关键位置下断,避免程序运行


图片大家可能看不见,所以大家下在附件文件[里面是我保存的mht文件]

看雪招聘平台创建简历并且简历完整度达到90%及以上可获得500看雪币~

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (4)
雪    币: 313
活跃值: 活跃值 (22)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
better 活跃值 2 2010-10-9 09:44
2
0
只要hideOD就可以了呀
雪    币: 584
活跃值: 活跃值 (11122)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
kanxue 活跃值 8 2010-10-16 16:56
3
0
SHE 应为SEH

另外,建议将图片传到论坛本地?这样将有助于长久保存。

这里有图片上传的方法:http://bbs.pediy.com/showpost.php?postid=292659
雪    币: 79
活跃值: 活跃值 (68)
能力值: ( LV9,RANK:450 )
在线值:
发帖
回帖
粉丝
RegKiller 活跃值 10 2010-10-16 17:25
4
0
只看到百度的广告图,没看到楼主的图.
雪    币: 4327
活跃值: 活跃值 (575)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
b23526 活跃值 2010-10-16 17:41
5
0
难道是传说中的百毒广告贴
游客
登录 | 注册 方可回帖
返回