gpt4 book ai didi

windows - 如何使用 VirtualAllocEx 为代码洞穴腾出空间?

转载 作者:可可西里 更新时间:2023-11-01 09:22:17 27 4
gpt4 key购买 nike

如何使用 VirtualAllocEx 为 code cave 腾出空间? ?我目前拥有一个“可用空间”很少的软件,我读到 VirtualAllocEx 用于创建这个空间..

最佳答案

清除“代码洞穴”问题后,您会发现以下有趣的代码,它枚举了当前进程中由 VirtualAllocEx 分配的 block ,并找到所有 PE(DLL 和 EXE 本身)。

SYSTEM_INFO si;
MEMORY_BASIC_INFORMATION mbi;

DWORD nOffset = 0, cbReturned, dwMem;
GetSystemInfo(&si);

for (dwMem = 0; dwMem<(DWORD)si.lpMaximumApplicationAddress;
dwMem+=mbi.RegionSize) {
cbReturned = VirtualQueryEx (GetCurrentProcess(), (LPCVOID)dwMem, &mbi,
sizeof(mbi));
if (cbReturned) {
if ((mbi.AllocationProtect & PAGE_EXECUTE_WRITECOPY) &&
(mbi.Protect & (PAGE_EXECUTE | PAGE_EXECUTE_READ |
PAGE_EXECUTE_READWRITE | PAGE_EXECUTE_WRITECOPY))) {

if (*(LPWORD)mbi.AllocationBase == IMAGE_DOS_SIGNATURE) {
IMAGE_DOS_HEADER *pDosHeader =
(IMAGE_DOS_HEADER *)mbi.AllocationBase;

if (pDosHeader->e_lfanew) {
IMAGE_NT_HEADERS32 *pNtHeader = (IMAGE_NT_HEADERS32 *)
((PBYTE)pDosHeader + pDosHeader->e_lfanew);

if (pNtHeader->Signature != IMAGE_NT_SIGNATURE)
continue;

// now you can examine of module loaded in current process
}
}
}
}
}

代码看起来像一个大循环。实际上,这是一个典型的应用程序,它进行了大约 200 次循环,因此在加载 EXE 所有依赖的 DLL 期间,可以非常快速地遍历根据 VirtualAllocEx 分配的所有 block 。

关于windows - 如何使用 VirtualAllocEx 为代码洞穴腾出空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3010741/

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