设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 手机 数据
当前位置: 首页 > 运营中心 > 建站资源 > 策划 > 正文

26种对付反调试的方法(13)

发布时间:2019-03-21 12:55 所属栏目:20 来源:luochicun
导读:链中的最后一部分是系统分配的默认处理程序。如果以前没有异常的处理程序,则系统处理程序将转到注册表以获取 HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsNTCurrentVersionAeDebug 根据AeDebug密钥值,应用程序将

链中的最后一部分是系统分配的默认处理程序。如果以前没有异常的处理程序,则系统处理程序将转到注册表以获取

  1. HKEY_LOCAL_MACHINESoftwareMicrosoftWindows NTCurrentVersionAeDebug 

根据AeDebug密钥值,应用程序将被终止或控制被传送到调试器。调试器路径应在调试器REG_SZ中指示。

在创建新进程时,系统会向其添加主要SEH Frame。主SEH Frame的处理程序也由系统定义。主要的SEH Frame本身几乎位于最初为进程分配的堆栈内存中。 SEH处理函数签名如下所示:

  1. typedef EXCEPTION_DISPOSITION (*PEXCEPTION_ROUTINE) ( 
  2.     __in struct _EXCEPTION_RECORD *ExceptionRecord, 
  3.     __in PVOID EstablisherFrame, 
  4.     __inout struct _CONTEXT *ContextRecord, 
  5.     __inout PVOID DispatcherContext 
  6.     ); 

如果正在调试应用程序,在int 3h中断生成后,控制将被调试器拦截。否则,,控制将被转移

到SEH处理程序。以下代码就是基于SEH Frame的反调试保护:

  1. BOOL g_isDebuggerPresent = TRUE; 
  2. EXCEPTION_DISPOSITION ExceptionRoutine( 
  3.     PEXCEPTION_RECORD ExceptionRecord, 
  4.     PVOID             EstablisherFrame, 
  5.     PCONTEXT          ContextRecord, 
  6.     PVOID             DispatcherContext) 
  7.     g_isDebuggerPresent = FALSE; 
  8.     ContextRecord->Eip += 1; 
  9.     return ExceptionContinueExecution; 
  10. int main() 
  11.     __asm 
  12.     { 
  13.         // set SEH handler 
  14.         push ExceptionRoutine 
  15.         push dword ptr fs:[0] 
  16.         mov  dword ptr fs:[0], esp 
  17.         // generate interrupt 
  18.         int  3h 
  19.         // return original SEH handler 
  20.         mov  eax, [esp] 
  21.         mov  dword ptr fs:[0], eax 
  22.         add  esp, 8 
  23.     } 
  24.     if (g_isDebuggerPresent) 
  25.     { 
  26.         std::cout << "Stop debugging program!" << std::endl; 
  27.         exit(-1); 
  28.     } 
  29.     return 0 

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读