gpt4 book ai didi

c - 使用 ZwQuerySystemInformation 获取 SystemKernelDebuggerInformation

转载 作者:太空宇宙 更新时间:2023-11-04 03:57:54 25 4
gpt4 key购买 nike

我一直在尝试通过使用 ZwQuerySystemInformation 函数调用来确定程序是否在系统模式调试器下运行。

到目前为止,我有以下代码,我在其中加载 ntdll.dll 库并获取 ZwQuerySystemInformation 的地址。然后我必须使用适当的参数调用我返回的句柄以获取 SystemKernelDebuggerInformation 信息。

#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
#include <Winternl.h>


int _tmain(int argc, _TCHAR* argv[])
{
/* load the ntdll.dll */
HMODULE lib = LoadLibrary(_T("ntdll.dll"));
FARPROC fun = GetProcAddress(lib, "ZwQuerySystemInformation");
if(fun == NULL) {
printf("Error: could not find the function ZwQuerySystemInformation in library ntdll.dll.");
exit(-1);
}
printf("ZwQuerySystemInformation is located at 0x%08x in ntdll.dll.\n", (unsigned int)fun);


SYSTEM_INFORMATION_CLASS sic = SystemKernelDebuggerInformation;
SYSTEM_BASIC_INFORMATION sbi;

NTSTATUS WINAPI temp = NtQuerySystemInformation(sic, &sbi, sizeof(sbi), NULL);


/* wait */
getchar();

return 0;
}

你能告诉我如何调用该函数来获取包含 SystemKernelDebuggerInformation 信息的系统信息吗?这样就足够了,剩下的我来处理。

谢谢

最佳答案

CheckDebugger_Method3

     int main(){
typedef long NTSTATUS;
#define STATUS_SUCCESS ((NTSTATUS)0L)
HANDLE hProcess = GetCurrentProcess();
typedef struct _SYSTEM_KERNEL_DEBUGGER_INFORMATION {
BOOLEAN DebuggerEnabled;
BOOLEAN DebuggerNotPresent;
} SYSTEM_KERNEL_DEBUGGER_INFORMATION, *PSYSTEM_KERNEL_DEBUGGER_INFORMATION;
enum SYSTEM_INFORMATION_CLASS { SystemKernelDebuggerInformation = 35 };
typedef NTSTATUS (__stdcall *ZW_QUERY_SYSTEM_INFORMATION)(IN SYSTEM_INFORMATION_CLASS SystemInformationClass, IN OUT PVOID SystemInformation, IN ULONG SystemInformationLength, OUT PULONG ReturnLength);
ZW_QUERY_SYSTEM_INFORMATION ZwQuerySystemInformation;
SYSTEM_KERNEL_DEBUGGER_INFORMATION Info;
HMODULE hModule = GetModuleHandle("ntdll.dll");
if (!hModule) {
return FALSE;
}
ZwQuerySystemInformation = (ZW_QUERY_SYSTEM_INFORMATION)GetProcAddress(hModule, "ZwQuerySystemInformation");
if (ZwQuerySystemInformation) {
if (STATUS_SUCCESS == ZwQuerySystemInformation(SystemKernelDebuggerInformation, &Info, sizeof(Info), NULL)) {
if (Info.DebuggerEnabled&&!Info.DebuggerNotPresent) {
return TRUE;
}
}
}
return FALSE;
}

ZwQuerySystemInformation从 Windows 8 开始不再可用

关于c - 使用 ZwQuerySystemInformation 获取 SystemKernelDebuggerInformation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14791901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com