首页  >  文章  >  后端开发  >  CreateProcess 可以直接从内存执行 EXE 而不将其保存到文件吗?

CreateProcess 可以直接从内存执行 EXE 而不将其保存到文件吗?

Susan Sarandon
Susan Sarandon原创
2024-11-02 13:05:02480浏览

Can CreateProcess Execute an EXE Directly from Memory Without Saving It to a File?

从内存缓冲区创建进程

问题:

可以对以下内容调用 CreateProcess存储在内存缓冲区中的 EXE,而不先将其写入文件?

背景:

在修复游戏崩溃时尝试绕过 DRM 延迟,一种方法试图从外部 EXE 中解密并启动真正的 EXE。

答案:

CreateProcess 确实可以在包含 EXE 的内存缓冲区上调用,从而允许它的执行无需事先写入文件。这些步骤包括:

  1. 使用带有 CREATE_SUSPENDED 标志的 CreateProcess 挂起进程。
  2. 使用 GetThreadContext 检索线程上下文,PEB 的 ImageBaseAddress 存储在 [EBX 8]。
  3. 比较挂起进程和内存中 EXE 的基地址和图像大小。
  4. 如果条件允许,使用 WriteProcessMemory 将内存中 EXE 写入挂起进程的内存。
  5. 取消映射原始图像,在挂起的进程中分配内存,如果条件不允许,则写入内存中的 EXE。
  6. 修补线程上下文中的基址和入口点。
  7. 恢复使用 ResumeThread 挂起进程。

以上是CreateProcess 可以直接从内存执行 EXE 而不将其保存到文件吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn