Vous êtes sur la page 1sur 9

Carssimos leitores, o presente tutorial uma extenso do anterior publicado na seco de

"Engenharia Reversa" deste blog, pode ser consultado no seguinte link:


http://infptavares.blogspot.pt/2013/12/tutorial-1-crackar-um-executavel.html

Ganhou o ttulo de extenso porque, em termos de complexidade e similaridade, bastante prximo


ao anterior.

Questo: "Ento mas o porqu deste tutorial?"

Neste blog e no mundo da engenharia reversa, muito comum o uso de dois disassamblers /
debuggers de cdigo, nomeadamente o IDA Pro e o Ollydbg.

A principal diferena entre estes dois softwares o grau de complexidade que um possu em relao
ao outro. O IDA Pro um software bastante completo, mas apresenta um grau de dificuldade
bastante superir ao OllyDbg. Aquando a criao de artigos e tutoriais de engenharia reversa, dada
a preferncia ao Olly por ser um software de anlise no to detalhada, mas pelo contrrio, mais
simplista.

O tutorial anterior foi construdo tomando como base o software de debugging OllyDbg. Querendo
mostrar aos leitores as potncialidades do IDA Pro, foi idelizado o seguinte tutorial.

Cenrio: disponibilizadada uma aplicao (.exe), que ramificada de duas formas. Se o


utilizador ao inici-la introduzir a password correta, uma mensagem de sucesso apresentada, caso
contrrio, sucessivas mensagens de tratamentos de erros e proteo so mostradas na janela.

-Ferramentas de Trabalho

-Aplicao (crack-me.exe) : Esta a aplicao de trabalho. necessrio fazer download da


respetiva.
-IDA Pro : Esta ferramenta um debugger que ser necessrio para interpretar o executvel e
efetuar alteraes no cdigo assembly do mesmo. uma ferramenta bastante completa de
disassembling e debugging.

-Cdigo-fonte da aplicao / executvel

Como mencionado no artigo anterior (link), por forma a motivar e deixar claras as instrues
assembly apresentadas, o cdigo-fonte da aplicao disponibilizado. Com isso, existe a
possibilidade de comparao entre cdigo-fonte e instrues assembly. Convm lembrar que, o
artigo sobre "Introduo ao Assembly" disponvel no blog, imprescindvel para este e os restantes
tutoriais do tema. (O link para o tutorial o seguinte:
http://infptavares.blogspot.pt/2013/12/introducao-ao-assembly.html .)

O cdigo-fonte relativo aplicao em estudo apresentado em seguida.


Como possvel perceber, o cdigo-fonte apresentado evidente. Ele muito parecido ao tutorial
anterior, como j referido algumas vezes. Neste so capturados os valores introduzidos na consola
(linha de comandos) pelo utilizador. Existem duas combinaes possveis, a correta e a no
correta.

1. :> crack-me.exe teste (Password Errada.)


2. :> crack-me.exe 1337 (Password Correta.)

De seguida exibida uma imagem que retrata estes casos.

A password correta 1337. partida, o utilizador no sabe a password correta para obter a
mensagem de sucesso "Password Correta! Parabens!". Existe a necessidade de crackar a
aplicao. Em seguida, so devidamente comentados e efetuados todos os passos necessrios para
obteno da password correta.

Passo1: Carregar o executvel (aplicao) no IDA Pro.

Para iniciar qualquer processo de debugging, basta arrastar o executvel a analisar para dentro do
IDA Pro, tal como o prprio software aconselha. As imagems abaixo ilustram esse processo.
Aps o drag and drop do executvel, ele carregado em memria e no debugger.
Passo2: Disassembled Code

Em seguida, procurar no IDA Pro o separador IDA ViewA (por defeito este selecionado), e em
seguida, maximizar a janela, como apresenta a imagem abaixo.

possvel fazer drag and drop do fluxo apresentado, por forma a navegar no diagrama. Caso o
executvel possua muitos blocos, possvel fazer uma mini navegao atravs do Graph overview,
posicionado no canto inferior direito, como mostra a imagem acima.
Uma das vantagens evidentes deste software em relao ao OllyDbg sem dvida a estruturao do
executvel por blocos num fluxo, pois torna evidente os saltos (JUMPS) entre blocos.

Este software bastante user friendly, visto que se houver a necessidade de ajustar o fluxograme
janela, basta utilizar as ferramentas de ajuda. A imagem abaixo, ilustra o uso do Fit Window, por
forma a centar o fluxograma.
possvel observar na seguinte imagem que existem 6 blocos de cdigo distintos, foram
assinalados com 6 labels diferentes, nomeadamente de A-E. Estas labels tm uma correspondencia
no cdigo. Ser visto mais abaixo.

Para analisar em detalhe cada bloco possvel usar a ajuda disponibilizada pelo IDA Pro. Como j
visto, possvel dar um clique com o boto direito do rato no separador "ViewA" e clicar em "Zoom
100%". A imagem seguinte representativa desse processo.

Posto isto, e fazendo drag and drop no fluxograma para o bloco assinalado com a label A,
possvel encontrar as instrues assembly iniciais. A imagem a seguir apresenta as instrues
relativas ao bloco inicial.
No existe a necessidade de perceber todas as instrues, visto que apenas duas delas so
importantes, nomeadamente as duas ltimas.

cmp [ebp+arg_0] , 2
jz short loc_4113C2

Como visto nos artigos anteriores de engenharia reversa, a instruo cmp (comparar) faz uma
comparao entre duas variveis. Neste caso, verificado se o valor de entrada no parametro argc
igual a 2. Em seguida feito um salto para outro bloco do fluxograma dependendo do valor da flag.

Passo3: Cdigo-Fonte

Voltando a observar o cdigo-fonte do


executvel possvel perceber onde
estas instrues assemlby encaixam no
cdigo.
Qualquer operao de jump salta para um offset dependendo do tipo de instruo e do valor das
flags. Neste caso jz short loc_4113C2 faz um salto para o loc_4113C2. Este offset est
representado a laranja e corresponde ao bloco da direita na seguinte imagem.

Fazendo uma anlise pormenorizada, o bloco da esquerda o bloco mau, e o da direita o bloco
bom. Isto , caso o parametro argc seja diferente de 2, o programa ir cair sempre no bloco da
esquerda, e automticamente o programa terminado. Caso argc=2, ento o fluxo do programa
enviado para o bloco da direita.O processo o mesmo, neste feita uma comparao com o valor
de entrada, se for igual a "1337". Dependo da flag realizado um determinado jump.

Este processo exatamente igual anlise feita no tutorial anterior. Pode ser visto no link a seguir.
http://infptavares.blogspot.pt/2013/12/tutorial-1-crackar-um-executavel.html

Segundo a lgica, no desejado efetuar o jump do bloco marcado com a label C.

Para crackar este executvel, apenas bastava substituir o endereo (offset) loc_401319 por
loc_4012D5. Esta alterao j foi feita e est refletida na imagem acima.

Como referenciado no artigo do OllyDbg (mencionado acima), uma das principais tcnicas efetuar
a procura por Strings de referncia, neste caso nem existe a necessidade, pois o IDA Pro
extremamente eficz na diviso de blocos e torna-se fcil fazer a associao e descobrir a password
para crack do executvel.
Os casos de interesse esto marcados a laranja. possvel analisar 3 instrues muito importantes.

mov [esp+18h+var_14] , offset a1337 ; "1337"


test eax , eax
jnz short loc_401306

Inicialmente colocado o valor "1337" numa varivel, atravs da instruo mov. Mais abaixo,
feita a comparao atravs da instruo test. A instruo jnz faz o salto se a comparao no for
zero, o que quer dizer que a password introduziada pelo utilizador for diferente de 1337 ento no
atingido o bloco desejado!

fcil perceber que a password com privilgios 1337.

Antes de fazer o teste via linha de comandos, feita a comparao de cada bloco de cdigo com o
cdigo-fonte do executvel.
Verificando a comparao entre o cdigo assembly do exectavel e o prprio cdigo-fonte, fcil
de perceber toda a correspondncia.

Passo4 : Crack

Neste ponto, apenas falta verificar se a password com acesso previligiado mesmo 1337.

No houve enganos.

Nos prximos artigos de engenharia reversa sero abordados outros pormenores e tcnicas do tema.

Boa Continuao!
Visite: infptavares.blogspot.pt