在没有WriteProcessMemory

时间:2019-01-03 12:10:08

标签: c winapi

我试图不使用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()变量)?

1 个答案:

答案 0 :(得分:1)

CreateRemoteThread()VirtualAllocEx()将被归类为与WriteProcessMemory()一样危险,如果您正在使用它们,则最好也使用WriteProcessMemory()

lpParameter的{​​{1}}参数采用指向要传递给函数的变量的指针。

如果您不想使用CreateRemoteThread(),则可以使用命令行参数启动该过程,将您想用于WriteProcessMemory()的任何内容作为命令行参数传递。它会存在于目标进程中,但该进程只会忽略它。

然后您可以模式扫描该变量以获取地址,然后将该地址作为lpParameter变量传递。

我的朋友timb3r与我分享了这个巧妙的技巧。