Heretek-RE/re-dotnet
GitHub: Heretek-RE/re-dotnet
面向 .NET 程序集逆向分析的 MCP 服务器,封装 AsmResolver 和 ILSpy 提供元数据枚举与 C# 反编译能力。
Stars: 0 | Forks: 0
# re-dotnet
用于 .NET assembly 分析的 MCP server。这是对 [AsmResolver](https://github.com/Washi1337/AsmResolver)(PE + .NET 元数据)和 [ICSharpCode.Decompiler / ILSpy](https://github.com/icsharpcode/ILSpy)(C# decompiler)的厂商中立封装。
## 为什么需要
其他的 RE-AI MCP server(`re-lief`、`re-rizin`、`re-capa`)处理原生的 PE、ELF、MachO、DEX、ART、OAT —— 但是**它们都没有读取 .NET CLI header** 或 ECMA-335 元数据表。一个以托管 .NET assembly 形式发送其 payload 的 `MonoLauncher` 风格的启动器对这些工具是不可见的;导入哈希为空,字符串表毫无信息量,rizin 只能看到原生的包装代码。
`re-dotnet` 填补了这一空白。它枚举 TypeDef / MethodDef / FieldDef,遍历 #US 字符串堆,并按需将单个类或方法反编译为 C#。
## 架构
MCP server 本身是纯 Python 的。繁重的工作由一个小型的 .NET 10 CLI 二进制文件 `re-dotnet-cli` 完成,该文件由 `src/re_dotnet/dotnet/Re.Dotnet.Cli/` 构建:
```
Claude Code (MCP stdio)
│
▼
re-dotnet server (Python, this directory)
│ subprocess.run(...)
▼
re-dotnet-cli (self-contained .NET 10 binary, single-file publish)
│
├─ AsmResolver 6.x (PE + .NET metadata, obfuscation-robust)
└─ ICSharpCode.Decompiler 9.x (C# decompiler)
```
这种子进程边界是刻意为之的:
- **不使用 `pythonnet`。** `pythonnet` 是一个脆弱的 ABI 桥梁,在每个 Python 次版本更新时都会崩溃。进程隔离则更加稳健。
- **不使用 Mono。** .NET 10 是唯一支持的 runtime。
- **单文件发布。** 该 CLI 是一个自包含的二进制文件;无需进行 `dotnet --info` 配置,无需 `DOTNET_ROOT` 环境变量,也不需要 GAC。
Python 包装器通过以下回退链来定位二进制文件(参见 `runner.py`):
1. `$RE_DOTNET_CLI_PATH`(用于测试的逃生舱)
2. `/bin/re-dotnet-cli`(install.sh 默认设置)
3. `src/re_dotnet/dotnet/.../bin/` 下的开发构建版本
4. `$PATH` 上的 `re-dotnet-cli`
## 工具
| 工具 | 功能 |
|---|---|
| `check_dotnet` | 健康检查 — 返回 .NET runtime + AsmResolver + Decompiler 版本 |
| `parse_assembly` | 枚举 TypeDef 行;返回 assembly header 加上每种类型一行 |
| `decompile_type` | 通过 ILSpy 将单个类反编译为 C# |
| `decompile_method` | 通过 ILSpy 将单个方法反编译为 C# |
| `list_strings` | 遍历字段默认常量字符串(#US 堆子集) |
| `get_entry_point` | 返回托管入口点(`::.cctor` 或 `Main`) |
## 安装
`./install.sh` 通过 `dotnet publish` 构建 .NET CLI,并将生成的二进制文件复制到 `servers/re-dotnet/bin/`。
要独立构建:
```
cd servers/re-dotnet/src/re_dotnet/dotnet/Re.Dotnet.Cli
dotnet publish -c Release -o ../../../../bin
```
要运行:
```
re-dotnet # stdio transport (default for MCP)
python -m re_dotnet # equivalent
```
## 要求
- .NET 10 SDK 或 runtime(`dotnet --version` ≥ 10.0)
- 2 GB 磁盘空间,用于存放 .NET SDK 和自包含的二进制文件
## 去混淆说明
ILSpy decompiler 可以为**未经过混淆的** assembly 生成整洁的 C#。对于经历过商业混淆(控制流平坦化、字符串加密、JIT-hooking)的二进制文件,decompiler 将会出现 `Unable to decompile ...` 错误。补救措施是首先运行 .NET 去混淆工具(开源工具 `de4dot` 可通过 shell 调用,GPL-3.0 许可证 —— RE-AI plugin 保持其进程隔离状态,从而使 plugin 自身的发行版保持纯净),然后对清理后的输出重新运行 `decompile_type` / `decompile_method`。
## 与 `re-leak-scan` 配合使用
一个调用遥测 endpoint(Sentry、Logstash、Confluence、Google Drive)的 .NET 风格启动器会将这些 URL 作为字段默认常量。对该 assembly 运行 `re-leak-scan` (T2.2),或者在此处调用 `list_strings` 并通过正则表达式过滤器筛选出这四类 endpoint。
标签:DAST, MCP, Python, URL提取, 云资产清单, 反编译, 恶意软件分析, 无后门, 逆向工具, 逆向工程