簡體   English   中英

我可以使用 ReadProcessMemory 在 Windows 中讀取進程的程序內存嗎?

[英]Can I use ReadProcessMemory to read program memory of a process in windows?

我有這個線程在我的程序進程中運行。 該線程應該讀取該進程的程序內存以檢測是否發生了任何禁止的代碼注入。 現在我如何訪問進程的程序內存? 我可以使用

ReadProcessMemory();

函數,如果我獲得帶有 ALL_ACCESS 標志的進程句柄,讀取程序內存? 還有一種方法可以以這種方式搜索此程序內存,以便我可以將此內存掃描限制為少數感興趣的特定方法或檢測特定方法的基地址和長度?

是的,如果您獲得具有 READ 權限的進程句柄(包含在 PROCESS_ALL_ACCESS 中),您可以使用 ReadProcessMemory() 來讀取目標進程的內存。

您要執行的操作稱為模式掃描。 首先,您將使用 VirtualQueryEx() 查找以 MEM_COMMIT 作為狀態且沒有 PAGE_NOACCESS 或 PAGE_GUARD 作為保護類型的內存區域。

您可以使用模式掃描功能遍歷這些內存區域,以查找要列入黑名單的特定簽名。

這是循環內存的基本思想

int main()
{
    DWORD procid = GetProcId("whatever.exe");

    MEMORY_BASIC_INFORMATION meminfo;
    unsigned char* addr = 0;

    HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, procid);

    MEMORY_BASIC_INFORMATION mbi;

    while (VirtualQueryEx(hProc, addr, &mbi, sizeof(mbi)))
    {
        if (mbi.State == MEM_COMMIT && mbi.Protect != PAGE_NOACCESS)
        {
            std::cout << "base : 0x" << std::hex << mbi.BaseAddress << " end : 0x" << std::hex << (uintptr_t)mbi.BaseAddress + mbi.RegionSize << "\n";
        }
        addr += mbi.RegionSize;
    }

    CloseHandle(hProc);
}

您可以從這里找到許多不同的圖案掃描功能來完成工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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