Você está na página 1de 8

Carssimos leitores, o presente tutorial o primeiro sobre engenharia reversa no blog. um exerccio bastante simples e introdutrio ao tema.

a. No sero abordados detalhes em demasia, visto ser um exerccio de grau fcil. material usado no tutorial uma aplica!o programada na linguagem C. "sta aplica!o consiste num ficheiro executvel #EXE$ %ue permite efetuar opera!&es de soma #calculadora de somar$. 'penas so permitidas opera!&es com nmeros inteiros iguais ou menores ao valor inteiro 4 na sua verso experimental #trial$. (ara efetuar clculos com valores superiores a 4 necessrio ter a aplica!o licenciada. ob)etivo ser ultrapassar esta limita!o atravs da anlise do cdigo assembly do executvel. Convm lembrar %ue o artigo sobre * Introduo ao Assembly* disponnvel no blog imprescindvel para este e os restantes tutoriais do tema. # link no blog para o tutorial o seguinte+ http+,,infptavares.blogspot.pt,-./0,/-,introducao1ao1assembl2.html .

-Ferramentas de Trabalho
1Aplicao #app.exe$ + "sta a aplica!o de trabalho. 3a!a download da respetiva. 1 llydbg + "sta ferramenta um debbugger %ue ser necessrio para interpretar o executvel e efetuar altera!&es no cdigo assembly do mesmo. uma ferramenta bastante completa de disassembler e debugger.

!ue "# e como se $a% um crack&

Crackar um software ou uma aplica!o no mais do %ue modificar o cdigo binrio da aplica!o para causar ou evitar procedimentos na sua execu!o. 4sto conseguido atravs de engenharia reversa do cdigo do programa compilado, utili5ando um debugger como o Ollydbg para atingir determinada fun!o ou sub1rotina %ue possu o mtodo de prote!o do cdigo da aplica!o. binrio ento modificado usando o debugger ou um editor hexadecimal, para substitui!o da ramifica!o do programa atravs do seu complemento ou atravs de um opcode NOP para saltar ou executar uma fun!o ou sub1rotina especifica. cdigo da aplica!o %ue pretendido crackar o seguinte, compilado no DevC++.

Como possvel perceber este o cdigo %ue d origem ao executvel a analisar. Nos prximos tutoriais no haver acesso ao cdigo1fonte do executvel, mas como importante perceber como as instru!&es assembly se relacionam com as instru!&es de cdigo, este disponibili5ado. 3a5endo uma prvia e rpida anlise ao cdigo, possvel visuali5ar %ue possu uma instru!o condicional #IF$. 6e as variaveis num1 e num2 forem maiores %ue o valor inteiro 4, a aplica!o dispara um alerta *A verso trial apenas suporta nmeros menores !ue 4'* e a execu!o da mesma terminada. Caso contrrio, a soma consolidada e o resultado apresentado na )anela em execu!o. "m seguida, segue uma imagem ilustrando a sua execu!o via linha de comandos #cmd.exe$.

Na imagem acima so apresentados os dois cenrios possveis+ (' 6oma entre os valores #num1 e num $ menores %ue 7. )' 6e um dos valores #num1 ou num $ for maior %ue 7, um alerta disparado e a execu!o terminada. ob)etivo ultrapassar o cen*rio ) e conseguir e$etuar somas entre !uais!uer valores inteiros. + necess*rio saltar a condio , mtodo de verifica!o, neste caso o 43 de compara!o das variveis.

,asso (- Carregar .load/ o e0ecut*vel no Ollydbg'

'ps abrir o ficheiro executvel no debugger # possvel arrast1lo$ ser necessrio clicar no buto executar, como mostrado na imagem acima. "na %ue confuso, mas calma, nos prximos tutoriais a coisa vai ficar pior8 No sero explicados todos os mdulos deste debugger, pois eles sero explicados 9 medida %ue for necessrio.

,asso )- ,rocurar por Strings de re$er1ncia'


(or norma, o primeiro teste %ue se deve fa5er a pes!uisa por vari*veis no c2digo. (or ve5es, o executvel trs em anexo algumas pistas importantes e %ue a)uda em muito o engenheiro reverso. Normalmente, isto acontece em pe%uenas aplica!&es programadas na linguagem C, sem %ual%uer tipo de prote!o ou ofusca!o. (ara se proceder com tal pes%uisa, basta seguir o menu como mostra a seguinte imagem.

(ara aceder ao seguinte menu necessrio clicar com o boto direito do rato sobre o cdigo assembly e navegar at ao seguinte menu+ Search for > All referenced text strings.

:ma )anela foi aberta pelo debugger, esta contm informa!o sobre as strings ascii em anexo ao cdigo. possvel perceber, %ue aparecem as strings referentes 9 mensagem disparada na aplica!o. (or norma, e comum, esta )anela conter imensas strings devido ao tamanho do exec;tavel e da aplica!o, pois torna1se complicado encontr1las a olho n;, portanto uma solu!o + (' 'nalisar a aplica!o #exec;tavel$ , isto , corre1lo, e verificar se alguma string lan!ada. Neste caso, a aplica!o executada na linha de comandos lan!a a seguite mensagem+ A verso trial apenas suporta nmeros menores !ue 4' "ste o tipo de pes%uisa %ue deve ser feito no debugger. (ara tal, basta clicar com o boto direito do rato sobre a )anela de strings de re$er1ncia, aceder ao menu, clicar em Search For ext, e digitar palavras chave #key$ na caixa de texto. Como sabido, a string alvo contm a palavra *trial*.

Conse%uentemente, aps o cli%ue em 3# a string alvo ser selecionada no debugger. <e seguida necessrio ir ao encontro do endere!o onde esta string se encontra no assembly.

<eve ser seguido o seguinte fluxo ilustrado acima. (or conse%u=ncia as instru!&es relativas ao mtodo %ue impede a execu!o da soma so apresentadas. "m seguida uma imagem %ue apresenta esses resultados.

Na imagem acima foram marcadas 0 regi&es. Com o n;mero / a primeira compara!o, feita a compara!o atravs da instru!o !"P #comparar$ se o valor " maior !ue 4. Como visto no artigo sobre assembly, aps uma instru!o de !"P existe sempre um salto ##$"P$. !ump o seguinte. 45 67 8T app'9949()A4 3a5endo uma consulta 9 listagem apresentada no artigo de assembly possvel ver a especifica!o deste !ump.

:m salto reali5ado se A: ; <:, neste caso se a varivel num1 ; 4'

>oltando ao assembly" uma outra instru!o no ponto - apresentada, fa5 exatamente o mesmo, caso a varivel num2 ; 4 fa5 um salto. "ste salto efetuado para o offset 9949()A4 %ue o endere!o correspondente 9 mensagem *A verso trial apenas nmeros menores !ue 4'*. =ual " a soluo? "fetuar um NOP #ignorar$ aos - !umps. 4sto , a instru!o 45 67 8T app'9949()A4 ser ignorada no cdigo assembly.

,asso>- NOP no #$"P


Como mostra a seguinte imagem, necessrio selecionar a instru!o 45 #o !ump$, clicar com o boto direito do rato, aceder a %inary e aplicar o NOP, #Fill &ith NOPs$.

'ps efetuar a altera!o possvel visuali5ar as seguintes altera!&es, como mostra a imagem abaixo.

s 'um(s foram substitudos por instru!&es NOP)s, basicamente foram ignorados. 4sto fa5 com %ue a aplica!o nunca salte para o trecho de cdigo onde terminada a execu!o caso uma das variveis num1 ou num2 fossem maiores !ue 4.

,asso 4- 5ravar as mudanas e e0portar o bin*rio .crack/'


(ara gravar as altera!&es necessrio clicar com o boto direito do rato na )anela e seguir at ao menu *!o(y to executable > All modifications*, como mostra a imagem a seguir.

(or fim, uma outra )anela ser aberta. "sta contm todo o cdigo do executvel ) alterado, restar gerar o ficheiro executvel.

(ara o devido efeito como mostra a imagem, necessrio aceder ao menu Sa*e File+ definir um nome original. e.g., crack'

(or fim, existem 0 ficheiros, o ficheiro de cdigo1fonte, o ficheiro executvel de teste e o ficheiro de teste crackado. 3inali5ando com a execu!o do programa, possvel comprovar %ue foi superada a verifica!o , licen!a da aplica!o, pois ) possvel efetuar opera!&es de soma com n;meros inteiros superior a 7.

"spero %ue no ha)a d;vidas. 't ao prximo tutorial. @oa Continua!o8 >iste+ in$ptavares'blogspot'pt '