运行暂停的进程,但在继续之前修改了内存映像的某些内容

时间:2013-04-18 21:36:31

标签: c winapi

我需要帮助才能做到这一点: 我有一个可执行文件,里面有一些空终止的字符串。 我想执行它暂停,但在继续之前,我需要在缓冲区的第一个字符中放入一个NULL,让它无法使用。我需要做什么步骤。?

我只有前三行:

PROCESS_INFORMATION pi;
STARTUPINFO si;
memset(&si, 0, sizeof(si));
CreateProcess(0, "app.exe", NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi);

但接下来,我需要读取进程映像的内存并修改它吗?

我需要使用ReadProcessMemory吗?然后,我如何得到基地址,我需要什么类型的缓冲区?

任何帮助请完成此任务。

1 个答案:

答案 0 :(得分:1)

是的,您应该使用pi.hProcess的ReadProcessMemory(它是您新创建的可执行文件的句柄) 但是在你尝试读/写之前,你必须明白,当你在挂起状态下创建进程时,它没有完全加载(你的缓冲区,代码等......还无法加载!)但你可以手动加载PE在内存中,你必须编写自己的PE Loader。此外,基地址也是一样的。例如,如果您的可执行文件(将以挂起模式执行)的基址为0x400000,那么对于新进程它将是相同的。

祝你好运。

编辑: 关于你需要什么类型的缓冲区,你必须以某种方式"标记"获取实际地址的缓冲区。 (提示:用随机字符填充)。