簡體   English   中英

從用戶模式讀取內核內存,不帶驅動程序

[英]Read Kernel Memory from user mode WITHOUT driver

我正在編寫一個程序,它枚舉由SetWindowsHookEx()創建的鈎子。這是一個過程:

  1. 使用GetProcAddress()獲取在User32.dll導出的gSharedInfo (工作,驗證)
  2. gSharedInfo + 8讀取用戶模式內存,結果應該是第一個句柄條目的指針。 (工作,驗證)
  3. 閱讀在用戶模式存儲器[gSharedInfo] + 8 ,結果應該是count柄枚舉的。 (工作,驗證)
  4. 從步驟2中獲得的地址讀取數據,重復count次數
  5. 檢查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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM