工具介绍
将PE文件转换为可以像普通shellcode一样注入的形式(同时,输出文件仍然是一个有效的PE文件)。支持32位和64位的PE文件。
目标
这个项目的目的是提供一种可能性,能够以最小的努力生成可以被注入的PE文件。它受到Stephen Fewer的ReflectiveDLLInjection的启发,但不同之处在于,使用pe2shc,你可以在编译后添加反射加载桩(stub)。此外,PE文件的头部被修改为可以从注入缓冲区的最开始处直接执行——就像处理shellcode一样。它会自动找到桩(stub),并继续加载完整的PE文件。
🟢 该桩(stub)仅支持PE格式的基本结构,例如:
-
重定位(relocations)
-
导入表(imports)
-
TLS回调(在执行入口点之前调用一次)
请注意,尽管对于大多数PE文件来说,这些功能已经足够,但你可能会遇到一些使用了PE格式更复杂特性的可执行文件。这意味着,并非所有的PE文件都能成功转换为shellcode。
🚫 目前不支持的元素示例:
-
异常处理(如果你转换的可执行文件作为shellcode运行并抛出异常,将无法找到相应的异常处理器,应用程序将会崩溃)
-
延迟加载导入(仅实现了基本的导入表支持)
-
MUI文件(如果你转换的可执行文件需要从MUI文件加载某些GUI元素,将无法正常工作)
构建版本
📦 ⚙️ 下载最新版Release。
克隆
使用递归克隆以获取包含所有子模块的仓库:
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>
2.使用 runshc.exe(*)
来运行输出文件并检查转换是否成功。
runshc.exe <converted file>
(*)警告:请记得使用与您转换后的应用程序位数(32位或64位)相匹配的runshc
版本,否则应用程序将会崩溃!
3.如果文件能够像原始PE一样运行,这就确认了转换是成功的!现在您可以像使用shellcode一样使用转换后的PE:将其注入到目标进程中,并从缓冲区的开头开始执行。无需额外的PE加载器。同时,您仍然可以将转换后的文件作为普通的PE文件使用。
原文始发于微信公众号(风铃Sec):工具集:pe_to_shellcode【将PE文件转换为shellcode】
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论