11. Descompilando .NET
Neste tutorial vamos nos distanciar um pouco do Olly para analisarmos um aplicativo feito em .NET.
Apesar de facilitar muito a programação ( tanto visual quanto linhas de código ), aplicativos que usam o .NET Framework possuem uma grande falha: a facilidade de se reverter o código. Esses executáveis não são compilados em código nativo ( transformado pra assembly ), ao invés disso, é utilizada uma linguagem chamada IL ( Intermediate-Level ), que nada mais é do que o seu código desemembrado em 1 comando por linha. Quando você inicia um desses aplicativos, o Framework tem que compilar o aplicativo na hora ( on the fly ), e isso explica também a lentidão para iniciar qualquer executável programado com o Framework.
Não importa a linguagem que você utilizou ( VB, C#, ... ), no final das contas, tudo vira o mesmo IL-Code. O uso do .NET Fuscator ( Obfuscator ) também não adianta muito, já que existem dezenas de aplicativos que conseguem reverter a "criptografia". Nós não vamos fazer debug nem alteração no código desta vez, vamos só analisar. Para isso, baixe nosso alvo:
-Download: fergonet.zip
Como eu disse, o Olly não tem a capacidade de fazer o debug/disassembly de aplicativos .NET. Vamos utilizar um programa chamado .NET Reflector. Ele não tem a capacidade de fazer debug, apenas reverte o código para sua linguagem nativa ( isso mesmo! ).
Como sempre, uma analise no PEiD para verificar a origem do executável.
Inicie o .NET Reflector e abra o nosso alvo dentro dele. ( se for questionado sobre a versão do Framework, selecione a 2.0 ).
Vá expandindo a árvore até chegar dentro do Form1, que contém todos os eventos, controles, etc... ( FergoNET1\FergoNET1.exe\FergoNET1\Form1 ). Interessante, conseguimos já ver todos os controles e eventos ( inclusive com seus nomes originais ). Dentre os elementos da árvore, um deles chama atenção: cmbRegistrar_Click(Object, EventArgs) : Void
Clique sobre o botão direito sobre ele e selecione "Disassembly". Caso apareça alguma mensagem, simplesmente ignore-a ( Skip ). Se você não estava acreditando, agora vai acreditar. O código do programa está ali, escrito na linguagem nativa ( voce pode selecionar uma delas no drop-down ali na toolbar ( eu escolhi Visual Basic )
Incrível não? Não precisamos nem rachar a cabeça pra entender o algorítmo em assembly, ele já está numa linguagem de alto nível. Basta copiar esse código para o VisualStudio, fazer algumas alterações e temos um keygen ;D
Caso não tenha entendido, o serial é gerado somando os valores ASCII de cada caractere do nome e depois executando um XOR com 123 sobre essa soma.
Se quiser analisar o seu código na IL, selecione IL no drop-down da toolbar. O código não fica claro como este, mas também não chega a parecer com assembly. Compare o código IL com alguma outra linguagem para tentar entender o que cada instrução do IL representa. No próximo tutorial vou explicar um pouco melhor as instruções do IL e como fazer alterações no código.
Até a próxima!
F3rGO!