[英]Read Kernel Memory from user mode WITHOUT driver
我正在編寫一個程序,它枚舉由SetWindowsHookEx()
創建的鈎子。這是一個過程:
GetProcAddress()
獲取在User32.dll
導出的gSharedInfo
(工作,驗證) gSharedInfo + 8
讀取用戶模式內存,結果應該是第一個句柄條目的指針。 (工作,驗證) [gSharedInfo] + 8
,結果應該是count
柄枚舉的。 (工作,驗證) count
次數 HANDLEENTRY.bType
是否為5(這意味着它是一個HHOOK)。 如果是這樣,請打印信息。 問題是,雖然步驟1-3只涉及用戶模式內存,但步驟4要求程序讀取內核內存。 經過一些研究后,我發現ZwSystemDebugControl
可用於從用戶模式訪問內核內存。 所以我寫了以下函數:
BOOL GetKernelMemory(PVOID pKernelAddr, PBYTE pBuffer, ULONG uLength)
{
MEMORY_CHUNKS mc;
ULONG uReaded = 0;
mc.Address = (UINT)pKernelAddr; //Kernel Memory Address - input
mc.pData = (UINT)pBuffer;//User Mode Memory Address - output
mc.Length = (UINT)uLength; //length
ULONG st = -1;
ZWSYSTEMDEBUGCONTROL ZwSystemDebugControl = (ZWSYSTEMDEBUGCONTROL)GetProcAddress(
GetModuleHandleA("ntdll.dll"), "NtSystemDebugControl");
st = ZwSystemDebugControl(SysDbgCopyMemoryChunks_0, &mc, sizeof(MEMORY_CHUNKS), 0, 0, &uReaded);
return st == 0;
}
但上面的功能不起作用。 uReaded
始終為0, st
始終為0xC0000002。 我該如何解決這個錯誤?
我的完整計划: http : //pastebin.com/xzYfGdC5
在Windows XP之后,MSFT沒有實現NtSystemDebugControl
系統調用。
Meltdown漏洞使得在大多數Intel CPU上以大約500kB / s的速度從用戶模式讀取內核內存成為可能。 這適用於大多數未修補的操作系統。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.