ILSpy - Cheatsheet Decompilatore .NET
ILSpy è il browser e decompilatore di assembly .NET open-source. Inverte il processo di compilazione, convertendo Microsoft Intermediate Language (MSIL/CIL) in C# leggibile e di alto livello (e altri linguaggi). È lo strumento gratuito standard per ispezionare, analizzare e fare reverse engineering di binari .NET — dal triage del malware al debug di librerie di terze parti senza sorgente. Funziona come GUI Windows, app cross-platform Avalonia, estensione VS Code e CLI ilspycmd.
Installazione
| Variante | Come |
|---|
| GUI Windows | Scarica l”installer/zip da GitHub Releases |
| GUI Cross-platform | Build AvaloniaILSpy (Linux/macOS) |
CLI (ilspycmd) | dotnet tool install --global ilspycmd |
| VS Code | Installa l”estensione “ILSpy .NET Decompiler” |
| Verifica CLI | ilspycmd --version |
Essenziali GUI
| Azione | Come |
|---|
| Apri assembly | File → Open, o trascina .dll/.exe |
| Carica dipendenze | ILSpy risolve gli assembly referenziati automaticamente |
| Naviga | Espandi l”albero: assembly → namespace → type → member |
| Decompila un member | Clicca; C# appare nel riquadro principale |
| Analizza utilizzi | Right-click → Analyze (chi chiama/usa questo?) |
| Ricerca | Ctrl+F / search box per tipi e member |
| Cambia versione linguaggio | Dropdown della toolbar (C# 1.0 … latest) |
| Salva progetto decompilato | File → Save Code (esporta .csproj completo) |
Analyze (Cross-References)
| Right-click → Analyze mostra |
|---|
| Instantiated By |
| Used By |
| Assigned By / Read By (fields) |
| Overridden By / Overrides |
| Exposed By |
Questo è il flusso di lavoro RE principale: scegli un metodo sospetto e traccia chi lo chiama e cosa tocca.
ilspycmd (Command Line)
| Comando | Descrizione |
|---|
ilspycmd Assembly.dll | Decompila l”intero assembly a stdout |
ilspycmd -o out/ Assembly.dll | Decompila a una directory |
ilspycmd -p -o proj/ Assembly.dll | Esporta un progetto .csproj compilabile |
ilspycmd -t Namespace.Type Assembly.dll | Decompila un singolo type |
ilspycmd -il Assembly.dll | Mostra IL grezzo invece di C# |
ilspycmd -lv CSharp10_0 Assembly.dll | Imposta la versione del linguaggio C# |
ilspycmd --nested-directories -p -o out/ A.dll | Rispecchia i namespace come cartelle |
ilspycmd -r LIBDIR Assembly.dll | Aggiungi un percorso di ricerca reference assembly |
| Target | Come |
|---|
| Risorse incorporate | Nodo Risorse dell”albero; estrai via Save |
| Tabelle metadati | View → “Metadata” (tabelle grezze, token) |
| Stringhe/IL | Cambia il dropdown del linguaggio a IL |
| PInvoke/native | Visibile nelle firme dei metodi |
Flussi di Lavoro Comuni
# Triage di un campione sospetto .NET: dump sorgente completo per grepping
ilspycmd -o sample_src/ suspicious.dll
grep -rin "DownloadString\|FromBase64String\|Process.Start" sample_src/
# Recupera un progetto compilabile da una DLL di cui hai perso il sorgente
ilspycmd -p -o recovered/ MyLib.dll
# Guarda IL grezzo quando la decompilazione C# è offuscata
ilspycmd -il obfuscated.dll | less
Per gli assembly fortemente offuscati, abbina ILSpy con un deobfuscator (es de4dot) prima, poi decompila il binario ripulito.
| Tool | Tipo | Note |
|---|
| ILSpy | Decompilatore + browser | Free, open-source, CLI + GUI |
| dnSpy / dnSpyEx | Decompilatore + debugger | Modifica & debug assembly |
| dotPeek | Decompilatore | Free (JetBrains), Windows |
| ILDASM | Disassembler | IL only, fornito con .NET SDK |
Risorse