hasherezade/pe_to_shellcode
GitHub: hasherezade/pe_to_shellcode
将标准 PE 可执行文件转换为可像 shellcode 一样注入执行、同时仍保留有效 PE 格式的安全研究工具。
Stars: 2782 | Forks: 472
# pe_to_shellcode
[](https://ci.appveyor.com/project/hasherezade/pe-to-shellcode)
[](https://github.com/hasherezade/pe_to_shellcode/releases)
[](https://github.com/hasherezade/pe_to_shellcode/releases)
[](https://github.com/hasherezade/pe_to_shellcode/releases)
将 PE 转换,以便之后可以像普通的 shellcode 一样被注入。
(同时,输出文件依然是有效的 PE)。
支持 32 位和 64 位 PE *作者:[@hasherezade](https://github.com/hasherezade) & [@hh86](https://github.com/86hh)* ## 目标 该项目的目标是提供一种生成 PE 文件的可能性,这些文件可以以最小的工作量被注入。 它受到 Stephen Fewer 的 [ReflectiveDLLInjection](https://github.com/stephenfewer/ReflectiveDLLInjection) 的启发 —— 但不同之处在于,使用 pe2shc 你可以在编译后添加反射加载 stub。同时,PE 文件的头部经过了修改,你可以从缓冲区的最开头开始执行注入的缓冲区 —— 就像你处理 shellcode 那样。它会自动找到该 stub,并继续加载完整的 PE。 ## 项目范围 🟢 该 stub 仅支持 PE 格式的基本结构,例如: + 重定位 + 导入表 + TLS 回调(在执行入口点之前调用一次) 请记住,尽管这对于大多数 PE 文件来说已经足够了,但你遇到的一些可执行文件可能使用了 PE 格式的其他更复杂的方面。这意味着,**并非每个 PE 都能成功转换为 shellcode**。 🚫 当前不支持的元素示例: + 异常(如果你转换的可执行文件作为 shellcode 运行并抛出异常,将无法找到合适的异常处理程序,应用程序将崩溃) + 延迟加载导入(目前仅实现了基本的导入表支持) + MUI 文件(如果你转换的可执行文件期望某些 GUI 元素必须从 MUI 文件加载,它将无法正常工作) ## 构建 📦 ⚙️ 下载最新的 [发布版本](https://github.com/hasherezade/pe_to_shellcode/releases)。 ## 克隆 使用递归克隆来获取该仓库及其所有子模块: ``` git clone --recursive https://github.com/hasherezade/pe_to_shellcode.git ``` ## 如何使用 1. 使用 **pe2shc.exe** 转换你选择的 PE: ``` pe2shc.exe [output path*]
* - optional
```
如果 PE 被成功转换,**pe2shc** 会告诉你输出的保存位置:
```
[+] Saved to file:
```
例如
```
[+] Saved to file: test_file.shc.exe
```
2. 使用 **runshc.exe**(*) 运行输出文件,并检查转换是否顺利。
```
runshc.exe
```
(*)警告:请记住,使用与你转换的应用程序(32 或 64 位)位数相匹配的 **runshc** 版本 —— 否则应用程序将会崩溃!
3. 如果文件像原始 PE 一样运行,则证明转换成功!
现在你可以像使用 shellcode 一样使用转换后的 PE:将其注入到目标中并从缓冲区的开头执行。不需要额外的 PE 加载器。
同时,你可以继续将转换后的文件作为常规 PE 使用。
(同时,输出文件依然是有效的 PE)。
支持 32 位和 64 位 PE *作者:[@hasherezade](https://github.com/hasherezade) & [@hh86](https://github.com/86hh)* ## 目标 该项目的目标是提供一种生成 PE 文件的可能性,这些文件可以以最小的工作量被注入。 它受到 Stephen Fewer 的 [ReflectiveDLLInjection](https://github.com/stephenfewer/ReflectiveDLLInjection) 的启发 —— 但不同之处在于,使用 pe2shc 你可以在编译后添加反射加载 stub。同时,PE 文件的头部经过了修改,你可以从缓冲区的最开头开始执行注入的缓冲区 —— 就像你处理 shellcode 那样。它会自动找到该 stub,并继续加载完整的 PE。 ## 项目范围 🟢 该 stub 仅支持 PE 格式的基本结构,例如: + 重定位 + 导入表 + TLS 回调(在执行入口点之前调用一次) 请记住,尽管这对于大多数 PE 文件来说已经足够了,但你遇到的一些可执行文件可能使用了 PE 格式的其他更复杂的方面。这意味着,**并非每个 PE 都能成功转换为 shellcode**。 🚫 当前不支持的元素示例: + 异常(如果你转换的可执行文件作为 shellcode 运行并抛出异常,将无法找到合适的异常处理程序,应用程序将崩溃) + 延迟加载导入(目前仅实现了基本的导入表支持) + MUI 文件(如果你转换的可执行文件期望某些 GUI 元素必须从 MUI 文件加载,它将无法正常工作) ## 构建 📦 ⚙️ 下载最新的 [发布版本](https://github.com/hasherezade/pe_to_shellcode/releases)。 ## 克隆 使用递归克隆来获取该仓库及其所有子模块: ``` git clone --recursive https://github.com/hasherezade/pe_to_shellcode.git ``` ## 如何使用 1. 使用 **pe2shc.exe** 转换你选择的 PE: ``` pe2shc.exe
现在你可以像使用 shellcode 一样使用转换后的 PE:将其注入到目标中并从缓冲区的开头执行。不需要额外的 PE 加载器。
同时,你可以继续将转换后的文件作为常规 PE 使用。
标签:DNS 反向解析, PE文件, Shellcode生成, SSH蜜罐, UML, 端点可见性, 进程注入