将PE转换为shellcode

作者:Sec-Labs | 发布时间:

pe_to_shellcode

转换 PE,以便它可以像普通 shellcode 一样被注入。
(同时,输出文件仍然是有效的 PE)。
支持 32 位和 64 位 PE

作者: @hasherezade & @hh86

项目地址

https://github.com/hasherezade/pe_to_shellcode

目标

该项目的目标是提供一种生成 PE 文件的可能性,这些文件可以轻松注入。 它的灵感来自 Stephen Fewer 的 ReflectiveDLLInjection - 但不同之处在于使用 pe2shc 您可以在编译后添加反射加载存根。 此外,PE 文件的标头经过修改,您可以从一开始就开始执行注入的缓冲区——就像您对 shellcode 所做的那样。 它会自动找到存根,并继续加载完整的 PE。

项目范围

🟢 Stub只支持PE格式的基本结构,例如:

  • 回调
  • 导入
  • TLS 回调(在执行入口点之前调用一次)

请记住,虽然对于大多数 PE 文件来说这已经足够了,但您遇到的一些可执行文件可能会使用 PE 格式的其他更复杂的方面。 这意味着, 并非每个 PE 都能成功转换为 shellcode

🚫 当前不支持的元素示例:

  • 异常(如果您转换的可执行文件将作为 shellcode 运行,并抛出异常,将找不到合适的异常处理程序,应用程序将崩溃)
  • 延迟加载导入(只实现了基本的导入表支持)
  • MUI 文件(如果您转换的可执行文件要求 GUI 的某些元素必须从 MUI 文件加载,它将无法工作)

构建

📦 ⚙️ 下载最新 版本

克隆

使用递归克隆将 repo 与所有子模块一起获取:

git clone --recursive https://github.com/hasherezade/pe_to_shellcode.git

如何使用它

  1. 使用 pe2shc.exe 转换您选择的 PE:

pe2shc.exe <path to your PE> [output path*]
* - optional

如果 PE 成功转换, pe2shc 会让您知道输出的保存位置:

[+] Saved to file: <converted file>

IE

[+] Saved to file: test_file.shc.exe

  1. 使用 runshc.exe (*) 运行输出文件并检查转换是否正常。

runshc.exe <converted file>

(*)警告:请记住使用位数 适合您转换后的应用程序(32 位或 64 位)的 runshc版本 - 否则应用程序将崩溃!

  1. 如果文件以原来的PE运行,则确认转换成功!
    现在您可以像使用 shellcode 一样使用转换后的 PE:将其注入目标并从缓冲区的开头执行。 不需要额外的 PE 加载程序。
    同时,您可以继续将转换后的文件作为常规 PE 使用。

标签:工具分享, shellcode生成工具