本技能是 .NET / C# 二进制逆向的作业规范,适用于分析和修改 .NET 托管程序。
【用途与适用范围】 当任务属于以下场景时优先使用:识别并逆向 .NET / C# 编译产物(托管 PE / .exe / .dll);分析红队 Sharp* 工具链(Rubeus、SharpHound、SharpShell 等);脱去 ConfuserEx、SmartAssembly、Babel、Eazfuscator、.NET Reactor 等壳;逆向 .NET loader / info-stealer / RAT 的解密与 C2 逻辑;对 C# 程序做 patch(改判断、改常量、keygen);分析 IL2CPP 之前的 Mono/Unity 托管层。
若目标是纯 native 二进制(C/C++/Go/Rust 编译、无 CLR),或 IL2CPP 编译后的 Unity 游戏、NativeAOT 产物,则应改用 native 逆向相关技能,因为它们是 native 代码,不走 dnSpy。
【核心原则】
- 先识别再下手:先确认是 .NET 托管程序(PE 头 CLR、#~ / #Strings 流、mscoree _CorExeMain),再决定走 dnSpy 而非 IDA。
- IL 优先于 C#:dnSpyEx 的 C# 反编译器会丢失或扭曲信息(编译器生成的状态机、async/await、yield),关键判断与 patch 必须切到 IL 编辑器,C# 视图只用于快速浏览。
- de4dot 先行:遇到混淆器先 de4dot 脱一轮再做静态分析,否则字符串/控制流全是乱的。
- MCP 联动:环境里若注册了 dnSpy MCP(dnspy_* 工具),优先走 MCP 面做 decompile / IL inspection,避免来回切 GUI。
- 证据化输出:脱混淆产物、提取的配置/C2/key、patch diff 都要落盘。
【工具链映射】 反编译 + 调试 + patch:dnSpyEx(带 IL 编辑器的 GUI,老 dnSpy 已停更,用 Ex 分支)。 轻量 CLI / headless 反编译:ILSpy(ilspycmd),适合批量、脚本化、Linux/macOS。 脱混淆:de4dot,ConfuserEx 全家桶、SmartAssembly 等主流壳的默认解。 混淆器识别:Detect It Easy (DIE) / file,先判断壳类型再决定 de4dot 参数。 编程化操作 IL:dnlib,可写 C# 脚本批量改 metadata / 字符串解密器。 AI 直接操作:dnSpy MCP,提供 dnspy_decompile / dnspy_inspect_il 等工具面。 前置条件:Windows 主机装 dnSpyEx + de4dot(choco 或 release);Linux/macOS 用 ilspycmd + dotnet runtime。
【六阶段工作流】
- Identify(识别 .NET):用 file、AssemblyName::GetAssemblyName、dnSpyEx 拖入、strings 搜索 mscoree/_CorExeMain/mscorlib 等方式确认托管身份。识别标志包括 PE 头 Data Directory[14] (CLR Runtime Header) 非零、mscoree.dll 导入 / _CorExeMain 入口、#~ / #Strings / #US / #GUID / #Blob metadata 流、mscorlib / System.Private.CoreLib 字符串。NativeAOT 例外:编译成 native,没有 CLR 头,但有 System.Private.CoreLib 字符串和重构过的类型元数据,这类走 native 逆向,本技能仅做识别提示。
- Detect(检测混淆器):用 DIE CLI 快速识别,或拖进 dnSpyEx 看是否大量乱码类名 / 控制流变形。常见混淆器包括 ConfuserEx(anti-tamper、控制流变形、字符串加密)、SmartAssembly(circular/string encoding、资源压缩)、Babel.NET(方法体加密、控制流)、Eazfuscator.NET(字符串/资源加密)、.NET Reactor(anti-tamper + necrobit)。
- Deobfuscate(脱混淆):de4dot target.exe -o target-clean.exe 默认自动识别大多数壳;自动识别失败时可指定类型(如 --type cfze、--type sa);多层混淆或报 unknown 时用 --detect 查看识别结果,可能要先 patch anti-tamper 再 de4dot。产出 target-clean.exe 供后续分析,保留原始样本做对照。
- Static Analyze(静态分析):dnSpyEx 加载脱壳后样本,C# 视图用于快速浏览类结构、方法签名、字符串定位;IL 视图用于关键判断、加密逻辑、状态机。找入口(Main / Startup / 模块初始化器 Module .cctor),找关键逻辑(搜 flag、password、verify、check、encrypt、http、Config),定位字符串后反向引用找到使用它的方法,再用 IL 视图看判断逻辑。
- Dynamic(动态调试):dnSpyEx 调试器可附加进程或启动调试,在关键方法下断点,观察运行时解密后的明文字符串、C2 地址与配置解密结果、异常驱动的控制流(anti-debug 常用 try/catch 隐藏真实路径)。.NET 动态调试比 native 友好,能直接看到对象值与字符串内容,优先动态而非死磕静态。
- Patch(按需修改):dnSpyEx 右键方法 → Edit Method (C#) 或 Edit IL;改判断(ldc.i4.0 → ldc.i4.1)、改常量、删除校验(nop 掉整段);File → Save Module → 替换原文件。IL patch 可靠性优于 C# patch,因为 C# 重编译可能失败(缺引用、语法不对),IL 编辑几乎不会失真。
【触发场景】 用户提到“.NET / C# 二进制逆向”、“C# 程序反编译”、“dnSpy 分析 / dnSpyEx patch”、“ConfuserEx / SmartAssembly / Babel 脱混淆 / 脱壳”、“Sharp* 工具分析”(Rubeus / SharpHound / SharpShell)、“.NET malware / loader / info-stealer 逆向”、“C# 程序 patch / keygen / 修改判断”时进入本技能。
【何时切出】 IL2CPP 编译的 Unity 游戏、NativeAOT 产物、纯 native PE(无 CLR)应切到 native 逆向相关技能;需要符号/函数批量迁移到别的版本可用 binary-diff;需要画攻击路径/调用链图可用 diagram-generator。
【参考文档】 references/obfuscators.md — 各混淆器脱混淆详解 + anti-tamper 绕过;references/common-workflow.md — 完整工作流、IL patch 可靠性、字符串解密器提取、状态机识别;references/sharp-tools.md — 红队 Sharp* 工具分析、工具安装矩阵、dnSpy MCP 集成、社区资源索引。
【任务完成自检】 确认过 CLR / 托管身份(或已切出本技能);混淆样本先 de4dot 或等价脱壳再深分析;关键逻辑用 IL 视图验证而非只看 C# 伪代码;产物(clean 样本 / 配置 / patch diff)落盘且可复现;提供下一步菜单或报告出口。