Communitygithub.com

dotnet-reverse

.NET / C# 二进制逆向。当目标是 .NET assembly(PE 头含 CLR、.exe/.dll 托管程序)、C# 编译产物(含 NativeAOT)、红队 Sharp* 工具(Rubeus / SharpHound / SharpShell 等)、.NET 混淆程序(ConfuserEx / SmartAssembly / Babel / Eazfuscator)、.NET loader / info-stealer / 套壳 malware 时使用。优先用 dnSpyEx + de4dot,需要 AI 直接操作时联动 dnSpy MCP。不用于纯 native 二进制(走 reverse-engineering / ida-reverse)。

dotnet-reverse とは?

このスキルは、.NET / C# バイナリリバースエンジニアリングのための包括的なガイドです。dnSpyEx と de4dot を中心としたツール連携により、ConfuserEx や SmartAssembly など主要な .NET 難読化ツールの脱難読化、Sharp* ツール群の解析、.NET マルウェアの C2 ロジックや情報窃取機能の解明、さらには IL パッチによるプログラム改変までをカバーします。C# ビューだけでなく必ず IL ビューで検証することで、状態機械や async/await などの情報欠落を防ぎます。また、dnSpy MCP との連携により AI が直接操作できるため、効率的な解析が可能です。なお、NativeAOT や IL2CPP など、ネイティブコードにコンパイルされた .NET アプリケーションには適用されず、その場合は reverse-engineering/ 系スキルにルーティングされます。

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/zhaoxuya520/reverse-skill/tree/main/skills/dotnet-reverse

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

.NET / C# 逆向作業規範

ACTION REQUIRED(読んですぐ実行)

  1. NOW: DIE/file/CLR ヘッダで対象が .NET マネージドか確認(そうでない場合は ida-reverse/ / reverse-engineering/ に SWITCH)
  2. NOW: 難読化が疑われる場合 → 先に de4dot で脱難読化し、*-clean.exe を出力、元のサンプルは保持
  3. NEXT: dnSpyEx(または dnSpy MCP / ilspycmd)静的解析:C# ブラウズ + IL ビューで重要な判定を確認
  4. ACT: 平文/C2 が必要な場合は動的デバッグ;ロジック変更が必要な場合は IL patch を C# 再コンパイルより優先
  5. フェーズ終了時にユーザに 3~6 項目の次のメニューを提示(レポート出力を含む)

適用範囲

以下のシナリオに該当する場合、本スキルを優先して使用:

  • .NET / C# コンパイル成果物(マネージド PE / .exe / .dll)の識別とリバースエンジニアリング
  • レッドチーム Sharp* ツールチェーン(Rubeus、SharpHound、SharpShell など)の解析
  • ConfuserEx / SmartAssembly / Babel / Eazfuscator / .NET Reactor 等の難読化除去
  • .NET loader / info-stealer / RAT の復号と C2 ロジックのリバースエンジニアリング
  • C# プログラムへのパッチ(判定変更、定数変更、keygen)
  • IL2CPP 前の Mono/Unity マネージド層の解析(注意:IL2CPP コンパイル後はネイティブとなり reverse-engineering/ + seed-014 を利用)

対象が純粋なネイティブバイナリ(C/C++/Go/Rust コンパイル、CLR なし)の場合は、reverse-engineering/、ida-reverse/、radare2/ を使用してください。

コア原則

  • まず識別、次に着手:.NET マネージドプログラムであることを確認(PE ヘッダの CLR + #~ / #Strings ストリーム + mscoree _CorExeMain)してから、dnSpy か IDA かを決定
  • C# よりも IL を優先:dnSpyEx の C# 逆コンパイラは情報を失ったり歪めたりする(コンパイラ生成のステートマシン、async/await、yield)。重要な判定やパッチは必ず IL エディタで行い、C# ビューはクイックブラウズ専用
  • de4dot を先に:難読化ツールに遭遇したら、まず de4dot で一度脱難読化してから静的解析を開始。さもないと文字列や制御フローがすべて乱れたまま
  • MCP 連携:環境に dnSpy MCP(dnspy_* ツール)が登録されている場合、decompile / IL inspection は MCP 経由で行い、GUI の行き来を減らす
  • 証拠化出力:脱難読化成果物、抽出した設定/C2/key、patch diff はすべてファイルに保存

ツールチェーンマッピング

能力推奨ツール備考
逆コンパイル + デバッグ + patchdnSpyEx最強、唯一の IL エディタ付き GUI。旧 dnSpy は更新停止中、Ex ブランチを使用
軽量 CLI / headless 逆コンパイルILSpy (ilspycmd)バッチ処理、スクリプト、Linux/macOS に最適
脱難読化de4dotConfuserEx ファミリー、SmartAssembly など主要シェルのデフォルト解除ツール
難読化ツール識別Detect It Easy (DIE) / fileシェルの種類を先に判断してから de4dot パラメータを決定
プログラマブルな IL 操作dnlibC# スクリプトでメタデータ/文字列復号器を一括変更
AI 直接操作dnSpy MCPdnspy_decompile / dnspy_inspect_il などのツール面

前提:Windows ホストに dnSpyEx + de4dot をインストール(choco またはリリース版);Linux/macOS では ilspycmd + dotnet runtime を使用。詳細は references/sharp-tools.md のインストールマトリックスを参照。

六段階ワークフロー

1. Identify(.NET の識別)

対象がマネージドプログラムであることを確認し、ネイティブ PE を .NET として解析しない:

# Windows
file target.exe                       # "PE32 executable ... for MS Windows" だけでは不十分
# 重要:CLR の有無を確認
powershell -c "[System.Reflection.AssemblyName]::GetAssemblyName('target.exe')"
# または
dnSpyEx に直接ドラッグ&ドロップ ―― 開ければマネージド

# 汎用
strings target.exe | grep -iE "mscoree|_CorExeMain|mscorlib|System\."

.NET 識別のシグナル:

  • PE ヘッダ Data Directory[14] (CLR Runtime Header) が非ゼロ
  • mscoree.dll のインポート / _CorExeMain エントリポイント
  • #~、#Strings、#US、#GUID、#Blob メタデータストリーム
  • mscorlib / System.Private.CoreLib 文字列

NativeAOT の例外: ネイティブにコンパイルされ、CLR ヘッダはないが、System.Private.CoreLib 文字列と再構築された型メタデータを持つ。これらは reverse-engineering/(IDA/r2)で扱い、本スキルでは識別のヒントのみ提供。

2. Detect(難読化ツールの検出)

# DIE で高速識別
diec target.exe                        # Detect It Easy CLI
# または dnSpyEx にドロップし、クラス名の乱れや制御フローの変形が多いか確認

よくある難読化ツール → 脱難読化戦略(詳細は references/obfuscators.md):

難読化ツール特徴de4dot 処理
ConfuserEx (1.0.0 / 2.x)<module> anti-tamper、制御フロー変形、文字列暗号化de4dot target.exe で通常自動識別
SmartAssemblycircular/string encoding、リソース圧縮de4dot target.exe
Babel.NETメソッド本文の暗号化、制御フローde4dot target.exe
Eazfuscator.NET文字列/リソースの暗号化de4dot、一部のバージョンでは手動対応が必要
.NET Reactoranti-tamper + necrobitde4dot、新バージョンでは失敗する可能性あり、手動対応が必要

3. Deobfuscate(脱難読化)

# de4dot はほとんどのシェルを自動識別
de4dot target.exe -o target-clean.exe

# タイプ指定(自動識別失敗時)
de4dot --type cfze target.exe          # ConfuserEx
de4dot --type sa target.exe            # SmartAssembly

# 多層難読化 / de4dot が unknown の場合
de4dot --detect target.exe             # 何と認識されるか確認
# 場合によっては先に anti-tamper パッチを当ててから de4dot(references/obfuscators.md 参照)

出力:target-clean.exe、以後の解析ではこれを使用。元のサンプルは比較用に保持する。

4. Static Analyze(静的解析)

dnSpyEx で脱難読化後のサンプルをロード:

  • C# ビュー:クラス構造、メソッドシグネチャ、文字列を素早くブラウズ(位置特定用)
  • IL ビュー:重要な判定、暗号化ロジック、ステートマシンは必ず IL で確認(右クリック → Edit IL または IL ビュー)
  • エントリポイントを探す:Main / Startup / モジュール初期化子 (Module .cctor)
  • 重要なロジックを探す:flag、password、verify、check、encrypt、http、Config などで検索
文字列を特定 → 逆参照 → そのメソッドを特定 → IL ビューで判定ロジックを確認

5. Dynamic(動的デバッグ)

dnSpyEx デバッガ:プロセスへのアタッチ / デバッグ開始、重要なメソッドにブレークポイントを設定し、実行時に観察:

  • 復号後の平文文字列(多くの難読化ツールは実行時に文字列を復号する)
  • C2 アドレス、設定の復号結果
  • 例外駆動の制御フロー(アンチデバッグでは try/catch で真のパスを隠すことが多い)

.NET の動的デバッグはネイティブよりもはるかに親しみやすい ―― オブジェクトの値や文字列を直接見ることができる。静的解析にこだわらず動的解析を優先する。

6. Patch(必要に応じて変更)

dnSpyEx → メソッドを右クリック → Edit Method (C#) または Edit IL
  - 判定の変更:ldc.i4.0 → ldc.i4.1(false→true)
  - 定数の変更:文字列/数値を直接編集
  - チェックの削除:該当ブロックを nop に
File → Save Module → 元のファイルを置き換え

IL patch の信頼性 > C# patch:C# の再コンパイルは失敗することがある(参照不足、構文エラー)が、IL 編集はほぼ歪みがない。詳細は references/common-workflow.md を参照。

トリガーシナリオルーティング

ユーザが以下のような発言をした場合、本スキルに移行:

  • ".NET / C# バイナリリバースエンジニアリング" / "C# プログラムの逆コンパイル"
  • "dnSpy 解析" / "dnSpyEx patch"
  • "ConfuserEx / SmartAssembly / Babel の脱難読化 / 脱シェル"
  • "Sharp* ツール解析"(Rubeus / SharpHound / SharpShell)
  • ".NET malware / loader / info-stealer のリバースエンジニアリング"
  • "C# プログラムの patch / keygen / 判定変更"

切り替えタイミング

  • IL2CPP コンパイルされた Unity ゲーム → reverse-engineering/ + seed-014_unity-il2cpp-reverse.md(IL2CPP はネイティブ、dnSpy は使わない)
  • NativeAOT 成果物 → reverse-engineering/(同上、ネイティブ)
  • 純粋なネイティブ PE(CLR なし)→ reverse-engineering/ / ida-reverse/
  • シンボル/関数の一括移行が必要 → binary-diff/
  • 攻撃パス/コールチェーン図の作成が必要 → diagram-generator/

ルーティングコンテキスト

上流エントリ: skills/SKILL.md(全体制御)、routing.md 下流出口:

  • IL2CPP / NativeAOT(ネイティブ)→ reverse-engineering/
  • 深いネイティブ .so/.dll セグメント解析 → ida-reverse/ / radare2/
  • AI が dnSpy を直接操作する必要がある場合 → dnSpy MCP を登録し連携(references/sharp-tools.md 参照)

同一階層の関連モジュール:

  • reverse-engineering/languages-compiled.md(.NET 概要から本モジュールを参照)
  • apk-reverse/(Xamarin/MAUI Android リバースから C# 層を見るために本モジュールに切り替え可能)

参考ドキュメント

  • references/obfuscators.md — ConfuserEx / SmartAssembly / Babel / Eazfuscator / .NET Reactor の脱難読化詳細 + anti-tamper バイパス
  • references/common-workflow.md — 完全ワークフロー、IL patch の信頼性、文字列復号器の抽出、ステートマシン識別
  • references/sharp-tools.md — レッドチーム Sharp* ツール解析、ツールインストールマトリックス、dnSpy MCP 統合、コミュニティリソースインデックス

タスク完了セルフチェック

  • CLR / マネージドの身分を確認したか(または本スキルから SWITCH したか)?
  • 難読化サンプルは最初に de4dot / 同等の脱難読化を行ってから深い解析をしたか?
  • 重要なロジックは IL ビューで検証したか(C# 疑似コードだけを見ていないか)?
  • 成果物(クリーンサンプル / 設定 / patch diff)はファイルに保存され、再現可能か?
  • 次のメニューまたはレポート出力を提供したか?

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

api-security

Use for authorized security assessment of REST, GraphQL, WebSocket, or SOAP APIs, including discovery, authentication, authorization, rate-limit, and CI/CD testing.

apk-reverse

在 CLI 环境下做 Android APK 逆向时使用。适用于 APK 解包、Java 反编译、smali 修改、重打包、Frida 动态 Hook,以及按需切换到 so/native 分析。优先使用本机已安装的 jadx、apktool、frida、adb、ida-reverse、radare2。

attack-chain

Use for authorized multi-stage attack-path planning and orchestration when a task spans reconnaissance, initial access, privilege escalation, lateral movement, or impact assessment. Route single-stage tasks directly to their specialist skill.

binary-diff

|

binary-ninja-reverse

Use for authorized binary analysis in Binary Ninja, including HLIL/MLIL/LLIL inspection, strings/imports/exports, cross-references, types, patch review, Python API automation, and optional Binary Ninja MCP or localhost HTTP integration.

browser-automation

|

browser-extension-reverse

Use for authorized reverse engineering of browser extensions (Chrome/Firefox) including manifest analysis, background workers, and extension-based credential or traffic logic recovery.

case-review

Reviews a reverse-skill case package for scope readiness, Evidence to Finding to Path traceability, work item coverage, timeline references, and optional artifact hash integrity before report handoff.

cloud-k8s

Use for authorized cloud, container, and Kubernetes security assessment including metadata SSRF, IAM misconfig, container escape paths, and cluster RBAC review.

code-audit

Use for authorized source-code security review and SAST workflows including Semgrep, CodeQL patterns, dangerous API hunting, and fix verification.

ctf-sandbox

Thin PRIMARY for CTF / AWD / 靶场 multi-type orchestration. Hands off to the sidecar CTF-Sandbox-Orchestrator. Use when the user says CTF, AWD, 靶场, or 比赛题 and no more specific pwn/APK/IDA route already won.

database-security

Use for authorized database security assessment covering PostgreSQL/MySQL/MSSQL/Mongo/Redis exposure, authz, UDF/command paths, and misconfiguration review.

diagram-generator

generate, refine, validate, and render diagrams from natural language, notes, code snippets, schemas, tables, or existing diagram source. use for flowcharts, swimlanes, sequence diagrams, state diagrams, er diagrams, class diagrams, architecture/c4-style diagrams, dependency graphs, gantt charts, mind maps, user journeys, sankey-style flows, org charts, network graphs, and other visual models. supports mermaid by default, graphviz dot for complex graph layout, plantuml for uml-heavy engineering diagrams, and svg output when direct markup is more reliable.

digital-forensics

Use for authorized digital forensics including memory dumps, disk timelines, PCAP investigation, artifact triage, and IR evidence preservation.

docs-generator

|

edr-bypass-re

|

email-security

Use for authorized email security review including phishing analysis, header authentication (SPF/DKIM/DMARC), BEC patterns, and mailbox token abuse research.

firmware-pentest

|

ghidra-reverse

Use for free/open reverse engineering with Ghidra (headless or GUI), including decompile, cross-refs, and optional Ghidra MCP workflows when IDA is unavailable.

go-rust-reverse

Use for reverse engineering stripped Go and Rust binaries including runtime recognition, pclntab/moduel data recovery, panic strings, and idiomatic decompilation recovery.

関連スキル