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:
- Download da versão free: http://downloads.red-gate.com/reflector.zip
- Vídeo das funcionalidades: http://www.red-gate.com/products/reflector/video.htm
- Site oficial do produto: http://www.red-gate.com/products/reflector/
Veja também:
* Artigo"Entendendo o Reflection"