使用 CreateProcess 执行内存中的 EXE
简介:
创建进程CreateProcess 中的内存缓冲区提出了一个独特的挑战。本文探讨了一种允许您执行此操作的方法,无需在执行前将可执行文件写入文件。
背景:
在游戏行业,分发未加密的可执行文件可能会导致 DRM 规避。为了解决这个问题,游戏开发者经常将加密的 EXE 发送给发行商,发行商在将其发布给玩家之前使用专有的 DRM 对其进行包装。
创建修补解决方案:
当崩溃发生在 EXE 中,可能需要几天或几周的时间才能通过 DRM 渠道分发补丁。为了加快修补过程,开发人员可以将原始 EXE 嵌入加密的数据文件中。这样可以在不影响 DRM 的情况下轻松修补。
实现:
解决方案涉及使用带有 CREATE_SUSPENDED 的 CreateProcess 从内存中的 EXE 创建进程 旗帜。该标志允许在执行之前有时间修改挂起的进程。
检索进程信息:
通过获取挂起进程的线程上下文,可以访问进程环境块(PBE)结构。 PBE 包含图像的基址,这对于进一步操作至关重要。
加载内存中 EXE:
一旦获得基址,您就可以可以使用WriteProcessMemory将内存中的EXE加载到挂起进程的内存空间中。但是,可能需要根据大小和对齐差异调整对齐或分配额外的内存。
修补和执行:
要完成该过程,请修补基础将内存中 EXE 的地址写入挂起进程的 PBE 中,并使用新的入口点更新线程上下文。最后,使用 ResumeThread 从内存中的 EXE 恢复执行修改后的进程。
以上是如何使用 CreateProcess 执行内存中 EXE?的详细内容。更多信息请关注PHP中文网其他相关文章!