quinta-feira, 7 de maio de 2009

Engenharia reversa em .Net é com o Lutz Roeder Reflector

Antes de mais nada, o conceito:
A engenharia reversa é uma técnica usada para obter o código fonte de um software a partir do arquivo já compilado.
No caso dos softwares criados em .Net, este é um processo até simples usando Reflection*.

Uma ferramenta free que faz isso de forma magistral é o Lutz Roeder Reflector. Esta ferramenta foi criada por um entusiasta de .Net e de tão boa foi comprada pela Red-Gate. A Red-Gate então criou uma versão paga mas manteve uma versão free para benefício da comunidade, como ela própria a denomina.

Para quem lida com tecnologias novas feitas com .Net, como versões beta, componentes de terceiros, bibliotecas com documentação precária entre outros, uma ferramenta que permita ver o que essas tecnologias estão fazendo por "baixo do pano" se torna indispensável. Inclusive, é possível reverter o código-fonte do próprio .Net Framework.

Um período que usei ele intensamente foi quando em 2007 estávamos desenvolvendo uma solução para um cliente utilizando o Workflow Foundation em versão beta e que entraria em homologação ainda na versão RTM. Como a documentação era pouca, nada como investigar as entranhas das bibliotecas para entender seu real funcionamento. Atualmente, "brinco" olhando as dlls do Sharepoint e do próprio .Net Framework.

Além disto, para quem está começando com .Net, nada como aprender olhando o código-fonte dos outros, ou melhor, da Microsoft. Por exemplo, digamos que você vai criar um TextBox redondo, nada como dar uma espiada no código-fonte do TextBox da Microsoft para aprender algumas boas práticas na criação de um componente. Veja imagem a seguir.


E como toda linguagem de programação .Net segue o padrão definido pelo Common Language Specification (CLS) é possível olhar o código na linguagem que você está mais acostumado (VB.NET, C++, Delphi, etc) ou até em Intermediate Language (IL) para quem gosta de sofrer.

Os recursos que acho mais interessante no Lutz são:
1) Multi-linguagens
2) Interface simples e prática.
3) Navegação pelo próprio código-fonte. Por exemplo, ao clicar no nome de uma classe o código fonte desta classe é exibido.
4) É possível exportar o código-fonte para arquivos em um projeto do Visual Studio.

Informações sobre o Lutz Reflector:
Aproveite esse utilitário com responsabilidade e respeito à propriedade intelectual!

Veja também:
* Artigo"Entendendo o Reflection"

Nenhum comentário:

Postar um comentário