应该替换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 (编辑:PHP编程网 - 黄冈站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|