【发布时间】:2019-01-03 12:10:07
【问题描述】:
我正在尝试在不使用WriteProcessMemory() 函数的情况下编写另一个进程内存。
我正在调用VirtualAllocEx() 以使用CreateRemoteThread() 将数据传递给我的线程。
WriteMemoryInfo* m = (WriteMemoryInfo*)VirtualAllocEx(
hProc,
NULL,
1024,
MEM_COMMIT | MEM_RESERVE,
PAGE_READWRITE
);
m->addr = FinalAddress; // Problem
m->data = Data; // Problem
m->length = Size; // Problem
HANDLE threadID = CreateRemoteThread(
hProc,
NULL,
0,
(LPTHREAD_START_ROUTINE)RemoteThread,
m,
NULL,
NULL
);
问题是,我无法使用VirtualAllocEx() 写入新创建的内存,因为它不属于我的进程。解决方案是在此内存上使用WriteProcessMemory(),但这是我正在执行的功能。
如何在没有WriteProcessMemory() 的情况下初始化此内存(m 变量)?
【问题讨论】:
-
创建一个命名的内存映射文件,将信息写入其中,让您的远程线程打开该文件并读取信息。当然,不使用
WriteProcessMemory是没有意义的。 -
为什么你不想使用
WriteProcessMemory?这里有什么问题?您也可以创建部分(文件映射) - 首先在自身进程中映射它,初始化数据,然后在远程进程中映射它 -
@DavidHeffernan - 我们在这里不需要 named 部分。远程线程不需要打开它(也 - 该线程的代码将位于哪里?)我们可以(并且需要)自己在远程进程中映射此部分。我也认为该线程的代码也需要在部分内部(如果它尚未加载以处理 dll,我对此表示怀疑)
-
@RbMm 如何将其映射到远程进程?是否使用受支持的 API?
-
@DavidHeffernan
ZwMapViewOfSection支持不少于代码注入