Fala galera, como vai a luta contra o Desafio 7?? Imagino que a adrenalina aumentou um pouco. Se alguém passar do Desafio 7, é um sinal de excelente conhecimento e habilidade.

Esse Post da série Crackeando, foi quebrado em dois. Dessa forma, quem não conseguiu sair do zero nesse desafio, pode ver a primeira fase de uma possível análise e continuar a partir daí.

Quem já leu essa parte, pode passar direto para a parte 6.2

Voltando ao nosso já quebrado Escondedor versão 6, eu pensei que ele daria um pouco mais de trabalho para as pessoas, mas eu vi que ele nem doeu 🙂 Mas para quem não captou a técnica, acompanhe o raciocínio. 

[[ O Alvo ]] 

O Escondedor V6 mudou de aparência. Agora ele é um programa de linha de comando:

Z:\>Escondedor-V6.exe

Desafio CodeBunker – Escondedor Versao 6
—————————————-

        Digite a senha correta para obter o artigo.
        Em caso de sucesso, o artigo sera gravado no diretorio temporario do Win
dows
—————————————-

Uso:
        Escondedor-V6 <Senha> <Caminho>

<Senha> e a senha que deve ser utilizada para recuperar o artigo.<Arquivo> e o n
ome do arquivo onde deve ser salvo o artigo, incluindo o caminho.

Z:\>

E o que isso implica??? Primeiro, não poderemos simplesmente seguir a mesma linha de raciocínio que utilizamos em desafios anteriores. O software mudou.. temos que começar a análise do zero… 🙁…. Calma esse que é lado bom 🙂 🙂 🙂 Acredito que vocês não aguentavam mais aquela tela feia (um dia eu pago um designer pro site).

Pois bem, vamos primeiro fazer o que ele pede. Não custa nada tentar uma senha besta só pra ver se "cola".

Z:\>Escondedor-V6.exe "senhabestaqualquer" C:\saiporfavor.zip

*** Senha Invalida!! Voce so pode estar sacaneando!

Z:\>

Droga… esse desgraçado realmente verifica a senha. Às vezes essa verificação é tão trivial que você mata brincando. Desta vez não foi assim.. Mas chegaremos lá 🙂

[[ A Biópsia ]]

Queremos a senha, não sabemos o tamanho dela e não tem mais botão, MessageBox ou CreateWindow pra gente monitorar…. e agora? Vamos coletar informações com o nosso mais fiel amigo, o Pluto…. Peraí!! Não estou falando do seu cachorro, estou falando do PE Explorer!

Novamente, sabemos que o programa possui um artigo escondido.. então, vamos olhar os Resources do programa, como você aprendeu nos Desafios 1 e 2.

PE Explorer - Resources

Bem diferente daquele outro, não é? Esse só possui um Resource!! De cara. você vê que este software não foi feito em Delphi.. mas o seu resource mostra uma informação bastante intuitiva: Microsoft.VC80.CRT.

Com isso, você já matou a charada: É um software que possui uma dependência do RunTime do Visual C++ 8.0, que é o 2005. É claro que alguém poderia ter colocado aquele resource lá propositalmente apenas para te enganar, mas isso é pouco provável.

Para confirmar que ele está realmente utilizando essa biblioteca, vamos utilizar um recurso do PE Explorer chamado Dependency Scanner, utilizando o menu Tools | Dependency Scanner….

PE Explorer - Dependency Scanner

Lá dentro, vemos que realmente há uma dependência dessa biblioteca. Com isso, sabemos que este é, com 99% de probabilidade, um programa criado em Visual C++ 2005. Mas o que a gente pode fazer com essa informação??

Bem, assim como capturamos alguns vícios de um programador Delphi, podemos capturar alguns vícios de um programador C e saber como o cara deve ter feito o programa… É só olhar outros programas feitos em C pra ver que há vícios similares. Outro uso interessante é o de saber o que o compilador gera em Assembly no final das contas. Por exemplo, você sabe que as strings no C são diferentes do Delphi, elas terminam com o caractere zero (0x00).

E ficamos com uma dúvida bastante específica… Se o artigo não está gravado como um Resource… Então como ele está gravado?? Bem, há formas e formas, tem gente que grava o que deveria ser um Resource no final do binário… Mas isso não atrapalha no checksum??? Bem, o cara dá um jeitinho.

Pra tirar essa dúvida, vamos abrir o Executável do Escondedor com o seu melhor amigo, o Olly Debugger… Mas o nosso melhor melhor amigo não era o PE Explorer??? Bem, temos que aprender a ter vários melhores amigos. É saudável.

Vamos utilizar a nossa super-técnica de procurar strings pra ver se elas estão encriptadas… Se não estiverem, o nosso trabalho fica mais fácil.

No OllyDebugger, clicamos com o botão direito na área do Disassembler e clicamos no menu Search For | All referenced text strings

Olly Debugger - Menu Strings

Olly Debugger - Strings

E olha o que encontramos: A string da mensagem de erro! Então parece que o trabalho será bastante fácil. Encontramos quase tudo o que precisamos. Clicando duas vezes na string, vamos para o código no Disassembler que faz referência a essa string.

Olly Debugger - Disassembler

Bom, dando uma olhada nesse código, vemos que essa string está sendo repassada como parâmetro da função printf, conhecida de quem é íntimo da linguagem C. E também vemos que, antes dessa chamada, existe um JE (Jump If Equal) que pula a mensagem de erro, se o valor de EAX for diferente de 0A (10 – vide comando CMP duas linhas antes).

Logo abaixo da mensagem de erro, você encontra a função exit, que sai do programa, com o status 2. Se você pressionar <ENTER> em cima do comando JE mencionado, ele vai selecionar a linha referenciada pelo Jump. Quando fazemos isso, ele vai para baixo do exit e continua o curso do programa normalmente? Então.. vamos pular esse JE???

[[ Debugando ]] 

Nesse caso, precisamos debugar o programa, já que va
mos fazer isso em tempo de execução. O problema é que esse programa recebe parâmetros… Mas isso não é um problema. O OllyDebugger permite que você especifique os parâmetros do programa utilizando o menu Debug | Arguments.

Olly Debugger - Arguments

O OllyDebugger te mostra uma mensagem chata dizendo que o programa deve ser reiniciado e talz.. obedeça-o, ele só tem te gerado felicidades. Faça isso utilizando o menu Debug | Restart.

Então, utilizando a técnica que vimos anteriormente, localize a referência à string e aquele Jump, e coloque um breakpoint lá. O breakpoint deve ficar acima do comando JE. Estando tudo pronto, coloque o programa para executar, utilizando a tecla F9.

O programa pára bem em cima do breakpoint definido, no comando JE. Lembra daquele <ENTER> que pressionamos para seguir o jump? Faça-o de novo. Você vai parar no comando PUSH 0A. Lá, em cima desse comando, você vai clicar com o botão direito e clicar em New Origin Here.

Seu registrador EIP mudou como esperado e você pulou o Jump. É isso aí garotão (como diria o seu pai)!! Agora que o Jump foi pulado, coloque o programa pra executar de novo, com a tecla F9…  Ele terminou!! 🙂 Vamos lá no C:\ pra ver o nosso arquivo.

Cadê o arquivo?? Não está lá… 🙁 E agora? Vamos voltar e analisar o que aconteceu, debugar de novo… mas só na segunda parte do Post.

Quem não conseguiu de primeira, pode tentar de novo do ponto onde paramos agora. É pura análise.

Abraços a todos!