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

kiTo KGNmeAGAiN (C-1)

Seg

28

Ago

2006


10:20

(7 votos, média 5.00 de 5) 


Vou repetir aqui o trecho que será analisado passo a passo para que vocês acompanhem o que está acontecendo comparando os fatos com as instruções em Assembly. Além disso, neste ponto de execução, algumas strings foram atualizadas:

...
00401139  |. 68 A2324000    PUSH kiToKGNm.004032A2         ; /StringToAdd = "dGVzdGU="
0040113E  |. 68 D4324000    PUSH kiToKGNm.004032D4         ; |ConcatString = ""
00401143  |. E8 A0080000    CALL <JMP.&kernel32.lstrcatA>  ; \lstrcatA
00401148  |. 68 3E324000    PUSH kiToKGNm.0040323E         ; /StringToAdd = "NTE0MDA4MjhOVEUwTURBNE=="
0040114D  |. 68 D4324000    PUSH kiToKGNm.004032D4         ; |ConcatString = ""
00401152  |. E8 91080000    CALL <JMP.&kernel32.lstrcatA>  ; \lstrcatA
00401157  |. 68 D4324000    PUSH kiToKGNm.004032D4         ; /String = ""
0040115C  |. E8 93080000    CALL <JMP.&kernel32.lstrlenA>  ; \lstrlenA
00401161  |. A3 A0314000    MOV DWORD PTR DS:[4031A0],EAX
00401166  |. E8 3D060000    CALL kiToKGNm.004017A8
0040116B  |. FF35 A0314000  PUSH DWORD PTR DS:[4031A0]
00401171  |. 68 D4324000    PUSH kiToKGNm.004032D4         ; ASCII "NTE0MDA4MjhOVEUwTURBNE=="
00401176  |. E8 6D060000    CALL kiToKGNm.004017E8
0040117B  |. E8 C8060000    CALL kiToKGNm.00401848
...
  1. F7 - Põe o nome em Base64 (dGVzdGU=) na pilha.
  2. F7 - Pôe uma string vazia na pilha.
  3. F8 - Chama a subrotina de concatenação de strings do kernel32 que coloca "" + "dGVzdGU=" no endereço 004032D4.
  4. F7 - Põe NTE0MDA4MjhOVEUwTURBNE== na pilha (de onde será que veio este Base64?)
  5. F7 - Põe a string concatenada dGVzdGU= na pilha.
  6. F8 - Chama a subrotina de concatenação de strings que coloca "dGVzdGU=" + "NTE0MDA4MjhOVEUwTURBNE==" no endereço 004032D4.
  7. F7 - Põe a string concatenada dGVzdGU=NTE0MDA4MjhOVEUwTURBNE== na pilha.
  8. F8 - Chama a rotina do kernel32 que determina o comprimento de strings, o que retorna o valor 20h (32 decimal) no registrador EAX.
  9. F7 - Coloca o valor de EAX (20h) na posição de memória 4031A0.
  10. F8 - Chama uma rotina em 004017A8 :confused:
  11. F7 - Põe o valor da posição de memória 4031A0 (20h) na pilha.
  12. F7 - Põe a string NTE0MDA4MjhOVEUwTURBNE== na pilha.
  13. F8 - Chamada para 004017E8 :confused:
  14. F8 - Chamada para 00401848 :confused:

:confused: Quando começam a surgir muitas dúvidas, pode-se fazer duas coisas: simplesmente continuar para ver no que vai dar ou explorar melhor onde estamos enroscando. Optei por simplesmente continuar para ver se é possível ciscar o serial correto para o usuário "teste". Depois, podemos voltar para esclarecer as dúvidas.

...
00401180  |. 33DB           XOR EBX,EBX
00401182  |. 0318           ADD EBX,DWORD PTR DS:[EAX]
00401184  |. 0358 04        ADD EBX,DWORD PTR DS:[EAX+4]
00401187  |. 0358 08        ADD EBX,DWORD PTR DS:[EAX+8]
0040118A  |. 0358 0C        ADD EBX,DWORD PTR DS:[EAX+C]
0040118D  |. 53             PUSH EBX                       ; /<%X>
0040118E  |. 68 00304000    PUSH kiToKGNm.00403000         ; |Format = "%X"
00401193  |. 68 38334000    PUSH kiToKGNm.00403338         ; |s = kiToKGNm.00403338
00401198  |. E8 5D080000    CALL <JMP.&user32.wsprintfA>  ; \wsprintfA
0040119D  |. 83C4 0C        ADD ESP,0C
004011A0  |. C605 3C334000 >MOV BYTE PTR DS:[40333C],2D
...
  1. F7 - Zera o registrador EBX.
  2. F7 - Soma EBX com valor que está na posição de memória indicada em EAX. O endereço é 004033F0 (marque este endereço, pois é daí que o programa está buscando os dados).
  3. F7 - Soma EBX com o valor que está na posição de memória indicada em EAX+4. Epa, parece que está sendo feita uma soma de valores de 32 bits (dwords).
  4. F7 - Soma EBX com o valor que está na posição de memória indicada em EAX+8.
  5. F7 - Soma EBX com o valor que está na posição de memória indicada em EAX+C. Para mim, o resultado de todas estas somas foi EBX = 6D6809C2 (o seu deve ser outro).
  6. F7 - Põe o valor 6D6809C2 na pilha.

  7. F7 - Põe o formato %X na pilha.

  8. F7 - Põe o endereço 403338 na pilha (localize este endereço no painel da memória, o inferior esquerdo, e observe o resultado depois do próximo passo).

  9. F8 - Chama a função da DLL user32 que transforma valores hexadecimais em strings. A string 6D6809C2 é colocada no endereço de memória que está sendo monitorado.
  10. F7 - Adiciona 0Ch (12 decimal) ao ponteiro da pilha.
  11. F7 - Coloca o valor ASCII 2D, que corresponde ao caracter "-", na quinta posição da string "6D6809C2" transformando-a em 6D68-9C2. Será este o serial procurado?

Informações adicionais