Fala Galera!

Eu sei que ninguém mais acredita em mim já que eu prometi uns artigos legais e depois sumi (Sim, eu sei, admito tudo [quer dizer, quase tudo :D]). O fato é que a minha vida ficou enrolada. Mas agora eu sou um cara formado e com poucos dramas particulares, então estou com mais tempo livre.

Por isso, em homenagem às outras pessoas que também tiveram uns segundos livres pra clicarem no link do meu site, resolvi propor um desafio em vários passos…

O fato é que uma vez eu quis baixar o código-fonte de um programa (era o jogo Quake) só que os caras sacanearam comigo!! Eles fizeram um programa que verificava se eu possuía o Quake instalado.

Em caso positivo, ele gravava o código-fonte em algum diretório escolhido por mim… A essa altura, depois de bastante tempo fazendo download (tempos dramáticos de conexão discada), eu já estava P. da vida e não poderia simplesmente aceitar tal afronta.

Ao analisar a segurança do programa, percebi que foi feita de modo trivial e não demorei nem dois minutos pra conseguir o código-fonte. Calma, ainda não pense em coisas mirabolantes. Primeiro vamos simular o que foi feito pelo pessoal que liberou o código-fonte do jogo. Este texto vai mostrar como se obter o artigo de dentro do executável. O desafio será proposto ao final do artigo.

[[ O ALVO! ]]

Pra fazer um exemplo bastante completo, criei um programa, utilizando o Delphi 7 (A IDE do meu coração) que faz quase a mesma coisa. Porém, ele tem duas diferenças:

  1. Ele possui um artigo escondido ao invés de um código-fonte. Um artigo legal sobre Engenharia Reversa para Visual Basic.
  2. Ele pede uma senha ao invés de checar se o seu computador tem um programa instalado.

Chamaremos o indivíduo de Escondedor porque… bem, ele faz isso 😀 Olha o screenshot do programa:

Screenshot do Escondedor

Pra poder gravar o artigo na sua máquina, você tem que digitar uma senha correta e pressionar o botão "Tentar". Caso a senha esteja correta, você ganha o artigo de brinde… caso contrário… recebe uma mensagem de pêsames.

[[ O CONTRA-ATAQUE! ]]

É claro que, depois de receber essa mensagem canalha, você não vai ficar parado aí, assistindo a sua novela, certo? Nada disso, você vai mover esse traseiro gordo, contaminado com fast-food brasileiro, e vai agir.

Bom, se você está começando e quer tentar resolver o problema por si próprio, sem ler o artigo, baixe o programinha aqui e não olhe o resto do artigo: Escondedor.zip

Veja bem, para que o programa possa gravar o artigo, este precisa estar dentro do programa, de alguma forma, já que você tem apenas um arquivo executável e ele pode rodar off-line (sem conexão com a internet).

Há diversas maneiras de se fazer isso, mas existe uma bastante simples, se você é um programador. Utilizar Resources. Os resources são dados binários que podem ser adicionados ao executável, como figuras e ícones. O ícone que aparece na barra de título do programa é um resource.

As janelas dos programas feitos em C podem utilizar os resources. Os resources, além de possuírem amplo suporte pelas linguagens de programação, foram feitos exatamente com esse fim. Por isso, será o primeiro ponto a ser explorado.

Os executáveis (.exe) em que você clica com tamanho fervor na hora de abrir um programa estão em um formato chamado PE (Portable Executable). O mentiroso do teu professor disse que os programas ficavam em linguagem de máquina? Não acredite mais em nada do que ele disser 😀

O fato é que o sistema operacional lê os executáveis, carrega as bibliotecas necessárias e executa apenas as partes que contém código, controlando memória etc. O formato PE possui uma tabela de seções. Uma das entradas dessa tabela aponta para a seção .rsrc, que contém os resources. Para explorar os resources do programa, vamos utilizar a ferramenta Resource Hacker. Embora hajam outras ferramentas, vamos primeiro falar dessa por sua simplicidade.

Resource Hacker. Alvo Encontrado!

 

Essa ferramenta permite que olhemos os tipos de resource de um programa e os resources efetivamente. O que temos que fazer é utilizar a opção abrir e escolher o executável do programa. Após alguma exploração (uns 5 segundos de exploração), você descobre um tipo de resource chamado RCDATA que, como você é um cara esperto e já pesquisou, sabe que é um tipo de resource personalizado criado pela aplicação (ao contrário de bitmaps, por exemplo, que precisam ser imagens) e serve exatamente pra guardar coisas como… artigos 😀 Então você se depara com um Resource chamado VBR e olha o dump hexadecimal, do lado direito. Alguma coisa te chama atenção ali…

 

 

Resource Hacker - PK

 

 

Aquele PK já é seu velho conhecido, provavelmente um arquivo ZIP! E logo abaixo, o que você encontra? Visual Basic Reversed.pdf. A esta altura, você já está alaranjado de felicidade e não acredita que o problema possa ser resolvida de forma tão trivial. Por isso, você testa, selecionando o resource (VBR) e clicando no menu Actions | Save Resource as binary file. Bum! Ele pede pra você escolher um local e grava o arquivo lá. 

 

Salvando Resource

 

 

Então, você vai com todo o seu hackerismo acumulado e descompacta o arquivo, pegando o seu brinde 😀 Está feliz? Claro que não!! É óbvio! Você está com sede de sangue e quer um desafio melhor.

O objetivo deste artigo foi mostrar que certos desafios são triviais de serem resolvidos, bastando um mínimo de exploração para sua solução. Mas!!!!! Eu vou saciar a sua sede de destruição e vou te propor um segundo desafio: Escondedor – Versão 2!

O link acima contém uma segunda versão do programa Escondedor, onde as coisas foram dificultadas um pouquinho… Nesta versão, coloquei um artigo diferente, sobre o qual eu não vou falar aqui.

O vencedor do desafio será aquele que escrever o primeiro post contand
o o título do artigo e sobre o que ele fala. Daqui a um tempo… (Ah! Não sei quanto tempo.. uma semana talvez) eu vou escrever um segundo artigo explicando como resolver o problema da versão 2 e vou propor um novo desafio um pouco mais difícil. Eu vou dificultando as coisas a cada … período (pode ser de uma semana :D). Eu sei que esse primeiro vai ser resolvido rápido. E cada vez que eu escrever o próximo artigo, eu libero o código-fonte do atual.

Bom.. estou aguardando as respostas. Abraços a todos e boas noites na frente da máquina brincando com os executáveis.