ILSpy - Descompilador de .NET
ILSpy es el navegador y descompilador de ensamblajes .NET de código abierto. Invierte el proceso de compilación, convirtiendo Microsoft Intermediate Language (MSIL/CIL) nuevamente en C# de alto nivel legible (y otros lenguajes). Es la herramienta gratuita estándar para inspeccionar, analizar e ingeniería inversa de binarios .NET — desde evaluación de malware hasta depuración de librerías de terceros sin fuente. Se ejecuta como una aplicación GUI de Windows, una aplicación Avalonia multiplataforma, una extensión de VS Code, y el CLI ilspycmd.
Instalación
| Variante | Cómo |
|---|
| GUI de Windows | Descarga el instalador/zip de GitHub Releases |
| GUI multiplataforma | Compilación AvaloniaILSpy (Linux/macOS) |
CLI (ilspycmd) | dotnet tool install --global ilspycmd |
| VS Code | Instala la extensión “ILSpy .NET Decompiler” |
| Verificar CLI | ilspycmd --version |
Conceptos Esenciales de la GUI
| Acción | Cómo |
|---|
| Abrir ensamblaje | Archivo → Abrir, o arrastra un .dll/.exe |
| Cargar dependencias | ILSpy resuelve ensamblajes referenciados automáticamente |
| Navegar | Expande el árbol: ensamblaje → espacio de nombres → tipo → miembro |
| Descompilar un miembro | Haz clic en él; C# aparece en el panel principal |
| Analizar usos | Clic derecho → Analizar (¿quién llama/usa esto?) |
| Buscar | Ctrl+F / cuadro de búsqueda para tipos y miembros |
| Cambiar versión de lenguaje | Menú desplegable de barra de herramientas (C# 1.0 … última) |
| Guardar proyecto descompilado | Archivo → Guardar Código (exporta .csproj completo) |
Analizar (Referencias Cruzadas)
| Clic derecho → Mostrar analiza |
|---|
| Instanciado Por |
| Utilizado Por |
| Asignado Por / Leído Por (campos) |
| Anulado Por / Anula |
| Expuesto Por |
Este es el flujo de trabajo central de IE: elige un método sospechoso y rastrea quién lo llama y qué toca.
ilspycmd (Línea de Comandos)
| Comando | Descripción |
|---|
ilspycmd Assembly.dll | Descompila el ensamblaje completo a stdout |
ilspycmd -o out/ Assembly.dll | Descompila a un directorio |
ilspycmd -p -o proj/ Assembly.dll | Exporta un proyecto .csproj compilable |
ilspycmd -t Namespace.Type Assembly.dll | Descompila un solo tipo |
ilspycmd -il Assembly.dll | Muestra IL crudo en lugar de C# |
ilspycmd -lv CSharp10_0 Assembly.dll | Establece la versión de lenguaje C# |
ilspycmd --nested-directories -p -o out/ A.dll | Refleja espacios de nombres como carpetas |
ilspycmd -r LIBDIR Assembly.dll | Añade una ruta de búsqueda de referencia de ensamblaje |
| Objetivo | Cómo |
|---|
| Recursos incrustados | Árbol → nodo Recursos; extrae vía Guardar |
| Tablas de metadatos | Ver → “Metadata” (tablas crudo, tokens) |
| Strings/IL | Cambia el menú desplegable de lenguaje a IL |
| PInvoke/nativo | Visible en firmas de método |
Flujos de Trabajo Comunes
# Evaluación de una muestra sospechosa: volcado completo de fuente para grep
ilspycmd -o sample_src/ suspicious.dll
grep -rin "DownloadString\|FromBase64String\|Process.Start" sample_src/
# Recupera un proyecto compilable de un DLL del que perdiste la fuente
ilspycmd -p -o recovered/ MyLib.dll
# Mira IL crudo cuando la descompilación de C# está ofuscada
ilspycmd -il obfuscated.dll | less
Para ensamblajes muy ofuscados, empareja ILSpy con un desobfuscador (ej. de4dot) primero, luego descompila el binario limpio.
ILSpy vs Otras Herramientas .NET
| Herramienta | Tipo | Notas |
|---|
| ILSpy | Descompilador + navegador | Código abierto, CLI + GUI |
| dnSpy / dnSpyEx | Descompilador + depurador | Edita y depura ensamblajes |
| dotPeek | Descompilador | Gratuito (JetBrains), Windows |
| ILDASM | Desensam blador | Solo IL, incluido con .NET SDK |
Recursos