Quem nunca usou um software pirata que atire a primeira pedra! Ok, até existem algumas pessoas que só usam software original (guarde a pedra..) por inúmeras razões como a qualidade do produto e etc. A realidade é que está mais fácil encontrar um software pirata do que um original, talvez este até seja um dos motivos pela preferência. Diante disso, surge uma curiosidade: O que é ou como é desenvolvido um crack de um software? Nesta matéria, ensinarei como fazer engenharia reversa direto no código-fonte de um programa, utilizando desmontadores e programação em Assembly.
Antes de mais nada, a minha intenção não é te incentivar a crackear programas para não pagar pela sua licença de uso, apenas te estimular a estudar e aprender sobre programação e software. Portanto, não me responsabilizo caso você venha a fazer mal uso dos aprendizados contidos aqui.
Como funciona um software
Geralmente, quando você baixa ou compra um software com um período de testes (Trial) ou pago, é possível inserir um número serial para validá-lo, e assim poder usar até expirar a licença. A maioria deles, esconde os seriais válidos dentro do próprio código-fonte, facilitando o nosso trabalho, enquanto outros fazem a validação pela Internet, tornando tudo mais difícil. Mas como vocês sabem, nada é tão seguro que não possa ser quebrado.
Para este tutorial, usaremos um software desenvolvido especialmente para ser crackeado. Ao abrir, é necessário que digitemos um código serial, mas para descobrir, vamos precisar fazer engenharia reversa em seu código-fonte e alterar algumas coisas. Esta técnica é conhecida como Patch. Além disso, usaremos mais dois softwares, um para desmontar o código-fonte do executável em Assembly e outro para compilar novamente e realizar o Patch.
Baixe os seguintes softwares (Não se preocupe, não tem vírus):
Com o Win32Dasm vamos desmontar o executável e ver o código-fonte em linguagem de programação Assembly, já com o Hackers View conseguiremos editar o código e tornar a salvar e executar o programa.
Crackeando o software de teste
1 – Abra o Win32Dasm e no menu Disassembler, clique em Open file to Disassemble.. Escolha o software para ser crackeado, no nosso caso o Software de Teste baixado anteriormente.
2 – Após isso o Win32Dasm irá desmontar o programa e mostrar o seu código-fonte em linguagem de baixo nível: Assembly. Não se preocupe caso apareça vários símbolos estranhos na tela, iremos converter para caracteres alfa-numéricos.
3 – Os softwares antigos tinham algumas limitações quanto a tipografia, por este motivo os caracteres podem ter aparecido em formato de símbolos, como na imagem acima. Para corrigir, precisamos substituir a fonte padrão usada pelo Win32Dasm, para isso, vá no menu Disassembler e no sub-menu Font.. clique em Select Font. Selecione uma fonte de forma que os caracteres apareçam corretamente. (Eu escolhi a Myriad Pro).
– Agora é possível ler e compreender o código-fonte do programa. Não se preocupe com todo este código, não é necessário que você se torne um programador ou estude a fundo esta linguagem (Apesar que seria bom). Minimize o Win32Dasm.
5 – Agora, vamos abrir o programa teste.exe que baixamos anteriormente. Veja que este programa foi desenvolvido para que você tente crackea-lo, em vários níveis de dificuldade. Eu vou ensinar a crackear no nível Very Very Easy (Muito fácil), depois disso você será capaz de passar nos próximos níveis por conta própria.
6 – Selecione a opção Very Very Easy. Irá surgir uma tela para que você digite um código, como num programa qualquer que você precisa inserir um serial para que ele ative. Digite qualquer coisa e clique no botão OK. Obviamente, o seu código não será aceito (a não ser que você advinhe o código certo hehe) e irá surgir esta mensagem:
7 – É exatamente isso que nós precisamos. Copie esta mensagem “Sorry, not the right one – try again !“, pois através dela iremos procurar em qual segmento/offset da Memória RAM este trecho de código esta sendo executado e assim podemos editar o código-fonte para aceitar qualquer código digitado.
"Para ficar mais claro, a Memória RAM do computador é dividida em segmentos de 64Kbytes. Cada segmento possui “outros” segmentos sequenciais dentro dele, com 16 bytes. Para acessar estes segmentos internos, é necessário fornecer a posição desejada dentro do segmento principal, é o Offset. Veja por exemplo o endereço de memória 0:13Ah, significa que ele se encontra fisicamente no segmento zero e na posição (Offset) 13A.8 – Após esta breve introdução sobre o funcionamento da Memória RAM de um computador, continuamos com o processo de crack do programa teste. Abra novamente o Win32Dasm que estava minimizado, clique no menu Refs e na opção String Data References.
9 – Irá aparecer uma lista de Strings (texto) encontradas no código-fonte do programa alvo. Encontre a String “Sorry, not the right one – try again !” que vimos anteriormente, dê dois cliques nela e após isso clique no botão close.
10 – Estamos no trecho de código em que a mensagem de erro ao digitar uma senha errada é mostrada. Olhe na linha de cima onde esta mensagem foi encontrada, isto é um Jump Code, onde é feito o seguinte teste: Se a senha for válida, “pule” para este trecho, senão “pule” para este trecho do código. Precisamos copiar o Offset que está nele, pois este é o endereço onde esta a validação da senha digitada, que iremos manipular. O Offset é este: 43B04D, que equivale ao endereço completo com o registrador “DX:43B04D”.
11 – Após copiar o Offset do Jump, vamos localizar o trecho de código referente à ele. Clique no menu Goto e na opção Goto Code Location. Na janela que irá se abrir, digite o endereço de memória obtido anteriormente: 43B04D e clique em OK. Estamos agora no trecho do programa que é responsável por fazer a validação da senha correta e por mostrar aquela mensagem de erro (vista anteriormente).
Vamos analisar um trecho deste código:
Neste trecho de código é chamado (call) a comparação se o código digitado é igual ao código corretoCaso esteja certo, é mostrada a mensagem: “Right on ! … told you … too easy … Try the next one !”. O que precisamos fazer é alterar o JNE por JE, dessa forma eu estou dizendo ao programa para aceitar qualquer código digitado, não importando qual seja. Mas para alterarmos, precisamos do programa Hackers View, baixado anteriormente no início desta matéria. Copie o Offset que está o JNE para ser alterado, está no rodapé do programa: 3A44D.
:0043B048 E8F789FCFF call 00403A44
Já neste trecho de código, o programa mostra a mensagem de erro, caso esteja errado (JNE)
:0043B04D 750C jne 0043B05B
12 – Copie o programa alvo teste.exe para a mesma pasta do Hackers View. Após isso, arraste o teste.exe para dentro do programa Hackers View (hiew32demo.exe). Com isso, o Hackers View será aberto.
13 – Após o programa Hackers View ser aberto, aperte F4 (selecionar modo), depois F3 (Hex) e por fim F5 (Goto). Digite o endereço Offset copiado anteriormente: 3A44D e dê o Enter. Estamos visualizando agora o mesmo trecho de código onde encontramos o valor JNE.
14 – Aperte F3 (Editar) e altere o valor 750C por 740C. “750C” é o equivalente em hexadecimal para JNE, precisamos alterar para 740C, que representa o JE. Após alterar, aperta F9 (recompilar) e F10 (fechar). O programa será automaticamente fechado. Pronto, o software teste foi crackeado, vamos testar. Abra novamente o teste.exe (que voce copiou para a pasta do Hacker View), selecione a opção Very Very Easy, digite qualquer senha e clique em OK. Veja que agora o programa aceita qualquer senha, pois nós o modificamos:
Terminamos aqui, você pode continuar o seu aprendizado estudando os desafios mais difíceis, usando a mesma técnica apresentada por mim nesta matéria. A mesma técnica também pode ser aplicada em qualquer outro tipo de programa, basta um pouco de dedicação, paciência e estudo. Boa sorte!
O conteúdo contido aqui vem de varias fontes.
Assinar:
Postar comentários
2 comentários:
Olá amigo, pode disponibilizar os arquivos novamente? Não consigo baixar.
meu sistema e 64 bits da erro de memoria imcompativel
Postar um comentário