anti-debug2——扰乱

利用SEH反调试

在SEH的机制下,当发生异常时,操作系统会接收这个异常然后调用进程中注册的SEH处理,但这样的异常发生在调试中时,异常就会由调试器来接收处理,根据这个特征就可用来反调试。

 

EXCEPTION_BREAKPOINT是断点异常,若程序处于调试运行状态。则系统会立刻停止运行程序,并将控制权交给调试器。所以当遇到int3指令时,正常运行的程序会调用SEH中的代码处理,而调试中的程序什么也不做直接运行后面的代码,而后面的代码通常是错误的。那么关键点就在SEH的处理函数中了,通常会修改EIP的值。不过我们可以使调试器忽略int3异常来简单的使这种反调试无效

 

UnhandledExceptionFilter函数在没有注册SEH且发生异常时被操作系统调用,这个函数内部会运行系统内部最后一个异常处理器,这个异常处理器通常叫做Top Level Exception Filter或Last Exception Filter,而这个函数可以通过使用SetUnhandledExceptionFilter来设置,它的参数就是Last Exception Filter函数的地址。在UnhanledExceptionFilter函数中,会使用NtInformationProcess函数,且第2个参数为7,表示DebugPort,来检测调试状态,若程序处于非调试状态,则正常运行异常处理器,若程序是在调试状态运行,则将异常处理工作交个调试器,这样异常处理器无法执行,使得程序运行会出错,就可以用来进行反调试,并且我们可以在异常处理器中再进行一次调试检测来反调试,这样的保护要去除是比较麻烦的。要除掉这种反调试,需要先跟入UnhandledException API中,修改NtInfo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值