将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
如何使用它
- 使用 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
- 使用 runshc.exe (*) 运行输出文件并检查转换是否正常。
runshc.exe <converted file>
(*)警告:请记住使用位数 适合您转换后的应用程序(32 位或 64 位)的 runshc版本 - 否则应用程序将崩溃!
- 如果文件以原来的PE运行,则确认转换成功!
现在您可以像使用 shellcode 一样使用转换后的 PE:将其注入目标并从缓冲区的开头执行。 不需要额外的 PE 加载程序。
同时,您可以继续将转换后的文件作为常规 PE 使用。
标签:工具分享, shellcode生成工具