Você está na página 1de 9

Tutorial 3: Correo de binrios .

NET no OllyDbg
Caros seguidores, o objetivo deste 3 tutorial de engenharia reversa explicar como corrigir (crackar) um executvel sem espiar o seu cdigo-fonte. A palavra espiar tem algum significado quando aplicada a aplicaes construdas sobre .NET, devido sobretudo, ao seu cariz. possvel usar um processo mais simplificado para alterar funes de um executvel .NET, mas como neste blog proposto fazer um review rea de engenharia reversa, esse ser um assunto a estudar adiante.

Sumrio
Desta vez, o executvel proposto de origem desconhecida, no se sabe ao certo, em que plataforma foi desenvolvido (.NET), partindo do pressuposto que no era mencionado no artigo.

Ferramentas de Trabalho
Para o seguinte tutorial existe a necessidade e dependncia de duas ferramentas, e nomeadamente, conhecimento de Assembly. Caso procure saber mais sobre o assunto, o seguinte link poder ser consultado no blog:
(http://infptavares.blogspot.pt/2013/12/introducao-ao-assembly.html).

-OllyDbg: Esta ferramenta um debbugger que ser necessrio para interpretar o executvel e efetuar alteraes no cdigo assembly do mesmo. uma ferramenta bastante completa de disassembling e debugging. -CFF explorer: Esta ferramenta permite a edio de ficheiros PE (Portable Executable, do Ingls), e obter algumas informaes relevantes do mesmo. (Poder ser consultada informao referente s ferramentas de trabalho do tutorial na pgina Tools do blog.)

Correo de binrios nativos (Patching Native Binaries)


Mesmo quando o cdigo-fonte dos binrios no disponibilizado, possvel efetuar correes, por forma, a remover vrias restries de segurana impostas pelo fornecedor, bem como, corrigir erros inerentes ao cdigo. Um tipo de proteo bastante familiar nos binrios nativos a proteo contra cpia, isto , todo o utilizador que deseje obter um determinado software, ter antecipadamente de pagar uma licena de uso. Este tipo de licena obriga o utilizador a registar o produto antes de o usar. Por outro lado, o fornecedor estabeleceu previamente um tempo beta de uso, com limitaes aplicacionais, de maneira, a cativar o utilizador a obter uma licena.

Ficheiro Executvel (Binrio nativo)


Quando feito o download de ficheiros da Internet, e estes apenas permitem o seu uso durante 30 dias, estamos perante uma verso experimental. Na maioria das vezes, este mecanismo de proteo envolve a verificao da data do sistema. neste ponto que entra a engenharia reversa, todos os esforos so mantidos para ultrapassar a licena de uso. A seguinte imagem mostra a impossibilidade de executar o binrio de teste.

Tanto o cdigo-fonte do binrio, como o ficheiro .exe, disponibilizado para download no final do tutorial. A motivao deste tutorial sobre tudo, ultrapassar este tipo de proteo em binrios nativos no modo GUI (Graphical User Interface). partida, quando este tipo de tarefas realizada, no se tem qualquer tipo de referncia sobre a linguagem de programao usada na construo da aplicao a analisar. De tal forma, necessrio descortinar esse primeiro desafio. Para tal, o uso do CFF Explorer bastante importante, visto que exibe informaes cruciais sobre a o binrio, tal como, a linguagem ou plataforma de programao que deu sua origem, Microsoft Visual C++ 8.

Na imagem acima possvel observar essa informao til (File Info). Como j mencionado acima, existe outras abordagens para corrigir o binrio nativo, mas o objetivo deste tutorial incide no uso do OllyDbg.

Disassembling com o OllyDbg


Quando desejado carregar o binrio, este invoca uma mensagem a informar que o tempo de uso expirou. Provavelmente a data de autorizao expirou. As sesses em seguida, visam esclarecer como corrigir o binrio, por forma, a que esta restrio seja corrigida.

Passos de correo:
Carregar o programa, por forma a perceber o que est a acontecer. Efetuar debug ao programa usando o OllyDbg. Perceber o funcionamento interno do programa ( backward of program), isto , andar para trs. Modificar o binrio de forma a alterar a execuo do bloco de cdigo referente proteo / licena imposta. Por fim, testar as modificaes.

Os passos mencionados tambm podem ser realizados numa outra ferramenta de disassembling, como o caso do poderoso IDA Pro. Uma das principais barreiras no ser um software free, da o uso do OllyDbg, que diga-se de passagem, tambm uma ferramenta bastante poderosa. O primeiro passo a efetuar e como visto nos tutoriais anteriores, carregar o ficheiro binrio e descompil-lo no OllyDbg.

Como possvel observar, a janela CPU main thread mostra o cdigo assembly do binrio. A soluo para corrigir o executvel, visto que no existe acesso ao cdigo-fonte, passa por encontrar a string: A licena expirou. Isto j foi visto num dos tutoriais anteriores, s que a diferena deste, passa por analisar as chamadas na pilha, pois essa mensagem, a determinado momento ser invocada l. Aps o loading do binrio no OllyDgb, ser necessrio definir um break point. A imagem a seguir demostra esse processo.

Clicando na janela main thread com o boto direito do rato, aceder ao menu Search For / All intermodular calls. Neste possvel aceder pilha.

Em seguida, procurar pelo destino USER32.MessageBoxA. Esta a chamada de interesse, pois invocada a msgbox da lib USER32.

necessrio colocar um break point (F2), ele ficar assinalado com a cor vermelha. Em seguida, clicar em Run (F9) ou no boto Run, logo abaixo do menu Debug no OllyDbg. Automaticamente a execuo ser pausada, e vejam o que aconteceu a seguir.

A chamada msgbox feita no local assinalado acima.

Analisando com mais detalhe, o debugging parou na chamada da msgbox. Reparando nas instrues acima, e tendo em conta que os tutoriais anteriores j esto interiorizados, a instruo no offset 00C7141D de extrema importncia, pois ali definido se feito ou no o salto. Por norma, o tipo de correo habitual, passa por alterar a instruo JE SHORT, para que o programa no caa no bloco indesejado, neste caso, a proteo. Uma forma mais elegante de o fazer, alterar a instruo que d origem ao salto, nomeadamente a instruo no offset 00C71416 : MOV EAX,1. Como o valor do EAX na instruo TEST EAX, EAX ser diferente de zero, ento o salto no consumado.

necessrio alterar a instruo: MOV EAX,1 para MOV EAX,0. Desta forma o jump passar a ser vlido e consumado.

Os passos para proceder a essa alterao so: Selecionar a instruo MOV EAX , 1. Carregar na tecla espao para que a janela direita seja aberta. Alterar o valor para MOV EAX 0.

O passo seguinte diz respeito a salvaguarda do binrio com a devida correo, para que, no final possa ser testado. Aps a alterao da instruo acima, a linha ficar seleciona, aproveitando isso, basta clicar no boto direito do rato e aceder ao menu Copy to executable / Selection.

Consequentemente, a seguinte janela ser apresentada, esta corresponde ao cdigo assembly do binrio. Neste ponto, ser necessrio clicar no boto direito do rato e gravar o ficheiro. O nome dado foi correcao.exe.

Por fim, podem-se consultar as alteraes de correo. Como se pode comprovar abaixo, estas esto corretas.

Foi referido neste tutorial, que esta forma de corrigir um binrio nativo construdo sobre .NET, no a mais elegante, pois, existem outras tcnicas e maneiras de o fazer. Esse assunto ser abordado nos seguintes tutoriais com mais detalhes.

Cdigo Fonte do Tutorial


Por forma a melhorar o estudo deste tutorial, o cdigo-fonte e os ficheiros executveis so disponibilizados. Em seguida, apresentado o cdigo relativo ao binrio.

1. #include <Windows.h> 2. 3. int main() 4. { 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. } else text = pass; MessageBoxA(NULL, text, text, MB_OK); return 0; char fail[] = "A licenca expirou"; char pass[] = "Cracked"; char* text; if(true) text = fail;

um simples ficheiro com uma mensagem. Nada de muito complexo, mas em relao aos tutoriais anteriores, percebe-se que houve umas pequenas variantes. A espetacularidade da engenharia reversa isso mesmo, cada problema um novo desafio. Boa continuao e at ao prximo tutorial. Alguma dvida, infptavares@gmail.com http://infptavares.blogspot.pt