C++ PE 注入 - 来自远程位置的 EXE 文件(例如 HTTP)
C++ PE injection - EXE file from remote location (e.g. HTTP)
我是一名新手安全研究人员,试图使用滴管/暂存器来学习PE注入,非常像加密锁的操作。
我们正在为处理QRadar SIEM的蓝色团队设置消防演习,并希望在其上启动一些自定义恶意软件。
所以现在,对于我的问题:)。我理解 op PE 注入的一般概念,但我发现的几乎所有教程都注入了当前的 EXE(所以通常通过调用 GetModuleHandle(NULL))
我想知道您将如何从远程资源(例如 HTTP 下载)注入 EXE。 基本上我的目标是这样的:
- STAGER 文件将 EXE 下载到内存中
- 在进程 X 中使用 PE 方法注入 SPECR 文件
我不期望在这里得到完整的答案,但如果你能指出我正确的方向,那将是很好的:)。
请注意,此代码不会用于恶意目的。
此致敬意!
其实很简单。您需要做的就是将远程 EXE/DLL 下载到缓冲区中(即从内存中),从这一点开始,您有几个选择。
您最初需要检查 MZ 签名,以及它是有效的 PE 文件。您可以使用PIMAGE_NT_HEADERS
、检查 可选签名(如果有效的 PE 文件)和e_magicPIMAGE_DOS_HEADER
(MZ 签名)来执行此操作
现在的问题是,如果您希望注入 dll,从内存加载它,在其导出表中搜索给定函数,获取代码并在远程进程中执行 i,或者从内存中执行 EXE。
假设您只想获取图像的 ImageBase,正如您所说,您在线阅读了一些通过GetModuleHandle
讨论它的教程,您首先需要映射下载的缓冲区。
您可以通过以下方式执行此操作
CreateFileW
(用于读取)、CreateFileMapping
(从 createfile 传递句柄)、MapViewOfFile
(从 createfilemapping 传递返回的句柄)。
在此之后,您将从MapViewOfFile
获取基本映像地址。现在,您可以对文件执行许多操作,可以从内存中注入文件,也可以从内存中执行该文件。
您需要研究 PE 修正(导出和导入地址表功能)以及通过直接映像目录 RVA -> base 进行基本重定位。
请注意,如果您在映射文件后在远程进程中执行图像,请使用ZwQueueApcThread
注入方法而不是像RtlCreateUserThread/CreateRemoteThread
这样更沉闷的方法。
如果从内存执行代码。通过重定位修复偏移量后,请确保通过VirtualProtectEx
执行代码,可选ZwAllocateVirtualMemory
(传递PAGE_WRITECOPY
而不是PAGE_EXECUTE_READWRITE
)而不是ZwWriteVirtualMemory
-WriteProcessMemory
因为它更隐蔽!
另外,我相信你可以找出其他一些方法,这只是从我的头顶。
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 终端不会为C++文件创建.exe文件吗
- 在Windows中以.exe的形式运行c++
- Visual Studio mkl_link_tool.exe链接错误
- PrintWindow函数在notepad.exe中出错
- VSCode C++ 编译的exe感染了Win32:TrojanX-gen[Trj]
- 将返回值从 exe 传递到 bat,并将其传递给 C# 中的进程
- 获取当前正在运行的 exe 名称(不是路径)
- 从 exe 文件 (Visual Studio ) 启动时调试断言失败
- 1d.exe找不到SFML文件?
- VI工作室代码错误无法打开输出文件主.exe
- 如何为每个客户生成自定义 exe
- 使用参数在 C# 的C++上运行.exe
- 在 ******.exe 中0x00000000772CA267 (ntdll.dll) 处未处理的异常:0xC0000
- 如何在Visual Studio Code中重命名我的a.exe文件?
- 解析引用 |exe/dll vs lib
- Q没有管理权限的 exe 无法启动维护工具
- 如何定义自定义生成配置类型,其中通常是.exe的目标改为 DLL
- C++ PE 注入 - 来自远程位置的 EXE 文件(例如 HTTP)
- 区分 32 位和 cl.exe 生成的 64 位 PE 对象文件(Visual Studio C++)