Prévia do material em texto
<p>RESOLVENDO</p><p>CRACKMES #1</p><p>Engenha r i a</p><p>Reve r s a na</p><p>p r á t i c a</p><p>K E R N E L Z E R A</p><p>W 'Ups</p><p>No entanto, muitas vezes possuímos uma boa</p><p>base, mas não conseguimos enxergar como</p><p>nosso conhecimento pode ser utilizado em</p><p>determinadas situações.</p><p>Esse livro visa abrir a mente de quem já tem</p><p>essa base, mas não está enxergando as</p><p>possibilidades.</p><p>Vou abordar técnicas de engenharia reversa</p><p>para resolver Crackmes. Para quem ainda não</p><p>conhece, Crackmes são programas construídos</p><p>para a prática de engenharia reversa.</p><p>Introdução</p><p>Acredito muito na importância de termos uma base</p><p>forte sobre os conceitos. Com isso, é possível não</p><p>só resolvermos os problemas que já conhecemos,</p><p>mas também tomarmos ações e decisões para sair</p><p>de situações que nunca lidamos antes.</p><p>E se eu ainda não tenho essa base, posso me</p><p>beneficiar deste livro? Claro!</p><p>Ao acompanhar as demonstrações das técnicas,</p><p>um mundo de possibilidades irá se abrir para você</p><p>e com isso, você terá um mapa do que precisa</p><p>aprender para chegar a ponto de entender essas</p><p>técnicas, modificá-las e até criar novas técnicas</p><p>com base em suas necessidades.</p><p>E o mais importante:</p><p>Ao ler este livro, tenha em mente que é como se</p><p>você estivesse sentado ao meu lado, me vendo</p><p>resolver Crackmes. Absorva o máximo das</p><p>estratégias, mas mais do que isso: Absorva minha</p><p>maneira de raciocinar diante dos problemas! Pois,</p><p>assim como você, não sei tudo e me deparei com</p><p>problemas que eu ainda não tinha conhecimento</p><p>para resolver. Mesmo assim, consegui dividir o</p><p>problema em partes e resolvê-lo.</p><p>Introdução</p><p>Introdução</p><p>O que quero te mostrar é que aprender a</p><p>raciocinar sobre um problema vai te dar a clareza</p><p>do próximo passo.</p><p>Por fim, pratique. Pratique, pratique e pratique</p><p>mais. E quando achar que já praticou o suficiente,</p><p>pratique mais!</p><p>Parece clichê, mas existe verdade na maioria dos</p><p>clichês e por isso eles viram tão populares. Não</p><p>adianta só teoria, você pode até pensar que está</p><p>conseguindo acompanhar o meu raciocínio, mas</p><p>se você não praticar, estará apenas se enganando.</p><p>Uma coisa é ler uma "resposta" e conseguir</p><p>entendê-la, outra coisa é pegar o problema e</p><p>conseguir chegar na resposta. Por isso insisto para</p><p>que pratique: comece baixando estes crackmes,</p><p>tente resolver sem ler este livro. Depois leia o</p><p>passo a passo de sua solução apresentado aqui e</p><p>com certeza seu aprendizado será maior. No final,</p><p>tente resvolver de novo os crackmes sem</p><p>consultar.</p><p>Introdução</p><p>Por fim, baixe novos Crackmes e tente resolver por</p><p>conta própria aplicando a linha de raciocínio que</p><p>você irá aprender aqui. Você perceberá que os</p><p>problemas mudam, mas as formas de resolvê-los</p><p>não.</p><p>Espero que você aproveite ao máximo essa</p><p>jornada e, acima de tudo, divirta-se! Não tenha</p><p>pressa de chegar ao final. A graça está justamente</p><p>no desafio!</p><p>E gostaria de lembrá-los, sou um ser humano ,</p><p>cometo erros e também tenho muito, mas muito</p><p>mesmo o que aprender sobre o tema. Então caso</p><p>pegue algum erro, fique à vontade para entrar em</p><p>contato comigo que eu atualizarei a versão digital</p><p>deste livro. As instruções de contato estarão no</p><p>final do livro.</p><p>Crackme 1</p><p>Bora começar? O primeiro crackme que vamos</p><p>resolver é bem simples, a fim de você que não tem</p><p>tanta familiaridade com crackmes entender como</p><p>eles funcionam e também perceber ao longo das</p><p>edições (iremos resolver um ou 2 crackmes por</p><p>edição) perceber que o processo é sempre o</p><p>mesmo do ponto de vista do raciocínio. O que</p><p>muda é a técnica aplicada, mas a mentalidade é</p><p>sempre a mesma e já vou entregá-la para</p><p>você imediatamente: Quebre o problema em</p><p>pedaços e foque na primeira parte do</p><p>problema.</p><p>Esqueça o todo senão você vai desistir ou travar</p><p>por não saber por onde começar .</p><p>Por exemplo, se o programa que quero quebrar</p><p>não aceita debugger, meu primeiro passo é</p><p>quebrar essa proteção anti-debug e não descobrir</p><p>o algoritmo de validação do Serial.</p><p>Vamos colocar a mão na massa!</p><p>Crackme 1</p><p>Baixe o Crackme em</p><p>https://crackmes.one/crackme/60b92a0433c5d410</p><p>b8842bd3</p><p>Caso você nunca tenha baixado um crackme deste</p><p>site antes, os arquivos vêm compactados e com a</p><p>senha "crackmes.one" (os crackmes com uma</p><p>senha diferente desta, costumam informar na</p><p>descrição da página de download) .</p><p>Crackme 1</p><p>Após descompactar o programa a ser crackeado,</p><p>vamos executá-lo e explorá-lo como usuários.</p><p>Tentar entender quais os inputs e outputs do</p><p>programa. Ou seja, o programa possui algum</p><p>campo para digitar ou selecionar informações? Se</p><p>sim, ao inserirmos, o quê o programa faz, exibe</p><p>alguma mensagem (output)?</p><p>No caso o programa pede para informar a data de</p><p>nascimento do Saptam (o criador do crackme ou</p><p>personagem criado) .</p><p>Crackme 1</p><p>Vamos digitar uma data de nascimento aleatória</p><p>para explorarmos o comportamento do programa.</p><p>Digitei 25/02/98 e apertei enter.</p><p>Ao digitarmos a data errada que no caso é a chave</p><p>para entrar no programa, aparece a seguinte</p><p>mensagem: "Access Denied". Vamos anotar</p><p>"Acess Denied" em um caderno e apertar qualquer</p><p>tecla para encerrar o programa.</p><p>Crackme 1</p><p>Vamos abrir o programa novamente e, em seguida,</p><p>abrir o x32dbg (você pode baixar em:</p><p>https://x64dbg.com/ )</p><p>Crackme 1</p><p>Vá em "Arquivo" -> "Anexar". Selecione</p><p>"For_crackme" (nome do programa 32 bits aberto.</p><p>Se fosse um crackme 64 bits o processo seria o</p><p>mesmo, porém iríamos abrir o x64dbg em vez do</p><p>x32dbg. Após selecionar o programa (processo)</p><p>que deseja debugar, clique em "Anexar".</p><p>Crackme 1</p><p>Após anexar, sua tela estará parecida com essa:</p><p>Agora vamos tentar uma das técnicas mais</p><p>simples: procurar pela string (texto) que aparece</p><p>ao errarmos a senha, serial ou chave. Nós</p><p>anotamos essa string nas primeiras etapas:</p><p>"Access Denied".</p><p>No caso desse crackme, a chave é uma data de</p><p>nascimento.</p><p>Crackme 1</p><p>Clique com o botão direito na tela. Pode ser em</p><p>qualquer uma das colunas da janela principal. Vá</p><p>em "Pesquisar por" -> "todos os módulos" -></p><p>"Referências string".</p><p>Crackme 1</p><p>Irá aparecer uma tela igual a essa:</p><p>No campo "Search", digite a string que anotamos</p><p>no começo: "Access Denied" .</p><p>Crackme 1</p><p>Opa! Enquanto digitava "access denied", logo após</p><p>eu completar a palavra "acess" já apareceram 2</p><p>resultados promissores: "Acess granted" e "Acess</p><p>denied. Provavelmente são as mensagens exibidas</p><p>quando acertamos e erramos a data</p><p>respectivamente.</p><p>Crackme 1</p><p>Como nosso objetivo é acertar a data e não errá-la</p><p>(óbvio), vamos começar pelo "Acess granted", que</p><p>possui um grande potencial de estar relacionada</p><p>com o fluxo de acerto (sucesso).</p><p>Crackme 1</p><p>Dê 2 cliques no código Assembly em que se</p><p>encontra o resultado "access granted"</p><p>Seremos direcionados para o ponto exato da</p><p>instrução assembly relacionada à essa String:</p><p>Crackme 1</p><p>Opa! Vimos que logo acima da mensagem "access</p><p>granted" tem uma verificação que irá saltar (jne)</p><p>para a mensagem de erro "access denied" caso a</p><p>data esteja incorreta.</p><p>Vamos colocar um breakpoint na linha do salto</p><p>condicional para tentarmos descobrir qual a string</p><p>esperada. Para adicionar o breakpoint, basta clicar</p><p>na bolinha e ela irá ficar vermelha, conforme a</p><p>imagem:</p><p>Crackme 1</p><p>Observação: repare que a essa altura já</p><p>poderíamos criar um patch trocando a instrução</p><p>jne por je. Nesse caso, sempre que digitássemos a</p><p>data errada, em vez de irmos para o fluxo de</p><p>acesso negado, iríamos ser direcionados para o</p><p>fluxo de acesso permitido. Isso porque estaríamos</p><p>invertendo a verificação. Mas vamos tentar obter a</p><p>data correta para não precisarmos fazer o patch.</p><p>Vamos voltar para o programa e digitar a data</p><p>incorreta novamente (25/02/98). Ao apertarmos</p><p>enter, a execução do programa irá parar em nosso</p><p>breakpoint:</p><p>Crackme 1</p><p>Um pouco mais acima do breakpoint é possível</p><p>vermos 2 datas em texto legível. Uma é a data que</p><p>digitamos (25/02/98). A outra parece ser a nossa</p><p>chave (07/10/97)!!!</p><p>Vamos anotá-la e dar um RUN no debugger:</p><p>Crackme 1</p><p>Ao apertarmos o botão run, verifique se o status</p><p>do programa mudou para "executando" ou está</p><p>como "pausado". Se necessário aperte RUN</p><p>novamente até alterar</p><p>para "executando":</p><p>Perceba que a data digitada está errada, como já</p><p>sabíamos. Agora aperte qualquer tecla para</p><p>encerrar a execução do programa:</p><p>Crackme 1</p><p>Execute o Crackme novamente (sem o debugger</p><p>mesmo) e tente entrar com a senha (data) que</p><p>anotamos: 07/10/97 .</p><p>Aperte enter e veja o resultado!</p><p>Booa! Conseguimos resolver o primeiro Crackme!</p><p>Nas próximas edições vamos aumentando a</p><p>dificuldade gradativamente. Até lá, não deixe</p><p>de praticar!</p><p>Sobre o projeto</p><p>Este é um projeto da Kernelzera . Nosso principal</p><p>meio de comunicação é o Instagram</p><p>(@kernelzera).</p><p>Você também pode entrar em contato conosco</p><p>pelo email contato@kernelzera.org ou nosso</p><p>WhatsApp Comercial +55 11 4210-6140 .</p><p>E caso um dia não nos encontre no Instagram por</p><p>qualquer motivo, procure-nos no kernelzera.org</p><p>que é nosso ponto de encontro em caso de</p><p>mudanças nas políticas do Instagram.</p><p>O Kenelzera nasceu para compartilhar</p><p>conhecimento de computação baixo nível.</p><p>Compartilhamos conteúdos e materiais sobre</p><p>linguagem C, Assembly e Hacking.</p><p>Qualquer dúvida, sugestão ou erro que tenha</p><p>passado despercebido por nós, por favor entre</p><p>em contato que atualizaremos o material.</p>