Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
sRDI — 反射式DLL注入的Shellcode实现。将DLL转换为位置无关的Shellcode。 | Kitploit
工具/GitHubGitHub/monoxgas/srdi
内存取证Payload生成漏洞利用IDS/IPS规避Shellcode后渗透利用渗透测试红队Shellcode 生成Payload 开发IDS/IPS规避 分类第 8 名
2.5k497664年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
Payload 开发 分类第 2 名
Payload生成 分类第 3 名
Shellcode 分类第 2 名
Shellcode 生成 分类第 3 名
GitHubmonoxgas/srdi

sRDI

反射式DLL注入的Shellcode实现。将DLL转换为位置无关的Shellcode。

查看仓库

sRDI - Shellcode 反射式DLL注入

sRDI 允许将 DLL 文件转换为位置无关的 shellcode。它试图成为一个功能完整的 PE 加载器,支持正确的节权限、TLS 回调和完整性检查。可以将其视为一个绑定了打包 DLL 的 shellcode PE 加载器。

功能通过两个组件实现:

  • C 项目,编译 PE 加载器实现(RDI)为 shellcode
  • 转换代码,将 DLL、RDI 和用户数据通过引导程序连接在一起

本项目包含以下元素:

  • ShellcodeRDI: 编译 DLL 加载器的 shellcode
  • NativeLoader: 必要时将 DLL 转换为 shellcode,然后注入内存
  • DotNetLoader: NativeLoader 的 C# 实现
  • Python\ConvertToShellcode.py: 就地转换 DLL 为 shellcode
  • Python\EncodeBlobs.py: 编码编译后的 sRDI blob 用于静态嵌入
  • PowerShell\ConvertTo-Shellcode.ps1: 就地转换 DLL 为 shellcode
  • FunctionTest: 导入 sRDI C 函数用于调试测试
  • TestDLL: 示例 DLL,包含两个导出函数,分别在加载时和加载后调用

DLL 无需使用 RDI 编译,但该技术是跨兼容的。

用例 / 示例

使用前,建议先了解反射式 DLL 注入及其用途。

使用 python 将 DLL 转换为 shellcode

root@kitploit:~
from ShellcodeRDI import *

dll = open("TestDLL_x86.dll", 'rb').read()
shellcode = ConvertToShellcode(dll)

使用 C# 加载器将 DLL 加载到内存

root@kitploit:~
DotNetLoader.exe TestDLL_x64.dll

使用 python 脚本转换 DLL 并使用 Native EXE 加载

root@kitploit:~
python ConvertToShellcode.py TestDLL_x64.dll
NativeLoader.exe TestDLL_x64.bin

使用 powershell 转换 DLL 并使用 Invoke-Shellcode 加载

root@kitploit:~
Import-Module .\Invoke-Shellcode.ps1
Import-Module .\ConvertTo-Shellcode.ps1
Invoke-Shellcode -Shellcode (ConvertTo-Shellcode -File TestDLL_x64.dll)

标志

PE 加载器代码使用 flags 参数来控制加载逻辑的各种选项:

  • SRDI_CLEARHEADER [0x1]:目标 DLL 的 DOS 头和 DOS 存根在加载时完全用零字节擦除(e_lfanew 除外)。这可能会在使用基地址作为伪 HMODULE 时导致标准 Windows API 出现问题。
  • SRDI_CLEARMEMORY [0x2]:在调用加载模块中的函数(DllMain 和任何导出)后,DLL 数据将从内存中清除。如果你期望继续执行模块外的代码(线程 / GetProcAddressR),这很危险。
  • SRDI_OBFUSCATEIMPORTS [0x4]:在开始 IAT 修补之前,模块中导入的顺序将被随机化。此外,标志的高 16 位可用于存储在处理下一个导入之前暂停的秒数。例如,flags | (3 << 16) 将在每次导入之间暂停 3 秒。
  • SRDI_PASS_SHELLCODE_BASE [0x8]:与将提供的用户数据传递给导出函数不同,sRDI 改为传递当前正在执行的 shellcode 块的基地址。这在更高级的模块中对于自我清理可能很有用。

构建

本项目使用 Visual Studio 2019 (v142) 和 Windows SDK 10 构建。python 脚本使用 Python 3 编写。

Python 和 Powershell 脚本位于:

  • Python\ConvertToShellcode.py
  • PowerShell\ConvertTo-Shellcode.ps1

构建项目后,其他二进制文件将位于:

  • bin\NativeLoader.exe
  • bin\DotNetLoader.exe
  • bin\TestDLL_<arch>.dll
  • bin\ShellcodeRDI_<arch>.bin

如果你想更新任何工具中的静态 blob:

root@kitploit:~
> python .\lib\Python\EncodeBlobs.py -h
usage: EncodeBlobs.py [-h] solution_dir

sRDI Blob 编码器

positional arguments:
  solution_dir  解决方案目录

optional arguments:
  -h, --help    显示此帮助信息并退出

> python lib\Python\EncodeBlobs.py C:\code\srdi

[+] 已更新 C:\code\srdi\Native/Loader.cpp
[+] 已更新 C:\code\srdi\DotNet/Program.cs
[+] 已更新 C:\code\srdi\Python/ShellcodeRDI.py
[+] 已更新 C:\code\srdi\PowerShell/ConvertTo-Shellcode.ps1

替代方案

如果你觉得我的代码不堪入目,或者只是在寻找一个替代的内存 PE 加载器项目,请查看以下项目:

  • https://github.com/fancycode/MemoryModule - 可能是最干净的 PE 加载器之一,很好的参考。
  • https://github.com/TheWover/donut - 想要转换 .NET 程序集?或者 JScript?
  • https://github.com/hasherezade/pe_to_shellcode - 生成多态 PE+shellcode 混合体。
  • https://github.com/DarthTon/Blackbone - 包含许多内存黑客/挂钩原语的大型库。

致谢

本项目的基础源自 Dan Staples 的“改进的反射式 DLL 注入” ,而后者又源自 Stephen Fewer 的原始项目。

将 C 代码编译为 shellcode 的项目框架取自 Mathew Graeber 的研究“PIC_BindShell”

下载工具