ILSpy - Descompilador .NET
ILSpy é o navegador de assembly .NET e descompilador de código aberto. Ele reverte o processo de compilação, convertendo Microsoft Intermediate Language (MSIL/CIL) de volta para C# legível e de alto nível (e outras linguagens). É a ferramenta padrão e gratuita para inspecionar, analisar e fazer engenharia reversa de binários .NET — desde triagem de malware até depuração de bibliotecas de terceiros sem fonte. Roda como uma GUI do Windows, um aplicativo Avalonia multiplataforma, uma extensão do VS Code e a CLI ilspycmd.
Instalação
| Variante | Como |
|---|
| GUI do Windows | Baixe o instalador/zip do GitHub Releases |
| GUI multiplataforma | Build AvaloniaILSpy (Linux/macOS) |
CLI (ilspycmd) | dotnet tool install --global ilspycmd |
| VS Code | Instale a extensão “ILSpy .NET Decompiler” |
| Verificar CLI | ilspycmd --version |
Essenciais da GUI
| Ação | Como |
|---|
| Abrir assembly | File → Open, ou arraste um .dll/.exe |
| Carregar dependências | ILSpy resolve automaticamente assemblies referenciados |
| Navegar | Expanda a árvore: assembly → namespace → type → member |
| Descompilar um member | Clique nele; C# aparece no painel principal |
| Analisar usos | Clique direito → Analyze (quem chama/usa isto?) |
| Pesquisar | Ctrl+F / caixa de pesquisa para tipos e members |
| Alterar versão de linguagem | Dropdown da barra de ferramentas (C# 1.0 … mais recente) |
| Salvar projeto descompilado | File → Save Code (exporte .csproj completo) |
Analisar (Referências Cruzadas)
| Clique direito → Analyze mostra |
|---|
| Instantiated By |
| Used By |
| Assigned By / Read By (campos) |
| Overridden By / Overrides |
| Exposed By |
Este é o fluxo de trabalho de RE principal: escolha um método suspeito e rastreie quem o chama e o que ele toca.
ilspycmd (Linha de Comando)
| Comando | Descrição |
|---|
ilspycmd Assembly.dll | Descompile o assembly inteiro para stdout |
ilspycmd -o out/ Assembly.dll | Descompile para um diretório |
ilspycmd -p -o proj/ Assembly.dll | Exporte um projeto .csproj compilável |
ilspycmd -t Namespace.Type Assembly.dll | Descompile um único tipo |
ilspycmd -il Assembly.dll | Mostre IL bruto em vez de C# |
ilspycmd -lv CSharp10_0 Assembly.dll | Defina a versão da linguagem C# |
ilspycmd --nested-directories -p -o out/ A.dll | Espelhe namespaces como pastas |
ilspycmd -r LIBDIR Assembly.dll | Adicione um caminho de pesquisa de referência assembly |
| Alvo | Como |
|---|
| Recursos incorporados | Árvore → nó Resources; extraia via Save |
| Tabelas de metadados | View → “Metadata” (tabelas brutas, tokens) |
| Strings/IL | Alterne o dropdown de linguagem para IL |
| PInvoke/nativo | Visível em assinaturas de método |
Fluxos de Trabalho Comuns
# Triagem de uma amostra suspeita .NET: despejo de source completo para grep
ilspycmd -o sample_src/ suspicious.dll
grep -rin "DownloadString\|FromBase64String\|Process.Start" sample_src/
# Recupere um projeto compilável de uma DLL da qual você perdeu a source
ilspycmd -p -o recovered/ MyLib.dll
# Olhe para IL bruto quando a descompilação C# está ofuscada
ilspycmd -il obfuscated.dll | less
Para assemblies fortemente ofuscadas, emparelhe ILSpy com um desofuscador (por exemplo de4dot) primeiro, depois descompile o binário limpo.
ILSpy vs Outras Ferramentas .NET
| Ferramenta | Tipo | Notas |
|---|
| ILSpy | Descompilador + navegador | Gratuito, código aberto, CLI + GUI |
| dnSpy / dnSpyEx | Descompilador + debugger | Edite e depure assemblies |
| dotPeek | Descompilador | Gratuito (JetBrains), Windows |
| ILDASM | Desassemblador | Apenas IL, vem com .NET SDK |
Recursos