加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.cn/)- 云渲染、网络安全、数据安全、数据分析、人体识别!
当前位置: 首页 > 运营中心 > 建站资源 > 策划 > 正文

26种对付反调试的方法

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

应该替换NtQueryInformationProcess函数返回的值。如果要使用mhook,就要先设置一个钩子,可以将DLL注入到调试过程中,并使用mhook在DLLMain中设置一个钩子。以下就是一个mhook用法的例子:

  1. #include <Windows.h> 
  2. #include "mhook.h" 
  3. typedef NTSTATUS(NTAPI *pfnNtQueryInformationProcess)( 
  4.     _In_      HANDLE           ProcessHandle, 
  5.     _In_      UINT             ProcessInformationClass, 
  6.     _Out_     PVOID            ProcessInformation, 
  7.     _In_      ULONG            ProcessInformationLength, 
  8.     _Out_opt_ PULONG           ReturnLength 
  9.     ); 
  10. const UINT ProcessDebugPort = 7; 
  11. pfnNtQueryInformationProcess g_origNtQueryInformationProcess = NULL; 
  12. NTSTATUS NTAPI HookNtQueryInformationProcess( 
  13.     _In_      HANDLE           ProcessHandle, 
  14.     _In_      UINT             ProcessInformationClass, 
  15.     _Out_     PVOID            ProcessInformation, 
  16.     _In_      ULONG            ProcessInformationLength, 
  17.     _Out_opt_ PULONG           ReturnLength 
  18.     ) 
  19. { 
  20.     NTSTATUS status = g_origNtQueryInformationProcess( 
  21.         ProcessHandle, 
  22.         ProcessInformationClass, 
  23.         ProcessInformation, 
  24.         ProcessInformationLength, 
  25.         ReturnLength); 
  26.     if (status == 0x00000000 && ProcessInformationClass == ProcessDebugPort) 
  27.     { 
  28.         *((PDWORD_PTR)ProcessInformation) = 0; 
  29.     } 
  30.     return status; 
  31. } 
  32. DWORD SetupHook(PVOID pvContext) 
  33. { 
  34.     HMODULE hNtDll = LoadLibrary(TEXT("ntdll.dll")); 
  35.     if (NULL != hNtDll) 
  36.     { 
  37.         g_origNtQueryInformationProcess = (pfnNtQueryInformationProcess)GetProcAddress(hNtDll, "NtQueryInformationProcess"); 
  38.         if (NULL != g_origNtQueryInformationProcess) 
  39.         { 
  40.             Mhook_SetHook((PVOID*)&g_origNtQueryInformationProcess, HookNtQueryInformationProcess); 
  41.         } 
  42.     } 
  43.     return 0; 
  44. } 
  45. BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpvReserved) 
  46. { 
  47.     switch (fdwReason) 
  48.     { 
  49.     case DLL_PROCESS_ATTACH: 
  50.         DisableThreadLibraryCalls(hInstDLL); 
  51.         CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)SetupHook, NULL, NULL, NULL); 
  52.         Sleep(20); 
  53.     case DLL_PROCESS_DETACH: 
  54.         if (NULL != g_origNtQueryInformationProcess) 
  55.         { 
  56.             Mhook_Unhook((PVOID*)&g_origNtQueryInformationProcess); 
  57.         } 
  58.         break; 
  59.     } 
  60.     return TRUE; 
  61. } 

基于NtQueryInformationProcess的其他反调试保护技术

可以从NtQueryInformationProcess函数提供的信息知道,还有更多的调试器检测技术:

1.ProcessDebugPort 0x07,已在上面讨论过。

2.ProcessDebugObjectHandle 0x1E

3.ProcessDebugFlags 0x1F

4.ProcessBasicInformation 0x00

ProcessDebugObjectHandle

(编辑:常州站长网)

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

热点阅读