Cursos de Informática Grátis www.megainforcursos.com

20 de maio de 2012

RE-ASSEMBLY

Finalmente arranjei um tempo livre e dei continuidade do estudo 

RE-ASSEMBLY

O Olly além de ser um ótimo debugger, é um ótimo assembler. Com ele também é possível editar o código em tempo real e observar as mudanças de comportamento. Todas as mudanças que você realiza no código ficam salvas já janela de “Show Patches” (/). Vamos agora ver como podemos modificar o código e re-salvar o nosso executável (muito útil para correção de bugs).

Reabra o nosso arquivo no Olly, caso ele esteja fechado. Nos capítulos anteriores discutimos um pouco sobre o funcionamento do nosso aplicativo de teste, então vamos agora fazer uma pequena modificação no mesmo para que ele sempre exiba a mensagem de “Você acertou”.

Nós tínhamos uma seqüência de comparações seguidas pelos seus respectivos saltos. A primeira verificava se o número era menor que 1, a segunda se ele era maior que 20 e a terceira se ele era em si o número escondido (4). Existem diversas formas de fazer com que o número seja sempre o correto. Vou listar algumas:
  • Alterar o código forçando que o valor 4 seja movido para EAX antes da comparação.
  • Anular o último salto (após o CMP EAX, 4), fazendo com que o fluxo do aplicativo siga direto para a mensagem correta.
  • Desviando e forçando um salto para a mensagem correta logo na primeira comparação realizada.
Existem outras formas ainda, mas vamos ficar com essas três, pois são as mais óbvias. Eu vou utilizar o último método neste tutorial para exemplificar o processo.

O que basicamente nós vamos fazer é forçar um salto logo após a função GetDlgItemInt diretamente para a região que chama a nossa mensagem de texto “Você acertou...”, como mostra a imagem abaixo:


Para modificar o disassembly, basta clicar sobre a linha que deseja alterar e apertar a tecla “Espaço”. Isso fará com que uma janela se abra com um local onde você possa indicar a instrução que deseja colocar no local.

O nosso objetivo aqui é substituir o CMP EAX, 1 por um salto não-condicional até o local onde os argumentos da nossa mensagem de texto começam a ser selecionados (no PUSH 0, localizado no endereço 00401063).

Clique sobre a linha que contém o CMP EAX, 1 (no endereço 00401054) e pressione “Espaço”. A seguinte janela se abrirá:


Na caixa de texto é onde você entra com a instrução em assembly que deseja substituir. Caso a instrução que nós inserirmos seja menor (em bytes) que a instrução anterior, o Olly substitui esses bytes restantes pela instrução NOP, que não realiza nenhuma operação, evitando assim que fiquem resquícios e “lixos” do comando anterior (caso a caixa de seleção “Fill with NOP’s” esteja selecionada, claro).

Altere o CMP EAX, 1 por JMP 00401063, como mostra a figura:


Em seguida, basta clicar em Assemble para confirmar a modificação. Você deve ter notado que o Olly coloriu com vermelho aquilo que foi modificado. Note também que ele inseriu um comando NOP após o salto, indicando que o nosso opcode do salto era 1 byte menor que o comando anterior.


Você pode rodar o nosso aplicativo dentro do Olly e observar a modificação. Agora, com qualquer valor que você entre (mesmo aqueles fora do intervalo), o programa vai exibir a mensagem que desejávamos.

Como mencionado anteriormente, todas as modificações ficam armazenadas na janela de patches, que pode ser acessada clicando no botão “\” ou através o atalho CTRL+P. Para alternar entre a instrução modificada e a original, basta selecionar a modificação desejada na janela de patches e apertar “Espaço” (ou através do botão direito -> “Restore original code”).

Para salvar o novo executável é bem simples. Na janela de dissassembly, clique com o botão direito e vá para “Copy to Executable -> All modifications”. Uma pequena janela se abrirá perguntando se você deseja copiar o código modificado. Selecione “Copy All”. Uma nova janela, contendo todo o código modificado, será exibida. Clique com o botão direito sobre ela e selecione “Save File”. Basta escolher o local e você terá um novo executável, contendo a modificação realizada.

Espero dar continuidade em breve.

Abraços e bom final de semana,
Fergo
20-10-2007 por emtudo
Citação:
Postado Originalmente por Fergo Ver Mensagens
Valeu pelo apoio pessoal.
Finalmente arranjei um tempo livre e dei continuidade do estudo 

RE-ASSEMBLY
Valeu, esta cada vez melhor, nao posso deixar de sempre agradecer

0 comentários:

Postar um comentário

 
Design by Wordpress Theme | Bloggerized by Free Blogger Templates | coupon codes