加入收藏 | 设为首页 | 会员中心 | 我要投稿 西安站长网 (https://www.029zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

26种对付反调试的方法

发布时间:2019-03-22 04:10:04 所属栏目:建站 来源:luochicun
导读:副标题#e# 目前主要有3种分析软件的方法: 1.数据交换分析,研究人员使用数据包嗅探工具来分析网络数据交换。 2.对软件的二进制代码进行反汇编,然后以汇编语言列出。 3.字节码解码或二进制解码,然后以高级编程语言重新创建源代码。 本文针对的是Windows操

SEH是Windows操作系统提供给程序设计者的强有力的处理程序错误或异常处理的工具,允许其接收关于异常情况的通知,例如除数是0导致的错误,引用不存在的指针或执行受限制的指令。这种机制允许处理应用程序中的异常,而无需操作系统操作。如果不对异常进行处理,则会导致异常程序终止。开发人员通常能在堆栈中找到SEH的指针,它们被称为SEH Frame。当前SEH Frame地址位于x64系统的FS选择器或GS选择器的0的偏移处,这个地址指向ntdll!_EXCEPTION_REGISTRATION_RECORD结构:

  1. 0:000> dt ntdll!_EXCEPTION_REGISTRATION_RECORD 
  2.    +0x000 Next             : Ptr32 _EXCEPTION_REGISTRATION_RECORD 
  3.    +0x004 Handler          : Ptr32 _EXCEPTION_DISPOSITION 

当启动异常时,控制将传输到当前的SEH处理程序。根据情况,SEH处理程序应返回一个_EXCEPTION_DISPOSITION值:

  1. typedef enum _EXCEPTION_DISPOSITION { 
  2.     ExceptionContinueExecution, 
  3.     ExceptionContinueSearch, 
  4.     ExceptionNestedException, 
  5.     ExceptionCollidedUnwind 
  6. } EXCEPTION_DISPOSITION; 

如果处理程序返回ExceptionContinueSearch,系统会继续执行指令,从而触发异常。如果处理程序不知道如何处理异常,它应该返回ExceptionContinueSearch,转到系统中的下一个处理程序。你可以使用windbg调试器中的!exchain命令浏览当前的异常链:

  1. 0:000> !exchain 
  2. 00a5f3bc: AntiDebug!_except_handler4+0 (008b7530) 
  3.   CRT scope  0, filter: AntiDebug!SehInternals+67 (00883d67) 
  4.                 func:   AntiDebug!SehInternals+6d (00883d6d) 
  5. 00a5f814: AntiDebug!__scrt_stub_for_is_c_termination_complete+164b (008bc16b) 
  6. 00a5f87c: AntiDebug!_except_handler4+0 (008b7530) 
  7.   CRT scope  0, filter: AntiDebug!__scrt_common_main_seh+1b0 (008b7c60) 
  8.                 func:   AntiDebug!__scrt_common_main_seh+1cb (008b7c7b) 
  9. 00a5f8e8: ntdll!_except_handler4+0 (775674a0) 
  10.   CRT scope  0, filter: ntdll!__RtlUserThreadStart+54386 (7757f076) 
  11.                 func:   ntdll!__RtlUserThreadStart+543cd (7757f0bd) 
  12. 00a5f900: ntdll!FinalExceptionHandlerPad4+0 (77510213) 

(编辑:西安站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读