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

26种对付反调试的方法

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

在CheckRemoteDebuggerPresent的内部,调用NtQueryInformationProcess函数:

  1. 0:000> uf kernelbase!CheckRemotedebuggerPresent 
  2. KERNELBASE!CheckRemoteDebuggerPresent: 
  3. ... 
  4. 75207a24 6a00            push    0 
  5. 75207a26 6a04            push    4 
  6. 75207a28 8d45fc          lea     eax,[ebp-4] 
  7. 75207a2b 50              push    eax 
  8. 75207a2c 6a07            push    7 
  9. 75207a2e ff7508          push    dword ptr [ebp+8] 
  10. 75207a31 ff151c602775    call    dword ptr [KERNELBASE!_imp__NtQueryInformationProcess (7527601c)] 
  11. 75207a37 85c0            test    eax,eax 
  12. 75207a39 0f88607e0100    js      KERNELBASE!CheckRemoteDebuggerPresent+0x2b (7521f89f) 
  13. ... 

如果我们来看看NtQueryInformationProcess文档,那么这个Assembler列表将向我们展示CheckRemoteDebuggerPresent函数获取DebugPort值,因为ProcessInformationClass参数值(第二个)为7,以下反调试代码就是基于调用NtQueryInformationProcess:

  1. typedef NTSTATUS(NTAPI *pfnNtQueryInformationProcess)( 
  2.     _In_      HANDLE           ProcessHandle, 
  3.     _In_      UINT             ProcessInformationClass, 
  4.     _Out_     PVOID            ProcessInformation, 
  5.     _In_      ULONG            ProcessInformationLength, 
  6.     _Out_opt_ PULONG           ReturnLength 
  7.     ); 
  8. const UINT ProcessDebugPort = 7; 
  9. int main(int argc, char *argv[]) 
  10.     pfnNtQueryInformationProcess NtQueryInformationProcess = NULL; 
  11.     NTSTATUS status; 
  12.     DWORD isDebuggerPresent = 0; 
  13.     HMODULE hNtDll = LoadLibrary(TEXT("ntdll.dll")); 
  14.      
  15.     if (NULL != hNtDll) 
  16.     { 
  17.         NtQueryInformationProcess = (pfnNtQueryInformationProcess)GetProcAddress(hNtDll, "NtQueryInformationProcess"); 
  18.         if (NULL != NtQueryInformationProcess) 
  19.         { 
  20.             status = NtQueryInformationProcess( 
  21.                 GetCurrentProcess(), 
  22.                 ProcessDebugPort, 
  23.                 &isDebuggerPresent, 
  24.                 sizeof(DWORD), 
  25.                 NULL); 
  26.             if (status == 0x00000000 && isDebuggerPresent != 0) 
  27.             { 
  28.                 std::cout << "Stop debugging program!" << std::endl; 
  29.                 exit(-1); 
  30.             } 
  31.         } 
  32.     } 
  33.     return 0; 

如何避开CheckRemoteDebuggerPresent和NtQueryInformationProcess

(编辑:威海站长网)

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

热点阅读