Communitygithub.com

dotnet-reverse

Reverse engineering for .NET / C# binaries (managed PE assemblies, obfuscated code, Sharp* tools, loaders, info-stealers).

Qu'est-ce que dotnet-reverse ?

Ce skill est dédié à l'analyse et à la rétro-ingénierie de binaires .NET / C# (assemblages managés PE avec CLR, produits de compilation C# incluant NativeAOT, outils Sharp* de la red team tels que Rubeus, SharpHound, SharpShell, ainsi que les programmes obfusqués par ConfuserEx, SmartAssembly, Babel, Eazfuscator ou .NET Reactor). Il couvre également les loaders .NET, les info-stealers et les malwares packés. Le flux de travail s'appuie principalement sur dnSpyEx couplé à de4dot pour le désobfuscation, et peut s'interfacer avec dnSpy MCP lorsque l'IA doit agir directement sur l'assembly. Les principes clés incluent l'identification préalable de la nature .NET (vérification de l'en-tête CLR), la préférence pour l'édition IL plutôt que la recompilation C# afin d'éviter les pertes d'information, et l'utilisation systématique de de4dot avant toute analyse statique approfondie. Six phases sont définies : identifier le type de binaire, détecter l'obfusqueur, désobfusquer, analyser statiquement (vue C# puis IL), déboguer dynamiquement pour révéler les chaînes déchiffrées et les flux C2, et enfin patcher le programme (modification de jugements, constantes, suppression de vérifications). En cas de cible purement native (IL2CPP, NativeAOT, C/C++/Go/Rust), le skill redirige vers les modules reverse-engineering, ida-reverse ou radare2.

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

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

.NET / C# — Normes de rétro-ingénierie

ACTION REQUISE (à lire et exécuter immédiatement)

  1. MAINTENANT : Utiliser DIE / file / en-tête CLR pour confirmer que la cible est un assembly .NET managé (sinon, BASKULER vers ida-reverse/ / reverse-engineering/)
  2. MAINTENANT : Si suspicion d'obfusqueur → exécuter de4dot pour désobfusquer, produire *-clean.exe, conserver l'échantillon original
  3. SUIVANT : dnSpyEx (ou dnSpy MCP / ilspycmd) en statique : naviguer dans le code C# + vue IL pour les décisions critiques
  4. AGIR : En cas de besoin de texte clair / C2 → déboguer dynamiquement ; si une modification de logique est nécessaire, privilégier le patch IL plutôt que la recompilation C#
  5. En fin de phase, proposer à l'utilisateur un menu de 3 à 6 étapes suivantes (incluant l'exportation du rapport)

Périmètre d'application

Ce skill est prioritaire lorsque la tâche correspond aux scénarios suivants :

  • Identifier et rétro-ingénierer des produits de compilation .NET / C# (assembly managé PE / .exe / .dll)
  • Analyser la chaîne d'outils Sharp* de la red team (Rubeus, SharpHound, SharpShell, etc.)
  • Désobfusquer ConfuserEx / SmartAssembly / Babel / Eazfuscator / .NET Reactor et autres packers
  • Rétro-ingénierer la logique de déchiffrement et de C2 d'un loader .NET, d'un info-stealer ou d'un RAT
  • Patcher un programme C# (modifier des jugements, des constantes, keygen)
  • Analyser la couche managée Mono/Unity avant IL2CPP (attention : IL2CPP compile en natif, utiliser reverse-engineering/ + seed-014)

Si la cible est un binaire purement natif (C/C++/Go/Rust, sans CLR), basculer vers reverse-engineering/, ida-reverse/ ou radare2/.

Principes fondamentaux

  • Identifier avant d'agir : confirmer d'abord qu'il s'agit d'un assembly .NET managé (en-tête PE CLR + flux #~ / #Strings + point d'entrée _CorExeMain de mscoree), puis choisir dnSpy plutôt qu'IDA
  • IL d'abord, C# ensuite : le décompilateur C# de dnSpyEx perd ou déforme certaines informations (machines d'état générées par le compilateur, async/await, yield). Les décisions critiques et les patchs doivent être effectués dans l'éditeur IL ; la vue C# sert uniquement à une navigation rapide
  • de4dot en premier : face à un obfusqueur, lancer d'abord de4dot pour désobfusquer avant toute analyse statique, sinon les chaînes et le flux de contrôle seront illisibles
  • Couplage avec MCP : si l'environnement dispose de dnSpy MCP (outils dnspy_*), privilégier l'interface MCP pour la décompilation / l'inspection IL, afin d'éviter de basculer entre les interfaces graphiques
  • Résultats tangibles : enregistrer systématiquement le produit désobfusqué, les configurations extraites (C2, clés) et les diffs de patch

Correspondance des outils

CapacitéOption prioritaireRemarques
Décompilation + débogage + patchdnSpyExL'outil de référence, seul à proposer un éditeur IL graphique ; l'ancien dnSpy n'est plus maintenu, utiliser la branche Ex
Décompilation légère en CLI / headlessILSpy (ilspycmd)Adapté au traitement par lots, aux scripts, sous Linux/macOS
Désobfuscationde4dotSolution par défaut pour ConfuserEx, SmartAssembly et la plupart des packers courants
Identification de l'obfusqueurDetect It Easy (DIE) / fileDéterminer d'abord le type de packer avant de paramétrer de4dot
Manipulation programmatique d'ILdnlibScripts C# pour modifier en masse les métadonnées / implémenter un déchiffreur de chaînes
Action directe depuis l'IAdnSpy MCPInterface via les outils dnspy_decompile / dnspy_inspect_il

Prérequis : disposer de dnSpyEx + de4dot sur Windows (choco ou release) ; sous Linux/macOS, utiliser ilspycmd + dotnet runtime. Voir la matrice d'installation dans references/sharp-tools.md.

Flux de travail en six phases

1. Identifier (reconnaissance .NET)

Confirmer que la cible est un assembly managé, ne pas analyser un PE natif comme du .NET :

# Windows
file target.exe                       # "PE32 executable ... for MS Windows" ne suffit pas
# Décisif : vérifier la présence du CLR
powershell -c "[System.Reflection.AssemblyName]::GetAssemblyName('target.exe')"
# Ou
# Glisser target.exe dans dnSpyEx — s'il s'ouvre, c'est un assembly managé

# Générique
strings target.exe | grep -iE "mscoree|_CorExeMain|mscorlib|System\\."

Indices de reconnaissance .NET :

  • L'entrée Data Directory[14] (en-tête Runtime CLR) du PE est non nulle
  • Importation de mscoree.dll / point d'entrée _CorExeMain
  • Flux de métadonnées #~, #Strings, #US, #GUID, #Blob
  • Chaîne mscorlib / System.Private.CoreLib

Exception NativeAOT : compilé en natif, pas d'en-tête CLR, mais présence de la chaîne System.Private.CoreLib et de métadonnées de types restructurées — utiliser reverse-engineering/ (IDA/r2) ; ce skill se limite à fournir une indication de reconnaissance.

2. Détecter (recherche de l'obfusqueur)

# DIE en identification rapide
diec target.exe                        # Detect It Easy CLI
# Ou glisser dans dnSpyEx et vérifier la présence de noms de classes illisibles / flux de contrôle déformé

Obfusqueurs courants → stratégie de désobfuscation (voir references/obfuscators.md) :

ObfusqueurCaractéristiqueTraitement de4dot
ConfuserEx (1.0.0 / 2.x)anti-tamper <module>, flux de contrôle déformé, chiffrement de chaînesde4dot target.exe (généralement reconnu automatiquement)
SmartAssemblycircular/string encoding, compression des ressourcesde4dot target.exe
Babel.NETChiffrement des corps de méthode, flux de contrôlede4dot target.exe
Eazfuscator.NETChiffrement de chaînes/ressourcesde4dot, certains versions nécessitent une intervention manuelle
.NET Reactoranti-tamper + necrobitde4dot, les nouvelles versions peuvent échouer et nécessiter une approche manuelle

3. Désobfusquer

# de4dot reconnaît automatiquement la plupart des packers par défaut
de4dot target.exe -o target-clean.exe

# Spécifier un type (en cas d'échec de la reconnaissance automatique)
de4dot --type cfze target.exe          # ConfuserEx
de4dot --type sa target.exe            # SmartAssembly

# Obfuscation multiple / de4dot indique "unknown"
de4dot --detect target.exe             # Voir ce qu'il reconnaît
# Il peut être nécessaire de patcher d'abord l'anti-tamper avant de relancer de4dot (voir references/obfuscators.md)

Produit : target-clean.exe — l'analyse ultérieure utilise ce fichier. Conserver l'échantillon original pour comparaison.

4. Analyser statiquement

Charger l'échantillon désobfusqué dans dnSpyEx :

  • Vue C# : navigation rapide dans la structure des classes, les signatures de méthodes, les chaînes (pour le repérage)
  • Vue IL : les décisions critiques, la logique de chiffrement et les machines d'état doivent être examinées en IL (clic droit → Edit IL ou vue IL)
  • Rechercher le point d'entrée : Main / Startup / initialiseur de module (Module .cctor)
  • Chercher la logique clé : rechercher flag, password, verify, check, encrypt, http, Config
Localiser une chaîne → remonter aux références → trouver la méthode qui l'utilise → inspecter la logique de décision en vue IL

5. Déboguer dynamiquement

Débogueur dnSpyEx : attacher au processus / lancer le débogage, placer des points d'arrêt sur les méthodes clés, observer l'exécution :

  • Chaînes déchiffrées en clair (souvent, les chaînes des obfusqueurs ne sont déchiffrées qu'à l'exécution)
  • Adresse C2, résultat du déchiffrement de la configuration
  • Flux de contrôle piloté par exceptions (anti-débogage : utilisation courante de try/catch pour masquer le chemin réel)

Le débogage dynamique .NET est bien plus simple que le natif — on peut visualiser directement les valeurs des objets et le contenu des chaînes. Privilégier le dynamique plutôt que de s'acharner en statique.

6. Patcher (modification à la demande)

dnSpyEx → clic droit sur une méthode → Edit Method (C#) ou Edit IL
  - Modifier une condition : ldc.i4.0 → ldc.i4.1 (false→true)
  - Modifier une constante : éditer directement la chaîne/le nombre
  - Supprimer une validation : mettre l'ensemble en NOP
File → Save Module → remplacer le fichier original

Fiabilité du patch IL > patch C# : la recompilation C# peut échouer (références manquantes, erreurs de syntaxe), alors que l'édition IL ne déforme pratiquement jamais le code. Voir references/common-workflow.md.

Aiguillage déclencheur

Ce skill est activé lorsque l'utilisateur dit :

  • "rétro-ingénierie de binaire .NET / C#" / "décompilation de programme C#"
  • "analyse avec dnSpy" / "patch avec dnSpyEx"
  • "désobfuscation / dépacking de ConfuserEx / SmartAssembly / Babel"
  • "analyse d'outil Sharp*" (Rubeus / SharpHound / SharpShell)
  • "rétro-ingénierie de malware / loader / info-stealer .NET"
  • "patch / keygen / modification de condition de programme C#"

Quand basculer

  • Jeu Unity compilé en IL2CPP → reverse-engineering/ + seed-014_unity-il2cpp-reverse.md (IL2CPP est natif, ne pas utiliser dnSpy)
  • Produit NativeAOT → reverse-engineering/ (idem, natif)
  • PE natif pur (sans CLR) → reverse-engineering/ / ida-reverse/
  • Besoin de migrer des symboles/fonctions en masse vers une autre version → binary-diff/
  • Besoin de dessiner une chaîne d'attaque / un graphe d'appels → diagram-generator/

Contexte d'aiguillage

Entrée amont : skills/SKILL.md (pilote central), routing.md Sortie aval :

  • IL2CPP / NativeAOT (natif) → reverse-engineering/
  • Analyse approfondie de segments .so/.dll natifs → ida-reverse/ / radare2/
  • Besoin d'une action directe de l'IA sur dnSpy → enregistrer et utiliser dnSpy MCP (voir references/sharp-tools.md)

Modules associés au même niveau :

  • reverse-engineering/languages-compiled.md (présentation .NET pointant vers ce module)
  • apk-reverse/ (rétro-ingénierie Android Xamarin/MAUI pouvant revenir à ce module pour la couche C#)

Documents de référence

  • references/obfuscators.md — Détails sur la désobfuscation de ConfuserEx / SmartAssembly / Babel / Eazfuscator / .NET Reactor + contournement anti-tamper
  • references/common-workflow.md — Flux de travail complet, fiabilité du patch IL, extraction de déchiffreur de chaînes, reconnaissance de machines d'état
  • references/sharp-tools.md — Analyse des outils Sharp* de la red team, matrice d'installation, intégration dnSpy MCP, index des ressources communautaires

Auto-vérification de fin de tâche

  • A-t-on confirmé l'identité CLR / managée (ou a-t-on déjà BASCULÉ hors de ce skill) ?
  • L'échantillon obfusqué a-t-il d'abord été désobfusqué avec de4dot (ou équivalent) avant analyse approfondie ?
  • La logique critique a-t-elle été vérifiée dans la vue IL (et non seulement dans le pseudo-code C#) ?
  • Les artéfacts (échantillon clean / configuration / diff de patch) sont-ils enregistrés et reproductibles ?
  • Un menu d'étapes suivantes ou un rapport a-t-il été fourni ?

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.

Skills associés