Neste post vou falar sobre a ferramenta de engenharia reversa ILSpy. Essa ferramenta faz a descompilação de DLLs geradas através de código fonte C# (C sharp).
Introdução
Provavelmente, em algum momento você já precisou saber o funcionamento de uma DLL (Dynamic-link library). Se você ainda não precisou, talvez precise. Por essa razão, fiz esse post para explicar a ferramenta ILSpy que faz engenharia reversa DLLs que foram geradas através de código C# (C Sharp).
Para os leitores iniciantes no assunto, uma DLL (Dynamic-link library) é o resultado da compilação do código, gerando um único arquivo com o resultado de todo o código, basicamente gerando uma biblioteca. Essa biblioteca pode ser compartilhada e utilizada em outros sistemas ou programas (uma explicação bem simples e generalista). Por exemplo, na pasta C:\Windows\Microsoft.NET\Framework64\
têm as bibliotecas da plataforma .Net da Microsoft:
Ao tentar abrir uma DLL sem utilizar alguma ferramenta de engenharia reversa, você vai ser esse resultado:
Assim, uma engenharia reversa é fazer o processo contrário para gerar uma DLL. Por essa razão, muitos artigos utilizam o termo descompila para representar uma engenharia reversa. O resultado da engenharia reversa é um código programação legível e compreensível por um humano. (depende do humano… 😀)
Para isso, vou utilizar a ferramenta open source ILSpy ( https://github.com/icsharpcode/ILSpy).
Ferramenta ILSpy
A ferramenta ILSPy é open source (código aberto) com o projeto no GitHub ( https://github.com/icsharpcode/ILSpy). Foi escriva em C# (C sharp) e utiliza algumas técnicas como o Reflection ( https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/reflection ) para fazer a engenharia reversa de DLLs escritas em C# (C sharp).
Essa ferramenta possui as seguintes formas de utilização:
- um executável para o Windowns;
- extensão para o Visual Studio (https://marketplace.visualstudio.com/items?itemName=SharpDevelopTeam.ILSpy);
- extensão para o Visual Studio Code (https://github.com/icsharpcode/ilspy-vscode);
- pacote NuGet (https://www.nuget.org/packages/ICSharpCode.Decompiler/);
- aplicação através de linha de comando (https://github.com/icsharpcode/ILSpy/blob/master/ICSharpCode.Decompiler.Console); e
- client para o PowerShell (https://github.com/icsharpcode/ILSpy/blob/master/ICSharpCode.Decompiler.PowerShell).
Vou mostrar como utiliza-la com as duas primeiras maneiras.
Executável
Para utilizar a ferramenta através do executável (.exe), você vai precisar entrar no repositório do projeto dentro do GitHub: https://github.com/icsharpcode/ILSpy . Depois, fazer o download dos binários (compilação) do projeto:
Depois do fazer o download, extrai o conteúdo dentro do ILSpy_binaries.zip em uma pasta de preferência. No meu caso, eu coloquei noC:\Program Files\ILSpy
:
Dentro do conteúdo extraído, tem o executável: ILSpy.exe. Assim, ao abrir esse executável, você vai se deparar com esse tela similiar a essa:
Como é possível visualizar, do lado direito tem a lista de DLLs e no dentro, tem o código resultante da engenharia reversa.
Exemplo
Basicamente, vou procurar a DLL System.dll do framework .Net e investigar a classe Uri. Essa DLL fica no diretório C:\Windows\Microsoft.NET\Framework64\v4.0.30319
. Então, entre no menu File > Open (ou pressione Ctrl+O) e selecione a DLL:
Ao abrir, essa ferramenta vai adicionar a lista de DDLs, essa nova escolha:
Assim, expandi a árvore do System, clicando no símbolo de mais (+) na frente do nome e procure a classe desejada. Ao encontra-la, clique uma vez nela:
Ao clicar na classe desejada, todo o código fonte vai aparecer do lado direito, mostrando todo o conteúdo (métodos, propriedades, atributos, construtores, comentários e etc), não importando se são privados ou públicos:
Extensão para o Visual Studio
Para usar a extensão do Visual Studio é ainda mais fácil. Nesse exemplo, vou utilizar o Visual Studio Professional 2019, mas você consegue utiliza-lo em qualquer versão do 2015, 2017 e o próprio 2019.
Entre no menu de Extensions:
E procure a extensão através do nome: e faça o download dela:
Feche e abre o Visual Studio, que vai abrir a janela abaixo e clique em Modify:
Pronto! A ferramenta foi instalada e está pronta para uso. E para usa-la é simples, abra qualquer projeto e clique com o botão direito em cima da DLL que você seja fazer a engenharia reversa, depois selecione “Open in ILSpy“:
E depois, vai abrir a ILSpy com o código fonte desta DLL selecionada:
Essa versão ainda possui bugs, mas facilita muito.
Conclusão
Como foi possível visualizar, a utilização desta ferramenta para fazer engenharia reversa é simples e fácil. Com certeza, é uma ótima ferramenta para saber e entender o funcionamento de alguma biblioteca DLL que você esteja curioso(a) em saber.
Referências
- ILSpy: https://github.com/icsharpcode/ILSpy ;
- MarketPlace Visual Studio: https://marketplace.visualstudio.com/items?itemName=SharpDevelopTeam.ILSpy ;
- GitHub da extensão Visual Studio Code: https://github.com/icsharpcode/ilspy-vscode;
- NuGet: https://www.nuget.org/packages/ICSharpCode.Decompiler/ ;
- Conceito de Reflection: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/reflection .