| 应该替换NtQueryInformationProcess函数返回的值。如果要使用mhook,就要先设置一个钩子,可以将DLL注入到调试过程中,并使用mhook在DLLMain中设置一个钩子。以下就是一个mhook用法的例子: #include <Windows.h> #include "mhook.h" typedef NTSTATUS(NTAPI *pfnNtQueryInformationProcess)(     _In_      HANDLE           ProcessHandle,     _In_      UINT             ProcessInformationClass,     _Out_     PVOID            ProcessInformation,     _In_      ULONG            ProcessInformationLength,     _Out_opt_ PULONG           ReturnLength     ); const UINT ProcessDebugPort = 7; pfnNtQueryInformationProcess g_origNtQueryInformationProcess = NULL; NTSTATUS NTAPI HookNtQueryInformationProcess(     _In_      HANDLE           ProcessHandle,     _In_      UINT             ProcessInformationClass,     _Out_     PVOID            ProcessInformation,     _In_      ULONG            ProcessInformationLength,     _Out_opt_ PULONG           ReturnLength     ) {     NTSTATUS status = g_origNtQueryInformationProcess(         ProcessHandle,         ProcessInformationClass,         ProcessInformation,         ProcessInformationLength,         ReturnLength);     if (status == 0x00000000 && ProcessInformationClass == ProcessDebugPort)     {         *((PDWORD_PTR)ProcessInformation) = 0;     }     return status; } DWORD SetupHook(PVOID pvContext) {     HMODULE hNtDll = LoadLibrary(TEXT("ntdll.dll"));     if (NULL != hNtDll)     {         g_origNtQueryInformationProcess = (pfnNtQueryInformationProcess)GetProcAddress(hNtDll, "NtQueryInformationProcess");         if (NULL != g_origNtQueryInformationProcess)         {             Mhook_SetHook((PVOID*)&g_origNtQueryInformationProcess, HookNtQueryInformationProcess);         }     }     return 0; } BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpvReserved) {     switch (fdwReason)     {     case DLL_PROCESS_ATTACH:         DisableThreadLibraryCalls(hInstDLL);         CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)SetupHook, NULL, NULL, NULL);         Sleep(20);     case DLL_PROCESS_DETACH:         if (NULL != g_origNtQueryInformationProcess)         {             Mhook_Unhook((PVOID*)&g_origNtQueryInformationProcess);         }         break;     }     return TRUE; } 
 基于NtQueryInformationProcess的其他反调试保护技术 可以从NtQueryInformationProcess函数提供的信息知道,还有更多的调试器检测技术: 1.ProcessDebugPort 0x07,已在上面讨论过。 2.ProcessDebugObjectHandle 0x1E 3.ProcessDebugFlags 0x1F 4.ProcessBasicInformation 0x00 ProcessDebugObjectHandle (编辑:广西网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |