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

26种对付反调试的方法

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

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

  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 

(编辑:晋中站长网)

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

热点阅读