ILSpy - .NET Decompiler Spickzettel
ILSpy ist der Open-Source .NET Assembly Browser und Decompiler. Es kehrt den Compilierungs-Prozess um und wandelt Microsoft Intermediate Language (MSIL/CIL) zurück in lesbares, hochstufiges C# (und andere Sprachen). Es ist das Standard-Gratis-Tool zum Inspizieren, Analysieren und Reverse-Engineering von .NET-Binaries — von Malware-Triage bis zum Debuggen von Drittanbieter-Bibliotheken ohne Quelle. Es läuft als Windows GUI, plattformübergreifende Avalonia-App, VS Code Extension und das ilspycmd CLI.
Installation
| Variante | Wie |
|---|
| Windows GUI | Installer/Zip von GitHub Releases herunterladen |
| Plattformübergreifende GUI | AvaloniaILSpy Build (Linux/macOS) |
CLI (ilspycmd) | dotnet tool install --global ilspycmd |
| VS Code | ”ILSpy .NET Decompiler” Extension installieren |
| CLI überprüfen | ilspycmd --version |
GUI Grundlagen
| Aktion | Wie |
|---|
| Assembly öffnen | Datei → Öffnen, oder .dll/.exe in das Fenster ziehen |
| Abhängigkeiten laden | ILSpy löst referenzierte Assemblies automatisch auf |
| Navigieren | Baum erweitern: Assembly → Namespace → Type → Member |
| Einen Member decompilieren | Klicken; C# erscheint im Hauptbereich |
| Nutzungen analysieren | Rechtsklick → Analyze (wer ruft/nutzt das?) |
| Suchen | Ctrl+F / Suchfeld für Types und Members |
| C# Version ändern | Toolbar Dropdown (C# 1.0 … neueste) |
| Decompiliertes Projekt speichern | Datei → Code speichern (vollständiges .csproj exportieren) |
Analysieren (Cross-References)
| Rechtsklick → Analyze zeigt |
|---|
| Instantiated By |
| Used By |
| Assigned By / Read By (Felder) |
| Overridden By / Overrides |
| Exposed By |
Dies ist der Kern RE Workflow: wähle eine verdächtige Methode und tracke wer sie aufruft und was sie berührt.
ilspycmd (Befehlszeile)
| Befehl | Beschreibung |
|---|
ilspycmd Assembly.dll | Ganze Assembly decompilieren zu stdout |
ilspycmd -o out/ Assembly.dll | Zu einem Verzeichnis decompilieren |
ilspycmd -p -o proj/ Assembly.dll | Compilierbar .csproj Projekt exportieren |
ilspycmd -t Namespace.Type Assembly.dll | Einen einzelnen Type decompilieren |
ilspycmd -il Assembly.dll | Rohes IL anstelle von C# zeigen |
ilspycmd -lv CSharp10_0 Assembly.dll | C# Sprach-Version setzen |
ilspycmd --nested-directories -p -o out/ A.dll | Namespaces als Ordner spiegeln |
ilspycmd -r LIBDIR Assembly.dll | Assembly-Referenz-Suchpfad hinzufügen |
| Ziel | Wie |
|---|
| Eingebettete Ressourcen | Baum → Resources Node; via Save extrahieren |
| Metadaten-Tabellen | Ansicht → “Metadata” (Rohle Tabellen, Tokens) |
| Strings/IL | Sprachen-Dropdown auf IL wechseln |
| PInvoke/Native | In Methoden-Signaturen sichtbar |
Häufige Workflows
# Verdächtige .NET Sample triage: Vollständiger Source-Dump zum Greppen
ilspycmd -o sample_src/ suspicious.dll
grep -rin "DownloadString\|FromBase64String\|Process.Start" sample_src/
# Ein compilierbar Projekt von einer DLL wiederherstellen die du verloren hast
ilspycmd -p -o recovered/ MyLib.dll
# Rohes IL ansehen wenn die C# Decompilation obfuskiert ist
ilspycmd -il obfuscated.dll | less
Für stark obfuskierte Assemblies, Deobfuscator (z.B. de4dot) zuerst koppeln, dann die bereinigte Binary decompilieren.
| Tool | Typ | Notizen |
|---|
| ILSpy | Decompiler + Browser | Gratis, Open-Source, CLI + GUI |
| dnSpy / dnSpyEx | Decompiler + Debugger | Assemblies editieren & debuggen |
| dotPeek | Decompiler | Gratis (JetBrains), Windows |
| ILDASM | Disassembler | Nur IL, mit .NET SDK versandt |
Ressourcen