onedays12/Convert2Shellcode

GitHub: onedays12/Convert2Shellcode

一款将 EXE/DLL 转换为位置无关 shellcode 的工具,聚焦 RDI 技术的多种实现以解决 PE 文件内存加载与执行的需求。

Stars: 41 | Forks: 6

[English](README.md) | [中文](README_zh.md) # 介绍 MASM 汇编中实现的两种 SRDI 类型——**前向式 RDI** 与 **后向式 RDI**——可以将 EXE/DLL 转换为位置无关的 shellcode。 **嵌入式 RDI**(改进变体)仅支持 DLL 到 shellcode 的转换。该 DLL 必须导出一个加载器函数(例如 `ReflectiveLoader` 或类似 `HahaLoader` 的自定义名称)。尽管对于不熟悉 RDI 的实践者来说颇具挑战性,但其简洁性使其已被 C2 框架广泛采用。 **当前 SRDI 限制**: 1. EXE 的 `main` 或 `wmain` 可以带有参数。 2. DLL 的 `DllMain` 必须遵循 Microsoft 的官方规范。 3. 不支持用 C# 编写的 EXE/DLL。 4. 仅支持 x64 架构。 **嵌入式 RDI 特性**: 1. 仅支持 DLL 转换。 2. 需要一个导出的加载器函数(名称可自定义,例如 `HahaLoader`)。 # 项目结构 Convert2Shellcode - `Convert2Shellcode_embed.cpp`:C++ 版本,使用改进的 RDI(嵌入式)将 DLL 转换为 shellcode - `Convert2Shellcode_embed.go`:Go 版本,使用改进的 RDI(嵌入式)将 DLL 转换为 shellcode - `Convert2Shellcode_front.cpp`:C++ 版本,使用前向式 RDI 将 EXE/DLL 转换为 shellcode - `Convert2Shellcode_front.go`:Go 版本,使用前向式 RDI 将 EXE/DLL 转换为 shellcode - `Convert2Shellcode_post.cpp`:C++ 版本,使用后向式 RDI 将 EXE/DLL 转换为 shellcode - `Convert2Shellcode_post.go`:Go 版本,使用后向式 RDI 将 EXE/DLL 转换为 shellcode 调试 - `DebugForRDI.asm`:为调试和开发 RDI 创建的 ASM 文件,功能已验证 - `Sever.py`:Python 编写的 TCP 服务器,配合 `DebugForRDI.asm` 使用 SRDI Asm - `RDI_front.asm`:前向式 RDI shellcode - `RDI_post.asm`:后向式 RDI shellcode 测试 - `ReflectiveDLL.cpp`:带有导出 `ReflectiveLoader` 函数的 DLL 源代码 - `ReflectiveDLL.dll`:已编译的带有导出 `ReflectiveLoader` 函数的 DLL 二进制文件 - `stager_x64_reverseTcp.asm`:类似 Cobalt Strike 的 stager;运行 `Sever.py` 启动服务器后,执行此 ASM 以获取/执行载荷 - `Test_for_dll.cpp`:测试 DLL 源代码 - `Test_for_dll.dll`:测试 DLL 二进制文件 - `Test_for_exe.cpp`:测试 EXE 源代码 - `Test_for_exe.exe`:测试 EXE 二进制文件 # 使用方法 ``` 1.Convert2Shellcode_post.exe [Output File Path] 2.Convert2Shellcode_post.exe [Output File Path] 3.Convert2Shellcode_embed.exe [Output File Path] [The Export Function Name of Loader] ``` 示例 ``` PS C:\Users\Xxxxxxxx\Desktop\Convert2Shellcode_v1.0> .\Convert2Shellcode_front.exe .\mimikatz.exe ╔══════════════════════════════════════════════════════════════════════════════════════╗ ║ Convert2Shellcode_front ║ ║------------------------------------------------------------------------------------- ║ ║ Function: Use front-style RDI to convert EXE/DLL into position-independent shellcode ║ ║ Author:oneday ║ ║ Compilation Date:Jun 12 2025 21:29:52 ║ ╚══════════════════════════════════════════════════════════════════════════════════════╝ [+] Successfully opened . [*] File size is 1355264 [+] Memory allocation successful, address is 0x4bc9b040 [*] 1355264 bytes read into memory [+] Memory allocation successful, address is 0x4bdf9040 [+] Successfully generated shellcode file: s (Size: 1356147 bytes) ``` 使用 runshc64.exe 配合 pe2shellcode 进行验证:[hasherezade/pe_to_shellcode: Converts PE into a shellcode](https://github.com/hasherezade/pe_to_shellcode),或您也可以编写自己的加载器。 ![](https://images-of-oneday.oss-cn-guangzhou.aliyuncs.com/images/2025/06/09/19-07-36-0b50c72fe124b9742c6fec8c67ce04cf-20250609190736-4d79d7.png) # 更多信息 如果您对实现细节感兴趣,可以查看我撰写的文章:[从SRDI原理剖析再到PE2Shellcode的实现-先知社区](https://xz.aliyun.com/news/18239) 我的博客:[关于这个博客 | onedaybook](https://oneday.gitbook.io/onedaybook) # 待办事项 **我将持续维护该项目,重点关注以下关键点:** 1. **添加 x86 支持** 2. **引入高级特性**,例如支持用户数据、混淆 PE 头等等。 3. **添加 .NET 程序集支持** 4. **增强 RDI 功能**,包括延迟导入、导出转换等。 5. **进一步减小 SRDI shellcode 体积** 6. **修复错误并处理社区反馈的问题** # 免责声明 本工具仅供教育和研究用途。旨在供安全专业人员在合法授权的任务中使用。作者不对本软件的任何滥用负责。用户必须确保在对该工具进行任何系统操作之前已获得适当授权。 另外,我已不再从事安全领域工作,请勿追踪。
标签:C++, C2框架, DLL转换, EXE转换, Go, HahaLoader, Loader导出函数, MASM汇编, RDI反射加载, ReflectiveLoader, Ruby工具, Shellcode生成, SRDI, T1050, T1055, x64, 云资产清单, 代码转换, 位置无关Shellcode, 前向RDI, 反射DLL注入, 后向RDI, 安全学习资源, 安全报告生成, 嵌入式RDI, 数据擦除, 日志审计, 自动回退, 逆向工具, 逆向工程