Descompilação de Assemblies .NET com ILSpy
Use esta skill para entender como o código .NET funciona internamente, descompilando assemblies compilados.
Pré-requisitos
- SDK .NET instalado
- Ferramenta de linha de comando ILSpy disponível via uma das seguintes formas:
dnx ilspycmd(se disponível no seu SDK ou runtime)dotnet tool install --global ilspycmd
Ambas as formas são mostradas abaixo. Use a que funcionar no seu ambiente.
Nota: As opções do ILSpyCmd podem variar ligeiramente conforme a versão.
Sempre verifique as flags suportadas comilspycmd -h.
Início rápido
# Descompilar um assembly para a saída padrão
ilspycmd MyLibrary.dll
# ou
dnx ilspycmd MyLibrary.dll
# Descompilar para uma pasta de saída
ilspycmd -o pasta-saida MyLibrary.dll
Locais Comuns de Assemblies .NET
Pacotes NuGet
~/.nuget/packages/<nome-do-pacote>/<versao>/lib/<tfm>/
Bibliotecas do runtime .NET
dotnet --list-runtimes
Assemblies de referência do SDK .NET
dotnet --list-sdks
Assemblies de referência não contêm implementações.
Saída de build do projeto
./bin/Debug/net8.0/<NomeDoAssembly>.dll
./bin/Release/net8.0/publish/<NomeDoAssembly>.dll
Fluxo de trabalho principal
- Identifique o que deseja entender
- Localize o assembly
- Liste os tipos
- Descompile o alvo
Comandos
Descompilação básica
ilspycmd MyLibrary.dll
ilspycmd -o ./descompilado MyLibrary.dll
ilspycmd -p -o ./projeto MyLibrary.dll
Descompilação direcionada
ilspycmd -t Namespace.ClassName MyLibrary.dll
ilspycmd -lv CSharp12_0 MyLibrary.dll
Visualizar código IL
ilspycmd -il MyLibrary.dll
Observações sobre builds modernos do .NET
- Imagens ReadyToRun podem reduzir a legibilidade
- Builds trimmed ou AOT podem omitir código
- Prefira builds não trimmed
Nota legal
A descompilação de assemblies pode estar sujeita a restrições de licenciamento.