A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Oficina

KeygenMe #1 (I-2)

Dom

27

Ago

2006


17:46

(16 votos, média 4.81 de 5) 


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
...
  1. (F7) ADD ESP,0C - Adiciona 0Ch (12 decimal) ao ponteiro da pilha.
  2. (F7) XOR EAX,EAX - Zera o registrador EAX.
  3. (F7) XOR EBX,EBX - Zera o registrador EBX.
  4. (F7) XOR EDX,EDX - Zera o registrador EDX.
  5. (F7) XOR ECX,ECX - Zera o registrador ECX.
  6. (F7) MOV EAX,keygenme.0040E0F8 - Coloca em EAX o endereço 0040E0F8 onde se encontra a string "FFFFFE58".
  7. (F7) ADD EBX,EAX - Soma EBX com AEX, ou seja, EBX tem agora o mesmo endereço.
  8. (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 smile
  9. (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.
  10. (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
...
  1. (F7) ADD ESP,0C - Adiciona 0Ch (12 decimal) ao endereço da pilha.
  2. (F7) PUSH keygenme.0040DBFC - Põe na pilha o formato "Bon-".
  3. (F7) PUSH keygenme.0040DDF8 - Põe na pilha o endereço onde deve ser colocada a string.
  4. (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
...
  1. (F7) ADD ESP,8 - Adianta o ponteiro da pilha em 8.
  2. (F7) PUSH keygenme.0040E0F8 - Põe na pilha o endereço da primeira string ("FFFFFE58").
  3. (F7) PUSH keygenme.0040DDF8 - Põe na pilha o endereço onde a string resultante deve ser colocada (já está com "Bon-").
  4. (F8) CALL - Chama a função lstrcatA para concaternar as duas strings fornecidas. Em 0040DDF8 deve aparecer "Bon-FFFFFE58".
  5. (F7) PUSH keygenme.0040DC01 - Põe na pilha o endereço da string "-".
  6. (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".
  7. (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.

Informações adicionais