9
Caríssimos leitores, o presente tutorial é uma extensão do anterior publicado na secção 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 título de extensão porque, em termos de complexidade e similaridade, é bastante próximo ao anterior. Questão : "Então mas o porquê deste tutorial?" Neste 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. A principal diferença entre estes dois softwares é o grau de complexidade que um possuí em relação ao outro. O IDA Pro é um software bastante completo, mas apresenta um grau de dificuldade bastante superir ao OllyDbg. Aquando a criação de artigos e tutoriais de engenharia reversa, é dada a preferência ao Olly por ser um software de análise não tão detalhada, mas pelo contrário, mais simplista. O tutorial anterior foi construído tomando como base o software de debugging OllyDbg. Querendo mostrar aos leitores as potêncialidades do IDA Pro, foi idelizado o seguinte tutorial. Cenário: É disponibilizadada uma aplicação (.exe), que é ramificada de duas formas. Se o utilizador ao iniciá-la introduzir a password correta, uma mensagem de sucesso é apresentada, caso contrário, sucessivas mensagens de tratamentos de erros e proteção são mostradas na janela. -Ferramentas de Trabalho -Aplicação (crack-me.exe) : Esta é a aplicação de trabalho. É necessário fazer download da respetiva. -IDA Pro : Esta ferramenta é um debugger que será necessário para interpretar o executável e efetuar alterações no código assembly do mesmo. É uma ferramenta bastante completa de disassembling e debugging. -Código-fonte da aplicação / executável Como mencionado no artigo anterior (link ), por forma a motivar e deixar claras as instruções assembly apresentadas, o código-fonte da aplicação é disponibilizado. Com isso, existe a possibilidade de comparação entre código-fonte e instruções assembly . Convém lembrar que, o artigo sobre "Introdução ao Assembly" disponível no blog, é imprescindível 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 código-fonte relativo à aplicação em estudo é apresentado em seguida.

Tutorial 2 - Reverse Engineering

Embed Size (px)

DESCRIPTION

Tutorial 2 - Reverse Engineering [email protected]://infptavares.blogspot.pt

Citation preview

Caríssimos leitores, o presente tutorial é uma extensão do anterior publicado na secção 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 título de extensão porque, em termos de complexidade e similaridade, é bastante próximoao anterior.

Questão: "Então mas o porquê deste tutorial?"

Neste 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.

A principal diferença entre estes dois softwares é o grau de complexidade que um possuí em relaçãoao outro. O IDA Pro é um software bastante completo, mas apresenta um grau de dificuldadebastante superir ao OllyDbg. Aquando a criação de artigos e tutoriais de engenharia reversa, é dadaa preferência ao Olly por ser um software de análise não tão detalhada, mas pelo contrário, maissimplista.

O tutorial anterior foi construído tomando como base o software de debugging OllyDbg. Querendomostrar aos leitores as potêncialidades do IDA Pro, foi idelizado o seguinte tutorial.

Cenário: É disponibilizadada uma aplicação (.exe), que é ramificada de duas formas. Se outilizador ao iniciá-la introduzir a password correta, uma mensagem de sucesso é apresentada, casocontrário, sucessivas mensagens de tratamentos de erros e proteção são mostradas na janela.

-Ferramentas de Trabalho

-Aplicação (crack-me.exe) : Esta é a aplicação de trabalho. É necessário fazer download da respetiva.-IDA Pro : Esta ferramenta é um debugger que será necessário para interpretar o executável eefetuar alterações no código assembly do mesmo. É uma ferramenta bastante completa dedisassembling e debugging.

-Código-fonte da aplicação / executável

Como mencionado no artigo anterior (link), por forma a motivar e deixar claras as instruçõesassembly apresentadas, o código-fonte da aplicação é disponibilizado. Com isso, existe apossibilidade de comparação entre código-fonte e instruções assembly. Convém lembrar que, oartigo sobre "Introdução ao Assembly" disponível no blog, é imprescindível para este e os restantestutoriais do tema. (O link para o tutorial é o seguinte:http://infptavares.blogspot.pt/2013/12/introducao-ao-assembly.html .)

O código-fonte relativo à aplicação em estudo é apresentado em seguida.

Como é possível perceber, o código-fonte apresentado é evidente. Ele é muito parecido ao tutorialanterior, como já referido algumas vezes. Neste são capturados os valores introduzidos na consola(linha de comandos) pelo utilizador. Existem duas combinações possíveis, a correta e a nãocorreta.

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 não sabe a password correta para obter amensagem de sucesso "Password Correta! Parabens!". Existe a necessidade de crackar aaplicação. Em seguida, são devidamente comentados e efetuados todos os passos necessários paraobtenção da password correta.

Passo1: Carregar o executável (aplicação) no IDA Pro.

Para iniciar qualquer processo de debugging, basta arrastar o executável a analisar para dentro doIDA Pro, tal como o próprio software aconselha. As imagems abaixo ilustram esse processo.

Após o drag and drop do executável, ele é carregado em memória e no debugger.

Passo2: Disassembled Code

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

É possível fazer drag and drop do fluxo apresentado, por forma a navegar no diagrama. Caso oexecutável possua muitos blocos, é possível fazer uma mini navegação através do Graph overview,posicionado no canto inferior direito, como mostra a imagem acima.Uma das vantagens evidentes deste software em relação ao OllyDbg é sem dúvida a estruturação doexecutável 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, porforma a centar o fluxograma.

É possível observar na seguinte imagem que existem 6 blocos de código distintos, foramassinalados com 6 labels diferentes, nomeadamente de A-E. Estas labels têm uma correspondenciano código. Será visto mais abaixo.

Para analisar em detalhe cada bloco é possível usar a ajuda disponibilizada pelo IDA Pro. Como jávisto, é possível dar um clique com o botão direito do rato no separador "ViewA" e clicar em "Zoom100%". A imagem seguinte é representativa desse processo.

Posto isto, e fazendo drag and drop no fluxograma para o bloco assinalado com a label A, épossível encontrar as instruções assembly iniciais. A imagem a seguir apresenta as instruçõesrelativas ao bloco inicial.

Não existe a necessidade de perceber todas as instruções, visto que apenas duas delas sãoimportantes, nomeadamente as duas últimas.

cmp [ebp+arg_0] , 2jz short loc_4113C2

Como visto nos artigos anteriores de engenharia reversa, a instrução cmp (comparar) faz umacomparação entre duas variáveis. 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: Código-Fonte

Voltando a observar o código-fonte doexecutável é possível perceber ondeestas instruções assemlby encaixam nocódigo.

Qualquer operação de jump salta para um offset dependendo do tipo de instrução e do valor dasflags. 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 análise pormenorizada, o bloco da esquerda é o bloco mau, e o da direita o blocobom. Isto é, caso o parametro argc seja diferente de 2, o programa irá cair sempre no bloco daesquerda, e automáticamente o programa é terminado. Caso argc=2, então o fluxo do programa éenviado para o bloco da direita.O processo é o mesmo, neste é feita uma comparação com o valorde entrada, se for igual a "1337". Dependo da flag é realizado um determinado jump.

Este processo é exatamente igual à análise 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 lógica, não é desejado efetuar o jump do bloco marcado com a label C.

Para crackar este executável, apenas bastava substituir o endereço (offset) loc_401319 porloc_4012D5. Esta alteração já foi feita e está refletida na imagem acima.

Como referenciado no artigo do OllyDbg (mencionado acima), uma das principais técnicas é efetuara procura por Strings de referência, neste caso nem existe a necessidade, pois o IDA Pro éextremamente eficáz na divisão de blocos e torna-se fácil fazer a associação e descobrir a passwordpara crack do executável.

Os casos de interesse estão marcados a laranja. É possível analisar 3 instruções muito importantes.

mov [esp+18h+var_14] , offset a1337 ; "1337"test eax , eaxjnz short loc_401306

Inicialmente é colocado o valor "1337" numa variável, através da instrução mov. Mais abaixo, éfeita a comparação através da instrução test. A instrução jnz faz o salto se a comparação não forzero, o que quer dizer que a password introduziada pelo utilizador for diferente de 1337 então nãoé atingido o bloco desejado!

É fácil perceber que a password com privilégios é 1337.

Antes de fazer o teste via linha de comandos, é feita a comparação de cada bloco de código com ocódigo-fonte do executável.

Verificando a comparação entre o código assembly do execútavel e o próprio código-fonte, é fácil de perceber toda a correspondência.

Passo4 : Crack

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

Não houve enganos.

Nos próximos artigos de engenharia reversa serão abordados outros pormenores e técnicas do tema.

Boa Continuação!Visite: infptavares.blogspot.pt