我试图不使用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()
,但这是我正在执行的功能。
如何在没有m
的情况下初始化此内存(WriteProcessMemory()
变量)?
答案 0 :(得分:1)
CreateRemoteThread()
和VirtualAllocEx(
)将被归类为与WriteProcessMemory()
一样危险,如果您正在使用它们,则最好也使用WriteProcessMemory()
。
lpParameter
的{{1}}参数采用指向要传递给函数的变量的指针。
如果您不想使用CreateRemoteThread()
,则可以使用命令行参数启动该过程,将您想用于WriteProcessMemory()
的任何内容作为命令行参数传递。它会存在于目标进程中,但该进程只会忽略它。
然后您可以模式扫描该变量以获取地址,然后将该地址作为lpParameter
变量传递。
我的朋友timb3r与我分享了这个巧妙的技巧。