【发布时间】:2021-10-03 09:03:02
【问题描述】:
我通过注入 dll 扫描进程内存并读取它的内存。 问题是我还读取了 dll 的内存。有人知道该怎么做吗?
【问题讨论】:
我通过注入 dll 扫描进程内存并读取它的内存。 问题是我还读取了 dll 的内存。有人知道该怎么做吗?
【问题讨论】:
使用GetModuleInformation,它可以接受HPROCESS 用于您的远程进程,也可以接受HMODULE 用于您注入的DLL,并在MODULEINFO 结构中返回以下信息:
typedef struct _MODULEINFO {
LPVOID lpBaseOfDll;
DWORD SizeOfImage;
LPVOID EntryPoint;
} MODULEINFO, *LPMODULEINFO;
因此您可以通过lpBaseOfDll 字段知道注入的DLL 的起始地址,通过lpBaseOfDll + SizeOfImage 知道结束地址。
这也适用于您当前进程中的 DLL,使用 GetCurrentProcess 和例如GetModuleHandle.
【讨论】:
DLLMain 中编写代码,该代码注册局部变量的地址 - 并推断堆栈信息。还有GetCurrentThreadStackLimits API,但 a) 它在早期版本的 Windows 中不可用,b) 它会返回单个线程的堆栈,这可能是也可能不是你想要的。