Oficina
Ser-Me do megadoctor (I-1)
Qua 23 Ago 2006 11:24 |
- Detalhes
- Categoria: Pilotando o rato I-1
- Atualização: Domingo, 14 Junho 2009 17:29
- Autor: vovó Vicki
- Acessos: 12596
O OllyDbg entra em ação
O DeDe nos indicou o endereço inicial da subrotina chamada quando clicamos o botão [Registrar], ou seja, 004596DC. Abra o Ser-Me.exe no OllyDbg, coloque uma parada (breakpoint) no endereço citado com F2 e rode o programa com F9. Quando a janela do Ser-Me for apresentada, clique no botão [Registrar]. BINGO! A execução é interrompida exatamente onde queremos:
004596DC . 53 PUSH EBX 004596DD . 8BD8 MOV EBX,EAX 004596DF . B8 58CC4500 MOV EAX,Ser-MeCe.0045CC58 004596E4 . BA 58974500 MOV EDX,Ser-MeCe.00459758 ; ASCII "Error" 004596E9 . E8 EAABFAFF CALL Ser-MeCe.004042D8 004596EE . B8 54CC4500 MOV EAX,Ser-MeCe.0045CC54 004596F3 . BA 68974500 MOV EDX,Ser-MeCe.00459768 ; ASCII "Wrong Serial !" 004596F8 . E8 DBABFAFF CALL Ser-MeCe.004042D8 004596FD . C705 5CCC4500 >MOV DWORD PTR DS:[45CC5C],1010 00459707 . A1 5CCC4500 MOV EAX,DWORD PTR DS:[45CC5C] 0045970C . 50 PUSH EAX 0045970D . A1 58CC4500 MOV EAX,DWORD PTR DS:[45CC58] 00459712 . E8 1DB0FAFF CALL Ser-MeCe.00404734 00459717 . 50 PUSH EAX 00459718 . A1 54CC4500 MOV EAX,DWORD PTR DS:[45CC54] 0045971D . E8 12B0FAFF CALL Ser-MeCe.00404734 00459722 . 50 PUSH EAX 00459723 . 8BC3 MOV EAX,EBX 00459725 . E8 4624FEFF CALL Ser-MeCe.0043BB70 0045972A . 50 PUSH EAX ; |hOwner 0045972B . E8 98D7FAFF CALL <JMP.&user32.MessageBoxA> ; \MessageBoxA 00459730 . A3 60CC4500 MOV DWORD PTR DS:[45CC60],EAX 00459735 . 8B83 04030000 MOV EAX,DWORD PTR DS:[EBX+304] 0045973B . 8B10 MOV EDX,DWORD PTR DS:[EAX] 0045973D . FF52 50 CALL DWORD PTR DS:[EDX+50] 00459740 . 84C0 TEST AL,AL 00459742 . 74 0A JE SHORT Ser-MeCe.0045974E 00459744 . B8 80974500 MOV EAX,Ser-MeCe.00459780 ; ASCII "Get Rid of This little fucker :P" 00459749 . E8 BA55FDFF CALL Ser-MeCe.0042ED08 0045974E > 5B POP EBX 0045974F . C3 RETN
Vá pilotando a execução passo a passo com F7. Ao executar a instrução do endereço 004596E4 observe que a string "Error" foi copiada do endereço 00459758 e colocada no registrador EDX. Anote este endereço! Logo em seguida é feita uma chamada para uma subrotina que, no momento, não nos interessa. Faça um step-over com F8 nesta chamada.
Mais dois F7 e agora o registrador EDX recebe a string "Wrong Serial !" que está no endereço 00459768 (anote este endereço também). A seguir, a mesma subrotina citada acima é chamada - use F8 para executá-la e retornar imediatamente para uma instrução abaixo dela (isto é para não se perder ).
Continue com F8 para as chamadas e com F7 para as outras instruções. Observe que as strings são passadas para o registrador EAX e depois colocadas na pilha (você pode observar a pilha no painel inferior direito do OllyDbg). Isto nada mais é do que a preparação para uma chamada à função MessageBoxA da API do Windows que nos apresentará uma caixa de mensagem com o título "Error" e com o texto "Wrong Serial !".
Bem, se uma das tarefas é fazer com que o Ser-Me aceite QUALQUER serial e dê a mensagem "Serial Certo !", então a solução é mais do que simples. Basta localizar as duas strings nos endereços anotados e alterá-las. Para isto, procure e selecione o endereço 00459758. Depois, clique com o botão direito do mouse sobre ele, escolha Binary e depois Edit (Ctrl-E faz o mesmo). Na janela de edição, na área de texto identificada por ASCII, substitua Error por Legal ou outro título qualquer de, no máximo, 5 caracteres. NÃO mexa no sexto caracter da string (que corresponde ao valor hexadecimal 00), porque este é um terminador de strings que não pode faltar. Terminada a alteração, clique no botão [OK] e observe a alteração ocorrida no painel das instruções - não aparece nada dizendo que se trata de uma string de caracteres ASCII, mas sim uma porção de instruções complicadas destacadas em vermelho. Xiiiii será que deu pau? Não se preocupe, é apenas o OllyDbg achando que introduzimos código executável. Tudo isto se ajeita depois que salvarmos o programa com as alterações.
Agora que você sabe como fazer alterações, troque a string "Wrong Serial !" por "Serial Certo !" no endereço 00459768. Recomece a execução com F9, clique no botão [Registrar] e observe as mudanças na caixa de mensagem. tá tudo em riba? Então chegou a hora de salvar as mudanças introduzidas. Clique com o botão direito do mouse em qualquer lugar do painel de instruções, escolha Copy to executable e <All modifications. Na nova caixa de mensagem (Copy selection to executable file?) clique no botão [Copy all]. O OllyDbg abre uma nova janela que mostra a cópia do arquivo. Clique nesta nova janela com o botão direito do mouse, escolha Save file e salve com um nome da sua escolha (eu usei Ser-MeStrings.exe).
Execute o "novo" Ser-MeStrings.exe. Agora o bacaninha mostra a mensagem de Serial Certo mas, logo em seguida, ainda joga a mensagem "Get Rid of This little fucker :P" na tela. Tirar este negócio é a nossa última tarefa. Para isto, observe o endereço 00459742, um pouco antes da string:
00459742 . 74 0A JE SHORT Ser-MeCe.0045974E
O endereço apontado pelo salto corresponde à preparação do encerramento desta subrotina, ou seja, o alinhamento da pilha com POP EBX, e depois pede para retornar ao ponto de chamada com RETN. Bem, que tal simplesmente forçar este salto?
Selecione o endereço 00459742, clique sobre ele com o botão direito do mouse e escolha Assemble (ou simplesmente aperte a tecla de espaço). Na janela de edição troque JE SHORT 0045974E por JMP SHORT 0045974E e clique no botão [Assemble]. No painel de instruções 74 0A é mudado para EB 0A e aparece destacado em vermelho (já sabemos, é porque foi alterado). Rode o programa com F9 e confirme que o "little fucker" deixou de atazanar.
Finalmentes
Da minha parte, por ora é só. Para você que está lendo este tutorial, ainda falta salvar o arquivo com a última alteração feita. No jargão da ER estas alterações feitas na marra são chamadas de patch, ou seja, remendos. Usei este crackme meio sem graça como exemplo apenas para mostrar como é fácil fazer remendos... contanto que se saiba como e onde.
Abraços a todos
- << Anterior
- Próximo