Você está na página 1de 9

Carssimos leitores, o presente tutorial uma extenso do anterior publicado na seco de "Engenharia Reversa" deste blog, pode ser

r consultado no seguinte link: http://infptavares.blogspot.pt/ !"#/" /tutorial$"$crac%ar$um$executavel.html &anhou o ttulo de extenso por'ue, em termos de complexidade e similaridade, bastante pr(ximo ao anterior. Questo: "Ento mas o porqu deste tutorial?" )este blog e no mundo da engenharia reversa, muito comum o uso de dois disassamblers / debuggers de c(digo, nomeadamente o IDA Pro e o Ollydbg.

* principal diferena entre estes dois softwares o grau de complexidade 'ue um possu em relao ao outro. + IDA Pro um software bastante completo, mas apresenta um grau de dificuldade bastante superir ao OllyDbg. *'uando a criao de artigos e tutoriais de engenharia reversa, dada a prefer,ncia ao Olly por ser um software de an-lise no to detalhada, mas pelo contrrio, mais simplista. + tutorial anterior foi construdo tomando como base o software de debugging OllyDbg. .uerendo mostrar aos leitores as pot,ncialidades do IDA Pro, foi ideli/ado o seguinte tutorial.

Cenrio: 0 disponibili/adada uma aplicao 1.exe2, 'ue ramificada de duas formas. 3e o


utili/ador ao inici-$la introdu/ir a password correta, uma mensagem de sucesso apresentada, caso contr-rio, sucessivas mensagens de tratamentos de erros e proteo so mostradas na 4anela.

-Ferramentas de Trabalho
-Aplica o !crac"-me#e$e% : 5sta a aplicao de trabalho. 0 necess-rio fa/er download da respetiva. -IDA Pro : 5sta ferramenta um debugger 'ue ser- necess-rio para interpretar o execut-vel e efetuar altera6es no c(digo assembly do mesmo. 0 uma ferramenta bastante completa de disassembling e debugging.

-C&di'o-(onte da aplica o ) e$ecut*el


Como mencionado no artigo anterior 1link2, por forma a motivar e deixar claras as instru6es assembly apresentadas, o c(digo$fonte da aplicao disponibili/ado. Com isso, existe a possibilidade de comparao entre c(digo$fonte e instru6es assembly. Convm lembrar 'ue, o artigo sobre "+ntrodu o ao Assembly" disponvel no blog imprescindvel para este e os restantes tutoriais do tema. 1+ link para o tutorial o seguinte: http://infptavares.blogspot.pt/ !"#/" /introducao$ao$assembl7.html .) + c(digo$fonte relativo 8 aplicao em estudo apresentado em seguida.

Como possvel perceber, o c(digo$fonte apresentado evidente. 5le muito parecido ao tutorial anterior, como 4- referido algumas ve/es. )este so capturados os valores introdu/idos na consola 1linha de comandos2 pelo utili/ador. 5xistem duas combina6es possveis, a correta e a no correta. ,# :9 crac"-me#e$e teste 1Password Errada.2 -# :9 crac"-me#e$e ,../ 1Password Correta.2 :e seguida exibida uma imagem 'ue retrata estes casos.

* password correta 1337. ; partida, o utili/ador no sabe a password correta para obter a mensagem de sucesso "Password Correta! Parabens!". 5xiste a necessidade de !ra!kar a aplicao. 5m seguida, so devidamente comentados e efetuados todos os passos necess-rios para obteno da password correta.

0asso,: Carre'ar o e$ecut*el !aplica o% no +1A 0ro#


<ara iniciar 'ual'uer processo de debugging basta arrastar o execut-vel a analisar para dentro do IDA Pro, tal como o pr(prio software aconselha. *s imagems abaixo ilustram esse processo.

*p(s o drag and drop do execut-vel, ele carregado em mem(ria e no debugger.

0asso-: 1isassembled Code


5m seguida, procurar no IDA Pro o separador IDA ViewA 1por defeito este selecionado2, e em seguida, maximi/ar a 4anela, como apresenta a imagem abaixo.

0 possvel fa/er drag and drop do fluxo apresentado, por forma a navegar no diagrama. Caso o execut-vel possua muitos blocos, possvel fa/er uma mini navegao atravs do "raph overview, posicionado no canto inferior direito, como mostra a imagem acima. =ma das vantagens evidentes deste software em relao ao OllyDbg sem d>vida a estruturao do execut-vel por blocos num fluxo, pois torna evidente os saltos 1#$%P&2 entre blocos. 5ste software bastante user friendly, visto 'ue se houver a necessidade de a4ustar o fluxograme 8 4anela, basta utili/ar as ferramentas de a4uda. * imagem abaixo, ilustra o uso do Fit Window, por forma a centar o fluxograma.

0 possvel observar na seguinte imagem 'ue existem ? blocos de c(digo distintos, foram assinalados com ? labels diferentes, nomeadamente de A-E. 5stas labels t,m uma correspondencia no c(digo. 3er- visto mais abaixo.

<ara analisar em detalhe cada bloco possvel usar a a4uda disponibili/ada pelo IDA Pro. Como 4visto, possvel dar um cli'ue com o boto direito do rato no separador " 'iewA" e clicar em "2oom ,334". * imagem seguinte representativa desse processo.

<osto isto, e fa/endo drag and drop no fluxograma para o bloco assinalado com a label A, possvel encontrar as instru6es assembly iniciais. * imagem a seguir apresenta as instru6es relativas ao bloco inicial.

)o existe a necessidade de perceber todas as instru6es, visto 'ue apenas duas delas so importantes, nomeadamente as duas >ltimas. cmp 5ebp6ar'738 , 9: short loc7;,,.CComo visto nos artigos anteriores de engenharia reversa, a instruo !mp 1comparar2 fa/ uma comparao entre duas vari-veis. )este caso, verificado se o valor de entrada no parametro arg igual a . 5m seguida feito um salto para outro bloco do fluxograma dependendo do valor da !lag.

0asso.: C&di'o-Fonte
@oltando a observar o c(digo$fonte do execut-vel possvel perceber onde estas instru6es assemlby encaixam no c(digo.

.ual'uer operao de (ump salta para um offset dependendo do tipo de instruo e do valor das flags. )este caso 9: short loc7;,,.C- fa/ um salto para o loc7;,,.C-# 5ste offset estrepresentado a laran4a e corresponde ao bloco da direita na seguinte imagem.

Aa/endo uma an-lise pormenori/ada, o bloco da es'uerda o bloco mau, e o da direita o bloco bom. Bsto , caso o parametro arg se4a diferente de , o programa ir- cair sempre no bloco da es'uerda, e autom-ticamente o programa terminado. Caso arg "#$ ento o fluxo do programa enviado para o bloco da direita.+ processo o mesmo, neste feita uma comparao com o valor de entrada, se for igual a ",../". :ependo da flag reali/ado um determinado (ump. 5ste processo exatamente igual 8 an-lise feita no tutorial anterior. <ode ser visto no link a seguir. http://infptavares.blogspot.pt/ !"#/" /tutorial$"$crac%ar$um$executavel.html 3egundo a l(gica, no dese4ado efetuar o (ump do bloco marcado com a label C.

<ara !ra!kar este execut-vel, apenas bastava substituir o endereo 1offset2 loc7;3,.,< loc7;3,-1=. 5sta alterao 4- foi feita e est- refletida na imagem acima.

por

Como referenciado no artigo do OllyDbg 1mencionado acima2, uma das principais tcnicas efetuar a procura por &trings de refer,ncia, neste caso nem existe a necessidade, pois o IDA Pro extremamente efic-/ na diviso de blocos e torna$se f-cil fa/er a associao e descobrir a password para ra % do execut-vel.

+s casos de interesse esto marcados a laran4a. 0 possvel analisar # instru6es muito importantes. mo* 5esp6,>h6*ar7,;8 , o((set a,../ ? @,../@ test ea$ , ea$ 9n: short loc7;3,.3A Bnicialmente colocado o valor ",../" numa vari-vel, atravs da instruo mo&. Cais abaixo, feita a comparao atravs da instruo test. * instruo 'n( fa/ o salto se a comparao no (or :ero, o 'ue 'uer di/er 'ue a password introdu/iada pelo utili/ador (or di(erente de ,../ ento no B atin'ido o bloco dese9adoC 0 f-cil perceber 'ue a password com privilgios ,../. *ntes de fa/er o teste via linha de comandos, feita a comparao de cada bloco de c(digo com o c(digo$fonte do execut-vel.

@erificando a comparao entre o c(digo assembly do exec>tavel e o pr(prio c(digo$fonte, f-cil de perceber toda a correspond,ncia.

0asso; : Crac"
)este ponto, apenas falta verificar se a password com acesso previligiado mesmo ,../.

)o houve enganos. )os pr(ximos artigos de engenharia reversa sero abordados outros pormenores e tcnicas do tema. Doa ContinuaoE @isite: in(pta*ares#blo'spot#pt