Oficina
KeygenMe #1 (I-2)
Dom 27 Ago 2006 17:46 |
- Detalhes
- Categoria: Pilotando o rato I-2
- Atualização: Terça, 02 Setembro 2008 19:11
- Autor: vovó Vicki
- Acessos: 13228
Já temos dois valores calculados e transformados em string: FFFFFE58 e FB74E600. Agora é a hora de obter uma terceira string (espero que não seja outro junk code...)
... 00401287 |. 83C4 0C ADD ESP,0C 0040128A |. 33C0 XOR EAX,EAX 0040128C |. 33DB XOR EBX,EBX 0040128E |. 33D2 XOR EDX,EDX 00401290 |. 33C9 XOR ECX,ECX 00401292 |. B8 F8E04000 MOV EAX,keygenme.0040E0F8 ; ASCII "FFFFFE58" 00401297 |. 03D8 ADD EBX,EAX 00401299 |. 33CB XOR ECX,EBX 0040129B |. 0FAFCB IMUL ECX,EBX 0040129E |. 2BC8 SUB ECX,EAX 004012A0 |. 51 PUSH ECX ; /<%lX> 004012A1 |. 68 F8DB4000 PUSH keygenme.0040DBF8 ; |Format = "%lX" 004012A6 |. 68 F8E24000 PUSH keygenme.0040E2F8 ; |s = keygenme.0040E2F8 004012AB |. E8 E8000000 CALL <JMP.&user32.wsprintfA> ; \wsprintfA ...
- (F7) ADD ESP,0C - Adiciona 0Ch (12 decimal) ao ponteiro da pilha.
- (F7) XOR EAX,EAX - Zera o registrador EAX.
- (F7) XOR EBX,EBX - Zera o registrador EBX.
- (F7) XOR EDX,EDX - Zera o registrador EDX.
- (F7) XOR ECX,ECX - Zera o registrador ECX.
- (F7) MOV EAX,keygenme.0040E0F8 - Coloca em EAX o endereço 0040E0F8 onde se encontra a string "FFFFFE58".
- (F7) ADD EBX,EAX - Soma EBX com AEX, ou seja, EBX tem agora o mesmo endereço.
- (F7) XOR ECX,EBX - Faz um XOR entre ECX e EBX. Hahaha... agora não nos pegam de calça curta. Se ECX está todo zerado e fizermos um XOR com EBX que tem um valor, o valor de EBX simplesmente é transferido para ECX. O mesmo poderia ter sido feito com ADD ECX,EBX
- (F7) IMUL ECX,EBX - Multiplica ECX por EBX, ou seja, ECX = 40E0F8 x 40E0F8 = 107141B2F040. Sobrou bit de novo e o registrador EBX só guarda 41B2F040.
- (F7) SUB ECX,EAX - Subtrai EAX de ECX. Neste caso, ECX = 41B2F040 - 0040E0F8 = 41720F48.
O restante do código já dá para tirar de letra: os parâmetros necessários para a função wsprintfA são colocados na pilha e a dita cuja é chamada para transformar o valor hexadecimal de ECX numa string, ou seja, a terceira string calculada é "41720F48".
Seguindo com o código temos:
... 004012B0 |. 83C4 0C ADD ESP,0C 004012B3 |. 68 FCDB4000 PUSH keygenme.0040DBFC ; /Format = "Bon-" 004012B8 |. 68 F8DD4000 PUSH keygenme.0040DDF8 ; |s = keygenme.0040DDF8 004012BD |. E8 D6000000 CALL; \wsprintfA ...
- (F7) ADD ESP,0C - Adiciona 0Ch (12 decimal) ao endereço da pilha.
- (F7) PUSH keygenme.0040DBFC - Põe na pilha o formato "Bon-".
- (F7) PUSH keygenme.0040DDF8 - Põe na pilha o endereço onde deve ser colocada a string.
- (F8) CALL
- Coloca a string "Bon-" no endereço indicado.
Parece que a string final já está sendo montada. Procure o endereço 0040DDF8 (se é que você já não o fez), certifique-se de que "Bon-" já está no lugar e continue monitorando este bloco de endereços de memória.
... 004012C2 |. 83C4 08 ADD ESP,8 004012C5 |. 68 F8E04000 PUSH keygenme.0040E0F8 ; /StringToAdd = "FFFFFE58" 004012CA |. 68 F8DD4000 PUSH keygenme.0040DDF8 ; |ConcatString = "Bon-" 004012CF |. E8 B2000000 CALL; \lstrcatA 004012D4 |. 68 01DC4000 PUSH keygenme.0040DC01 ; /StringToAdd = "-" 004012D9 |. 68 F8DD4000 PUSH keygenme.0040DDF8 ; |ConcatString = "Bon-" 004012DE |. E8 A3000000 CALL ; \lstrcatA 004012E3 |. 68 F8E14000 PUSH keygenme.0040E1F8 ; /StringToAdd = "FB74E600" 004012E8 |. 68 F8DD4000 PUSH keygenme.0040DDF8 ; |ConcatString = "Bon-" 004012ED |. E8 94000000 CALL ; \lstrcatA 004012F2 |. 68 01DC4000 PUSH keygenme.0040DC01 ; /StringToAdd = "-" 004012F7 |. 68 F8DD4000 PUSH keygenme.0040DDF8 ; |ConcatString = "Bon-" 004012FC |. E8 85000000 CALL ; \lstrcatA 00401301 |. 68 F8E24000 PUSH keygenme.0040E2F8 ; /StringToAdd = "41720F48" 00401306 |. 68 F8DD4000 PUSH keygenme.0040DDF8 ; |ConcatString = "Bon-" 0040130B |. E8 76000000 CALL ; \lstrcatA ...
- (F7) ADD ESP,8 - Adianta o ponteiro da pilha em 8.
- (F7) PUSH keygenme.0040E0F8 - Põe na pilha o endereço da primeira string ("FFFFFE58").
- (F7) PUSH keygenme.0040DDF8 - Põe na pilha o endereço onde a string resultante deve ser colocada (já está com "Bon-").
- (F8) CALL
- Chama a função lstrcatA para concaternar as duas strings fornecidas. Em 0040DDF8 deve aparecer "Bon-FFFFFE58". - (F7) PUSH keygenme.0040DC01 - Põe na pilha o endereço da string "-".
- (F7) PUSH keygenme.0040DDF8 - Põe na pilha o endereço onde a string resultante deve ser colocada (neste ponto já está como "Bon-FFFFFE58".
- (F7) CALL
- Chama a função lstrcatA para concaternar as duas strings fornecidas. Em 0040DDF8 deve aparecer "Bon-FFFFFE58-".
E por aí vai. O restante é a repetição do método para concatenar strings até que o serial resulta em Bon-FFFFFE58-FB74E600-41720F48. Depois disto, o serial fornecido é comparado com o calculado e você já conhece o resto da história.