Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

Prévia do material em texto

<p>RESOLVENDO</p><p>CRACKMES #2</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>Introdução</p><p>Bem-vindo(a) à 2ª edição da W'Ups!</p><p>Se você chegou até aqui é porque de alguma forma</p><p>a 1ª edição te ajudou e isso nos deixa muito</p><p>contente.</p><p>Você seguiu o passo a passo? Teve alguma</p><p>dificuldade? Fique à vontade para sugerir melhoras</p><p>paras próximas edições . Você encontrará nossos</p><p>contatos na última página deste e-book.</p><p>Nesta edição vamos resolver um Crackme um pouco</p><p>diferente. É uma categoria de Crackme chamada</p><p>Patchme.</p><p>Existe o Crackme tradicional em que o</p><p>Engenheiro Reverso obtém a chave para</p><p>acessar o programa</p><p>O Keygenme que o desafio é criar um</p><p>programa gerador de seriais (keygen) válidos</p><p>para desravar um determinado binário (o</p><p>keygenme no caso)</p><p>E o Patchme onde em vez de descobrir uma</p><p>senha, serial ou tentar criar um programa</p><p>gerador de seriais, a ideia é modificar o fluxo</p><p>do programa. Seja para destravá-lo, remover</p><p>propaganda, ou qualquer outra parte</p><p>indesejada do programa.</p><p>Introdução</p><p>Introdução</p><p>Como você sabe, a ideia do write-up é entender o</p><p>passo a passo que alguém fez para chegar a</p><p>determinado resultado. Por isso, a ideia é não</p><p>cortar nenhuma etapa. Eu fui resolvendo o</p><p>Patchme e documentando tudo.</p><p>Essa edição ainda tem um toque especial: eu</p><p>mostro pra vocês onde poderíamos "matar o</p><p>problema", mas continuo mostrando algumas</p><p>abordagens diferentes , para que eu possa te</p><p>introduzir algumas técnicas bem úteis de</p><p>engenharia reversa. Inclusive, algumas das</p><p>técnicas não vão funcionar e aí que a coisa começa</p><p>a ficar interesante porque vou te explicando o</p><p>motivo de eu ter tentado usá-la e porque não</p><p>funcionou.</p><p>Modéstia parte, essa edição é uma verdadeira</p><p>aula de x32dbg e de engenharia reversa.</p><p>Espero que você aproveite ao máximo!</p><p>Crackme 2</p><p>Chega de papo! Bora começar? O segundo</p><p>crackme que vamos resolver não é difícil, porém</p><p>como mencionei na Introdução, é um pouco</p><p>diferente do primeiro. É um patchme.</p><p>Além disso, percorremos alguns caminhos extras</p><p>para que eu pudesse trazer bastante conteúdo</p><p>sobre o x32dbg e sobre técnicas de Engenharia</p><p>Reversa.</p><p>Esse ebook vai ser um pouco mais longo e eu</p><p>espero que isso seja algo bom para você! Pois foi</p><p>feito pensando em como passar o máximo de</p><p>conhecimento a partir de um Crackme . Espero</p><p>que isso também abra a mente para sempre ter</p><p>essa atitude de utilizar um binário como forma de</p><p>estudo, não só pensando em chegar o mais rápido</p><p>no resultado. Engenharia Reversa tem que ser um</p><p>hobby, algo que te dê prazer e faça você esquecer</p><p>do tempo :) Afinal, nada mais é do que um</p><p>quebra-cabeça.</p><p>Vamos colocar a mão na massa!</p><p>Crackme 2</p><p>Baixe o Crackme em</p><p>https://crackmes.one/crackme/5ab77f6533c5d40a</p><p>d448cb7c</p><p>Esse Crackme, como informado no site, tem uma</p><p>senha diferente da padrão.</p><p>A senha é: crackmes.de</p><p>Crackme 2</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 do nosso patchme, não tem nenhum</p><p>campo de entrada.</p><p>Crackme 2</p><p>Ao abrirmos o executável, vemos uma Message</p><p>Box como essa:</p><p>Ao clicar em OK, aparece uma notificação do</p><p>Windows como a imagem abaixo:</p><p>Crackme 2</p><p>Alguns segundos depois de aparecer a notificação,</p><p>um novo popup aparece, conforme imagem</p><p>abaixo:</p><p>Ao clicarmos no botão OK, aparece uma segunda</p><p>notificação:</p><p>Crackme 2</p><p>Alguns segundos depois de aparecer a notificação,</p><p>um terceiro popup aparece, conforme imagem</p><p>abaixo:</p><p>Ao clicarmos no botão OK, o executável é</p><p>encerrado. Agora sim! Entendemos como o</p><p>programa funciona do ponto de vista do</p><p>usuário.</p><p>textos (strings) dos Message Boxes (popups) e</p><p>das notificações (se você não anotou, volte e</p><p>anote)</p><p>sabemos que a notificação é disparada após o</p><p>clique no botão OK;</p><p>sabemos que são exibidos 3 Message Boxes</p><p>(popups)</p><p>Agora temos informações relevantes:</p><p>Vamos abrir nosso executável no x32dbg. Para</p><p>isso, abra o executável e depois abra o x32dbg. Vá</p><p>em "Arquivo -> Anexar" ou aperte Alt+A:</p><p>Crackme 2</p><p>Selecione o processo de nosso patchme na lista e</p><p>clique em "Anexar":</p><p>Crackme 2</p><p>Irá aparecer uma janela como essa:</p><p>Vamos começar pelas técnicas mais simples e ver</p><p>se encontramos algo relevante. Vamos tentar</p><p>encontrar as strings que anotamos anteriormente.</p><p>Na aba CPU, clique com o botão direito na tela e vá</p><p>em "Pesquisar por -> todos os módulos -></p><p>Referências Strings":</p><p>Crackme 2</p><p>Opa! Nem precisamos digitar as strings na barra</p><p>de busca e já podemos ver que os textos estão</p><p>abertos (não criptografados). Também já é possível</p><p>ver as chamadas para a MessageBoxA, responsável</p><p>pelos popups que vimos.</p><p>Crackme 2</p><p>Vamos começar dando 2 cliques no texto</p><p>"Balloon Nag of Death":</p><p>Crackme 2</p><p>Veja que a string do título da notificação é</p><p>colocada na pilha pela instrução push.</p><p>Poderíamos tentar fazer um patch neste trecho do</p><p>código, mas depois teríamos que fazer outro patch</p><p>na outra notificação. Então vamos tentar fazer algo</p><p>centralizado.</p><p>Repare que após colocar os parâmetros na pilha e</p><p>no registrador ecx, é chamada a função que está</p><p>no endereço revamped.91460 (no seu vai ser</p><p>outro endereço, mas a sequência de</p><p>instruções vai ser a mesma).</p><p>E o conteúdo (corpo da notificação) é colocado em</p><p>ecx, conforme imagem:</p><p>Crackme 2</p><p>Dê um duplo clique na instrução "call patchme2 -</p><p>revamped.91460" (lembrando que o endereço</p><p>no seu vai ser diferente). Você será direcionada</p><p>para o início da função, conforme imagem abaixo:</p><p>Crackme 2</p><p>Coloque um breakpoint na instrução "sub esp,</p><p>1F4" clicando na bolinha à esquerda ou com a</p><p>tecla F2:</p><p>Volte para a busca por strings e dê um duplo</p><p>clique na string "nag nag nag nag..."</p><p>Crackme 2</p><p>Repare que novamente os parâmetros são</p><p>colocados na pilha e no registrador ecx:</p><p>Repare também que após definidos os parâmetros</p><p>do título da notificação e seu conteúdo,</p><p>novamente temos a instrução call patchme2 -</p><p>revamped.91460 (lembre-se que no seu o</p><p>endereço não será em 91460):</p><p>Crackme 2</p><p>Isso nos confirma que as notificações são</p><p>disparadas todas por essa mesma função que está</p><p>em 91460. Sendo assim, podemos aplicar o patch</p><p>diretamente nela.</p><p>Dê um duplo clique (ou aperte enter) na instrução</p><p>call logo após a linha "mov ecx, ..."</p><p>Isso vai nos levar ao início da função responsável</p><p>por disparar a notificação.</p><p>Crackme 2</p><p>Já colocamos um breakpoint em sub esp, 1F4.</p><p>Então, vamos voltar para a janela do programa em</p><p>execução e apertar "OK" no popup:</p><p>Crackme 2</p><p>Ao clicar em OK no popup, volte ao x32dbg. A</p><p>execução terá parado em nosso breakpoint:</p><p>Clique em step over para seguir vendo a</p><p>execução passo a passo:</p><p>Veja que essa é justamente a função responsável</p><p>por disparar as notificações.</p><p>Crackme 2</p><p>Clique novamente na primeira linha da função</p><p>(sub esp, 1F4) e aperte "espaço" ou clique com o</p><p>botão direito do mouse e depois "montar":</p><p>Crackme 2</p><p>Escreva "NOP" e deixe marcadas as opções</p><p>"manter tamanho", "Preencher com NOPs" e</p><p>"asmjtt":</p><p>Em seguida clique em "OK" e depois "cancelar"</p><p>para fechar o popup de edição.</p><p>Repare que foram adicionados mais "NOPs" para</p><p>completar os bytes da instrução "sub esp, 1F4". É</p><p>importante sempre mantermos o número de bytes</p><p>para não alterarmos o tamanho do programa.</p><p>Crackme 2</p><p>Remova o breakpoint que havíamos colocado</p><p>apertando F2 ou clicando na bolinha vermelha:</p><p>Agora vá em "Arquivo -> patch file..."</p><p>Crackme 2</p><p>Em "Patches" você verá as nossas alterações.</p><p>0x90 é o OPCODE da instrução NOP:</p><p>Clique em "patch file" para salvar o binário</p><p>modificado. Salve com outro nome para preservar</p><p>o binário original. Lembre-se de salvar como .exe</p><p>Crackme 2</p><p>Feche o x32dbg e abra o exe modificado:</p><p>Ops! A notificação continua aparecendo e nós</p><p>ainda quebramos o binário.</p><p>Vamos excluir o binário modificado e reabrir o</p><p>original com o x32dbg.</p><p>Vamos tentar remover somente a chamada para a</p><p>função.</p><p>Vá novamente na busca por string e entre</p><p>nas strings relacionadas à notificação: "Balloons</p><p>are awesome" e "nag nag nag".</p><p>Crackme 2</p><p>Primeiro dê um duplo clique na string "Balloons</p><p>are awesome!"</p><p>Selecione a linha "call patchme2 -</p><p>revamped.91460" (o número em seu</p><p>computador pode estat diferente, pois refere-se</p><p>ao endereço). Aperte espaço ou clique com o</p><p>botão direito do mouse e vá em "montar":</p><p>Crackme 2</p><p>Suba um pouco a tela e você verá os parâmetros</p><p>sendo passados através da pilha (push) e através</p><p>do registrador ecx antes da chamada para a</p><p>função que dispara a notificação:</p><p>Crackme 2</p><p>Agora escreva "NOP" e dê OK:</p><p>Vamos repetir a mesma coisa para a string "nag</p><p>nag nag". Vá na aba referências e dê um duplo</p><p>clique nela:</p><p>Crackme 2</p><p>Vamos substituir a instrução "call patchme2 -</p><p>revamped.91460" por "NOP" igual fizemos no</p><p>fluxo anterior:</p><p>Por fim, vá em "Arquivo -> Patch File -> Patch File"</p><p>e salve o binário com outro nome:</p><p>Crackme 2</p><p>Feche o binário que estávamos modificando, feche</p><p>o x32dbg e execute o programa modificado.</p><p>Uaau! Repare que as notificações realmente</p><p>sumiram. No entanto, o programa detectou que</p><p>tentamos removê-las e disparou um novo alerta e</p><p>uma nova modificação conforme imagens acima.</p><p>Anote as 2 strings que apareceram, tanto no</p><p>popup quanto na nova notificação e vamos</p><p>procurá-las no x32dbg. Feche o programa e abra</p><p>novamente. Em seguida, abra o x32dbg e anexe ao</p><p>processo do nosso binário modificado (vamos</p><p>anexar no modificado para não perdermos as</p><p>alterações já realizadas).</p><p>Dica: caso não esteja conseguindo fechar o</p><p>programa, aperte ctrl+alt+del e abra o</p><p>gerenciador de tarefas. Em seguida, encerre o</p><p>programa por lá:</p><p>Crackme 2</p><p>Após anexar o programa modificado ao x32dbg,</p><p>vamos novamente em "Pesquisar por -> Todos</p><p>os módulos -> Referências strings":</p><p>Crackme 2</p><p>Procure pelas strings que anotamos</p><p>anteriormente:</p><p>Vamos tentar remover o popup (porque vimos que</p><p>o OK no popup que dispara a notificação)</p><p>selecionando a linha "call dword ptr ds:</p><p>[<&LoadLibraryA>], apertando espaço para</p><p>alterar a instrução e trocando por "NOP":</p><p>Aperte enter ou dê um duplo clique para ir até a</p><p>utilização da string. Veja que a User32.dll e a</p><p>MessageBox, função da User32.dll, são colocadas</p><p>na pilha. Em seguida tem uma chamada para a</p><p>LoadLibrary (com esses parâmetros).</p><p>Crackme 2</p><p>Novamente vá em "Arquivo -> Patch file -></p><p>Patch file" e salve o novo binário com outro nome</p><p>para preservar o anterior. Feche o x32dbg e a</p><p>execução atual do executável e rode o modificado</p><p>para ver se conseguimos remover todas as</p><p>mensagens e notificações indesejadas :)</p><p>Crackme 2</p><p>Observação: se o alerta acima aparecer clique em</p><p>"Yes". Esse alerta está dizendo que estamos</p><p>mudando trechos do código que estão na tabela</p><p>de realocação. Por isso, quando rodarmos</p><p>novamente os endereços terão sido alterados e</p><p>provavelmente o programa dará erro durante a</p><p>execução. Mas vamos salvar e testar.</p><p>Crackme 2</p><p>Os alertas sumiram, porém o programa encerrou</p><p>de forma inesperada. Provavelmente tentamos</p><p>acessar um endereço inválido ou que não condiz</p><p>com o fluxo do programa.</p><p>Vamos tentar arrumar isso! Exclua o último binário</p><p>modificado e abra no x32dbg o executável</p><p>anterior. Ou seja, aquele retiramos a chamada</p><p>para a função que dispara as notificações iniciais,</p><p>porém que detectam nossa modificação e dispara</p><p>novos alertas e notificações (página 31). Vamos</p><p>arrumar nossa bagunça!</p><p>Crackme 2</p><p>Após abrir o executável no x32dbg, vá novamente</p><p>em "Pesquisar por -> Todos os módulos -></p><p>Referências string".</p><p>Procure por "Attempt alert" na barra de busca:</p><p>Crackme 2</p><p>Dê um duplo clique ou aperte enter no primeiro</p><p>resultado: "mov dword ptr ss:...."</p><p>Crackme 2</p><p>Suba um pouco até chegar na instrução "push</p><p>ebp":</p><p>Coloque um breakpoint na instrução "push ebp":</p><p>Vamos colocar mais um breakpoint. Volta na busca</p><p>por strings e procure por "nag-o-mania would</p><p>like to inform":</p><p>Crackme 2</p><p>Selecione o resultado "push patchme2 -</p><p>revamped...." e dê um duplo clique ou aperte</p><p>enter para ir até a instrução:</p><p>Crackme 2</p><p>Um pouco abaixo, podemos ver uma instrução</p><p>jmp patchme2 - revamped.915D0 (lembre-se</p><p>que o endereço pode estar diferente no seu</p><p>computador, mas a instrução é a mesma). Coloque</p><p>um breakpoint nesta instrução:</p><p>Agora repare que esse jump é responsável pelo</p><p>loop inifinto de notificações. Vamos alterá-lo. Em</p><p>vez de simplesmente trocá-lo por NOP, vamos na</p><p>busca por string e procurar pelo texto do primeiro</p><p>popup (aquele de boas-vindas ao abrir o</p><p>programa):</p><p>Crackme 2</p><p>Dê um enter ou duplo clique no primeiro para ir</p><p>até o código.</p><p>Suba a tela em direção ao começo da função até</p><p>encontrar a instrução push ebp:</p><p>Crackme 2</p><p>Dê um clique com o botão direito do mouse e</p><p>selecione "Copiar -> Endereço":</p><p>Agora vamos voltar ao nosso Jump (aquele</p><p>responsável pelo loop infinito).</p><p>Aperte "espaço" na linha do jump para modificar</p><p>a instrução e substitua o endereço pelo copiado</p><p>no passo anterior (não esqueça de por o 0x já que</p><p>o endereço está em hexadecimal):</p><p>Se você der 2 cliques na linha do jump que</p><p>acabamos de modificar, você irá para o trecho de</p><p>código que exibe o popup de boas-vindas. O que</p><p>fizemos aqui é, em vez de ficar no loop de</p><p>notificações, vamos para o começo do fluxo do</p><p>programa (boas-vindas).</p><p>Salve um novo binário com nosso patch indo em</p><p>"Arquivo-> Patch file" como fizemos anteriormente.</p><p>Feche o x32dbg e execute o nosso programa</p><p>modificado.</p><p>Crackme 2</p><p>Crackme 2</p><p>Repare que agora, após a primeira notificação nós</p><p>estamos direcionando o fluxo do programa para o</p><p>começo (primeiro popup). Evitando aquele loop</p><p>infinito de notificações. Mas como nós alteramos o</p><p>jump do loop, a notificação continua aparecendo</p><p>uma vez, assim como o alerta "I would like to</p><p>inform that someone is trying to remove it's</p><p>Nag".</p><p>Avançamos, mas ainda não é o resultado que</p><p>queremos. Vamos melhorar isso!</p><p>Vamos achar uma code cave, ou seja, uma área de</p><p>código não utilizada dentro do binário. Para isso,</p><p>abra nosso último binário modificado no x32dbg,</p><p>vá em Símbolos e dê um duplo clique ou aperte</p><p>enter no módulo "patchme2 - revamped.exe"</p><p>conforme imagem a seguir:</p><p>Crackme 2</p><p>Ao apertar enter neste módulo, você cairá nesta</p><p>tela (repare o nome do módulo destacado pelo</p><p>retângulo do vermelho):</p><p>Role a tela (já que o programa é pequeno) até</p><p>encontrar várias instruções "add byte por ds:</p><p>[eax], al" seguidas. Repare que o OPCODE está</p><p>zerado (0000), conforme imagem a seguir:</p><p>Crackme 2</p><p>Vamos escrever o nosso próprio código que fecha</p><p>a aplicação. Ou seja, após abrirmos todos os</p><p>popups sem "Nags", vamos fechar a aplicação em</p><p>vez de cair no loop de detecção de que</p><p>removemos as notificações (Nags).</p><p>No nosso caso, já fizemos tudo que a aplicação</p><p>oferece. Seão poderíamos escrever um outro</p><p>código de acordo com a nossa finalidade.</p><p>Escolha um espaço com algumas linhas "add byte</p><p>por ds:[eax], al" para baixo. Aperte espaço</p><p>(assemble/montar) e vamos fazer nossa</p><p>chamada para a Win32API e chamar a função exit.</p><p>Crackme 2</p><p>Mas antes, clique com o botão direito na área de</p><p>código assemble (aba CPU) e em seguida,</p><p>"procurar por" -> "módulo atual" -></p><p>"chamadas intermodulares":</p><p>Espere carregar e procure por exit:</p><p>Crackme 2</p><p>Veja que encontramos uma chamada para</p><p>msvcr90.exit. Aperte enter ou duplo clique</p><p>para ir até essa chamada:</p><p>Clique com o botão direito na linha "call word ptr</p><p>ds:[&exit]" e em seguida "Montar". Copie a</p><p>instrução.</p><p>Perceba que poderíamos copiar diretamente o</p><p>endereço dessa instrução em vez da instrução e</p><p>direcionarmos nosso fluxo para cá. Mas para</p><p>usarmos a técnica de desvio de fluxo (function</p><p>detour) com code cave, vamos escrevê-la em</p><p>nosso espaço vazio.</p><p>Vou demonstrar a técnica para você, mas repare</p><p>que a função exit pertence à msvcr90.dll,</p><p>portanto esse endereço irá ser alterado nas</p><p>próximas vezes que rodarmos o binário e portanto</p><p>nosso desvio não vai funcionar.</p><p>Crackme 2</p><p>Crackme 2</p><p>Volte aos nossos espaços vazios no fim do binário</p><p>(página 47) e aperte espaço (Montar). Cole a</p><p>instrução que acabamos de copiar.</p><p>Repare na mensagem "Instrução maior por 4</p><p>bytes". Desmarque a opção "Manter tamanho"</p><p>e dê OK.</p><p>Crackme 2</p><p>Vamos voltar para a busca por strings e vamos até</p><p>o código que faz uso da string "would like to</p><p>inform...":</p><p>Agora clique com o botão direito na instrução que</p><p>acabamos de colar e em seguida selecione</p><p>"Copiar -> Endereço":</p><p>Crackme 2</p><p>Suba até a instrução "push ebp". Aperte espaço</p><p>para alterar o código e vamos trocar pela instrução</p><p>jmp [endereço copiado]. Com isso estamos</p><p>querendo que quando o alerta de detecção de</p><p>remoção for disparado, em vez de exibir o popup,</p><p>saia da aplicação. Ou seja, fizemos o que</p><p>queríamos no programa e na parte que vamos ser</p><p>bombardeados de popups a gente sai do</p><p>programa.</p><p>Novamente é preciso desmarcar a opção "manter</p><p>tamanho".</p><p>Lembrando que se fosse um programa que você</p><p>quisesse fazer mais coisas, poderia mudar a</p><p>abordagem para um código de acordo com suas</p><p>necessidades.</p><p>Dê um duplo clique para ir até o código:</p><p>Crackme 2</p><p>Vamos em "Arquivo -> Patch file -> export" e</p><p>vamos fazer um backup de todas as nossas</p><p>alterações. Vá em "export" e salve onde desejar.</p><p>Ainda na tela de "Patch file", clique em "Patch</p><p>file" e vamos salvar o nosso binário modificado</p><p>para testarmos.</p><p>Feche o x32dbg e execute o novo .exe.</p><p>Crackme 2</p><p>Veja que quase conseguimos: exibimos apenas os</p><p>popups "do bem". Nenhum popup com "Nags"</p><p>nem informando que apagamos os Nags.</p><p>Porém em vez de encerrar após o último popup, o</p><p>programa está encerrando inesperadamente.</p><p>Se você tiver o Visual Studio instalado, ao aparecer</p><p>"...parou de funcionar", escolha a opção</p><p>"depurar" e, em seguida, "Visual Studio". Por</p><p>fim, clique em "OK" e aguarde o Visual Studio</p><p>carregar:</p><p>Crackme 2</p><p>Crackme 2</p><p>Ao carregar o Visual Studio, vai aparecer a</p><p>mensgaem acima "Exceção sem tratamento em</p><p>[ENDEREÇO]". Anote este endereço (para você irá</p><p>aparecer outro endereço).</p><p>Abra novamente o último binário modificado (esse</p><p>que está encerrando de forma inesperada) e</p><p>anexe ao x32dbg.</p><p>Vá na aba símbolos e dê um duplo clique ou</p><p>enter no nome do módulo principal. O nome vai</p><p>ser o nome do exe que você salvou, no meu caso</p><p>ebook7.exe (fui incrementando os números</p><p>conforme os testes. Não se preocupe se o nome</p><p>do seu esitver diferente ou se você não tiver</p><p>gerado 7 binários).</p><p>Crackme 2</p><p>Repare que o nome do módulo que você está,</p><p>aparece no título da janela do x32dbg:</p><p>Crackme 2</p><p>Aperte ctrl+g ou clique com o botão direito -></p><p>Ir para -> "expressão".</p><p>Crackme 2</p><p>Digite o endereço que você anotou na depuração</p><p>da execução que deu erro e clique em OK para ir</p><p>até o endereço.</p><p>Ops! Repare que nossa instrução não está mais lá.</p><p>Isso significa que essa região do binário é zerada a</p><p>cada execução. Sendo assim, não podemos</p><p>colocar nosso código nela.</p><p>Crackme 2</p><p>Por se tratar de uma call para a função exit,</p><p>poderíamos simplesmente substituir o jmp pela</p><p>instrução call exit. Mas vamos tentar algo diferente</p><p>para treinarmos mais. Calma! O resultado é</p><p>apenas consequência. O importante em um write-</p><p>up é o aprendizado no caminho.</p><p>Vamos procurar um NOP. Nós com certeza vamos</p><p>encontrar alguns, já que nós mesmos colocamos</p><p>mais de um. Só precisamos de uma linha com NOP</p><p>para fazermos nosso desvio para função exit. Para</p><p>encontrarmos um NOP em vez de ficar rolando a</p><p>tela, vamos utilizar a busca por padrões. Clique</p><p>com o botão direito -> Pesquisar por -></p><p>Módulo Atual -> Padrão:</p><p>Crackme 2</p><p>No campo hexadecimal, coloque 90 que é o</p><p>opcode de NOP:</p><p>Crackme 2</p><p>Vamos selecionaro resultado que corresponde à</p><p>uma sequência de NOPs. No caso basta passar o</p><p>mouse em cima do endereço. Também</p><p>poderíamos ter feito a busca por uma sequência</p><p>de "90":</p><p>Crackme 2</p><p>Dê um duplo clique no endereço ou selecione e</p><p>aperte enter para irmos até a instrução:</p><p>Crackme 2</p><p>Dê espaço no primeiro NOP para alterar a</p><p>instrução e cole novamente a instrução call exit</p><p>igual a página 51:</p><p>Faça novamente o patch e teste o binário. Para</p><p>não estragarmos o que fizemos até agora, sugiro</p><p>que você salve o binário com um novo nome.</p><p>Crackme 2</p><p>Logo após clicarmos em OK no primeiro popup, o</p><p>programa para de funcionar:</p><p>Clique em depurar e copie o endereço da</p><p>instrução que causou o crash:</p><p>Aperte ctrl+g ou botão direito -> ir para -></p><p>expressão. Digite o endereço anotado no</p><p>depurador e clique em OK:</p><p>Crackme 2</p><p>Abra o binário que acabamos de testar no x32dbg.</p><p>Vá em "Símbolos -> dê um duplo clique no</p><p>módulo principal". Você irá para uma janela</p><p>parecida com essa:</p><p>Vamos procurar por chamadas intermodulares e</p><p>procurar por exit novamente.</p><p>Crackme 2</p><p>Repare que o nosso código com a chamada para</p><p>exit está ali ainda. A aplicação deu erro porque o</p><p>endereço da função exit é carregado</p><p>dinamicamente por se tratar de uma dll.</p><p>Escolha a msvcr90.exit e aperte enter para ir até</p><p>lá:</p><p>Dessa vez, ao invés de copiarmos a instrução toda,</p><p>nós vamos copiar o endereço dessa linha que já</p><p>contém o endereço resolvido.</p><p>Clique com o botão direito -> Copiar -></p><p>Endereço:</p><p>Crackme 2</p><p>Volte em nossa instrução "call" (endereço copiado</p><p>do depurador - página 68). Altere a instrução para</p><p>jmp [ENDEREÇO] (lembrando que o endereço</p><p>que você copiou vai ser diferente do meu):</p><p>Crackme 2</p><p>Repare que após alterar a instrução, se você</p><p>passar o mouse em cima, já conseguirá ver que</p><p>estamos dando um jump até a função que chama</p><p>exit:</p><p>Faça um novo patch e salve o binário um novo</p><p>nome. Feche o x32dbg e teste o programa</p><p>modificado.</p><p>Quase! Após o primeiro popup, ao clicarmos em</p><p>OK, o programa sai sem nenhum erro. No entanto,</p><p>não queremos sair antes de usarmos tudo que o</p><p>programa tem a nos oferecer.</p><p>Exclua esse binário e abra anterior no x32dbg</p><p>(aquele último que depuramos e copiamos o</p><p>endereço). Lembre-se de ir em "Símbolos" e</p><p>selecionar o módulo atual. Depois aperte ctrl+g e</p><p>coloque o endereço copiado na depuração (página</p><p>66 e 67):</p><p>Crackme 2</p><p>Vamos voltar a instrução para NOP novamente,</p><p>conforme imagens abaixo:</p><p>Crackme 2</p><p>Clique com o botão direito -> Pesquisar por - ></p><p>Todos os módulos -> Referências String:</p><p>Espere carregar todas as strings e procure por</p><p>"would like to inform":</p><p>Crackme 2</p><p>Dê um duplo clique ou aperte enter na primeira:</p><p>Nas instruções logo acima temos o nosso jmp que</p><p>está direcionando para a nossa code cave (que é</p><p>sobrescrita toda vez que o programa é executado):</p><p>Crackme 2</p><p>Se você passar o mouse em cima da instrução</p><p>Jump, verá a nossa code cave:</p><p>Edite essa instrução jmp para apontar para a</p><p>nosso jump que chama a função exit (página 70):</p><p>Crackme 2</p><p>Após editar, se você passar o mouse na instrução,</p><p>verá que agora nosso jump salta para a função</p><p>responsável por chamar a exit (em um ponto que</p><p>o endereço da dll já foi resolvido):</p><p>Salve o patch novamente, feche o x32dbg e abra o</p><p>binário modificado para testar.</p><p>TCHARAAAM! Finalmente! Após exibir os 3</p><p>popups esperados do programa, nós chamamos a</p><p>função exit e saímos do programa sem nenhum</p><p>erro!</p><p>Se você chegou até aqui sem pular nenhum passo,</p><p>parabéns!</p><p>Esse é um crackme feito para ser de fácil</p><p>resolução. No entanto, eu aproveitei para</p><p>demonstrar e testar com você diferentes técnicas.</p><p>Além das técnicas, cometemos alguns erros muito</p><p>comuns como editar área de códigos que são</p><p>"resetadas" e chamar bibliotecas dinâmicas em</p><p>trechos onde não temos o endereço resolvido</p><p>ainda. Vimos busca por strings, busca por padrões</p><p>de código, busca por chamadas intermodulares</p><p>(onde normalmente vamos interceptar chamadas</p><p>para DLLs), aprendemos sobre code caves e</p><p>muitas outras coisas.</p><p>Crackme 2</p><p>O E-book ficou um pouco extenso, mas era</p><p>necessário demonstrar passo a passo para que</p><p>você não se perdesse em meio às nossas tentativa.</p><p>Eu acredito que nesta edição conseguimos</p><p>entregar muito: conceitos, técnicas e bastante</p><p>sobre o x32dbg.</p><p>Modéstia à parte, se você estudar com carinho</p><p>todas as nossas tentativas, eu acredito que essa</p><p>edição é praticamente um minicurso de</p><p>engenharia reversa.</p><p>Na página seguinte tem os nossos contatos. Fique</p><p>à vontade para nos mandar feedbacks. Se você</p><p>puder avaliar na Hotmart, também nos ajuda</p><p>bastante a levar nossa mensagem a mais pessoas.</p><p>Crackme 2</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>

Mais conteúdos dessa disciplina