从内存缓冲区创建进程
在这篇文章中,我们将探索一种直接从内存缓冲区生成进程的技术,而不需要文件存储。这可能是涉及代码注入或安全修补的有用场景,例如在提供的背景故事中。
技术分解
Windows 为 CreateProcess API 提供了 CREATE_SUSPENDED 标志,允许进程保持挂起状态,直到调用 ResumeThread 函数。此窗口提供了在执行之前操作进程内存和上下文的机会。
-
挂起并检查进程:使用 CreateProcess(CREATE_SUSPENDED) 挂起进程并使用以下命令检索挂起线程的上下文GetThreadContext.
-
识别基址: EBX 寄存器将包含指向进程环境块 (PBE) 结构的指针。 ImageBaseAddress 可以在 PBE 内的偏移 8 处找到。
-
准备内存中 EXE:如果挂起进程和内存中 EXE 的基地址与内存中的相匹配EXE 小于或等于大小,使用 WriteProcessMemory 将其直接写入挂起进程的内存。
-
需要魔法:如果不满足步骤 3 中的条件,则取消映射原始映像 ( ZwUnmapViewOfSection),使用 VirtualAllocEx 分配内存,并使用 WriteProcessMemory 写入内存中 EXE。
-
修补 PEB 和线程上下文: 使用内存中 EXE 的基地址更新挂起进程的 ImageBaseAddress ,修补线程上下文的 EntryPoint 地址,并使用 SetThreadContext 保存更改的上下文。
-
恢复执行:使用 ResumeThread 恢复挂起的进程以执行内存中的 EXE。
结论
通过执行以下步骤,可以从内存缓冲区创建进程,从而为代码注入和安全修补场景提供灵活性。
以上是如何在没有文件存储的情况下直接从内存缓冲区创建进程?的详细内容。更多信息请关注PHP中文网其他相关文章!