我在程序的进程中运行了这个线程。线程应该读取这个过程'如果发生任何禁止代码注入,则程序存储器检测。现在我如何访问进程的程序存储器?
可以使用吗?ReadProcessMemory();
函数,如果我使用ALL_ACCESS标志获取进程句柄,则读取程序存储器? 还有一种方法可以搜索这个程序存储器,以便我可以将这种内存扫描限制为几种特定的感兴趣方法,或者检测特定方法的基址和长度吗?
答案 0 :(得分:1)
是的,如果您获得具有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);
}
您可以从此处找到许多不同的图案扫描功能来完成作业。