04. Removendo nag-screens
Este com certeza é meu tutorial mais fácil, feito especialmente para aqueles que estão trabalhando com engenharia reversa pela primeira vez.
O foco principal é remover algo que chamamos de "Nag Screen", aquelas janelinhas chatas que aparecem quando você inicia determinados programas. Nesse caso, é o mais simples possível, então vamos lá. Baixe o nosso alvo ( programado em ASM, por mim mesmo )
-Download: fergo_nag.zip
Rode o nosso alvo. Logo de cara aparece uma MessageBox alertando sobre a nag, e somente depois de clicar OK nos conseguimos entrar no "programa".
Certo, vamos ao Olly. Abra o Olly e carregue o executável. Temos diversas maneiras de chegar no local onde a messagbox é exibida. Um deles é procurando por todas as strings contidas no programa ( Botão Direito->Search For->All referenced text string ). Outro e rocurar pela chamada da função MessageBox. A segunda, neste caso, nos leva diretamente a chamada da nagscreen, pois só existe uma MessageBox no programa.
Aperte ALT E, na lista que aparecer, clique com o botão direito sobre o primeiro item da lista ( fergonag ) e selecione View Names. Uma nova lista apareceu, contendo todas as funções que o executável utiliza. Repare que uma delas é a MessageBox. Vamos setar um breakpoint no local onde a função é chamada. Clique com o botão direito sobre "user32.MessageBoxA" e selecione "Set Breakpoint on every reference". Ao rodar o programa, ele vai congelar na hora em que for chamada a função Messagebox. Aperte F9 ( ou clique no botão Play la em cima ).
Assim que você clicar no botão play, ele já atinge a chamada da função e o Olly exibe o local onde paramos:
00401023 6A 30 PUSH 30 ; Puxa o tipo da msgbox para janela com ícone de exlamação
00401025 50 PUSH EAX ; Puxa o título
00401026 53 PUSH EBX ; Puxa o texto da msgbox
00401027 6A 00 PUSH 0 ; Puxa o dono da janela
00401029 E8 B0010000 CALL <JMP.&user32.MessageBoxA> ; Chama a função, que usa como argumentos os 4 valores puxados anteriormente
Certo, qual era o nosso objetivo mesmo? Remover essa msgbox. Bom, podemos simplesmente o conteúdo referente a msgbox. Mas é tão fácil assim mesmo? Pior que é. Para anular uma linha, usamos o comando NOP ( No OPeration ). Selecione todas as 5 linhas referentes à MsgBox ( do endereço 00401023 até 00401029 ), clique com o botão direito, vá em "Binary->Fill with Nops".
Depois de alterar a linha, continue e execução do programinha ( F9 ) e pimba! A nag-screen sumiu! Alcançamos nosso objetivo. Se quiser salvar as alterações, clique com "Botão Direito->Copy do Executable->All Modifications" e depois em "Copy All". Na janela que abrir, clique com o botão direito novamente e vá em "Save File".
F3rGO!