从内存缓冲区创建进程
问题:
可以对以下内容调用 CreateProcess存储在内存缓冲区中的 EXE,而不先将其写入文件?
背景:
在修复游戏崩溃时尝试绕过 DRM 延迟,一种方法试图从外部 EXE 中解密并启动真正的 EXE。
答案:
CreateProcess 确实可以在包含 EXE 的内存缓冲区上调用,从而允许它的执行无需事先写入文件。这些步骤包括:
- 使用带有 CREATE_SUSPENDED 标志的 CreateProcess 挂起进程。
- 使用 GetThreadContext 检索线程上下文,PEB 的 ImageBaseAddress 存储在 [EBX 8]。
- 比较挂起进程和内存中 EXE 的基地址和图像大小。
- 如果条件允许,使用 WriteProcessMemory 将内存中 EXE 写入挂起进程的内存。
- 取消映射原始图像,在挂起的进程中分配内存,如果条件不允许,则写入内存中的 EXE。
- 修补线程上下文中的基址和入口点。
- 恢复使用 ResumeThread 挂起进程。
以上是CreateProcess 可以直接从内存执行 EXE 而不将其保存到文件吗?的详细内容。更多信息请关注PHP中文网其他相关文章!