Ir ao conteúdo

Engenharia Reversa com ILSpy

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:

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

Publicado emEngenharia de SoftwareFerramentas