Oficina
kiTo KGNmeAGAiN (C-1)
Seg 28 Ago 2006 10:20 |
- Detalhes
- Categoria: Pilotando o rato C-1
- Atualização: Quarta, 22 Abril 2009 11:09
- Autor: vovó Vicki
- Acessos: 11876
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 ...
- F7 - Põe o nome em Base64 (dGVzdGU=) na pilha.
- F7 - Pôe uma string vazia na pilha.
- F8 - Chama a subrotina de concatenação de strings do kernel32 que coloca "" + "dGVzdGU=" no endereço 004032D4.
- F7 - Põe NTE0MDA4MjhOVEUwTURBNE== na pilha (de onde será que veio este Base64?)
- F7 - Põe a string concatenada dGVzdGU= na pilha.
- F8 - Chama a subrotina de concatenação de strings que coloca "dGVzdGU=" + "NTE0MDA4MjhOVEUwTURBNE==" no endereço 004032D4.
- F7 - Põe a string concatenada dGVzdGU=NTE0MDA4MjhOVEUwTURBNE== na pilha.
- F8 - Chama a rotina do kernel32 que determina o comprimento de strings, o que retorna o valor 20h (32 decimal) no registrador EAX.
- F7 - Coloca o valor de EAX (20h) na posição de memória 4031A0.
- F8 - Chama uma rotina em 004017A8 :confused:
- F7 - Põe o valor da posição de memória 4031A0 (20h) na pilha.
- F7 - Põe a string NTE0MDA4MjhOVEUwTURBNE== na pilha.
- F8 - Chamada para 004017E8 :confused:
- 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 ...
- F7 - Zera o registrador EBX.
- 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).
- 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).
- F7 - Soma EBX com o valor que está na posição de memória indicada em EAX+8.
- 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).
- F7 - Põe o valor 6D6809C2 na pilha.
- F7 - Põe o formato %X na pilha.
- 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).
- 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.
- F7 - Adiciona 0Ch (12 decimal) ao ponteiro da pilha.
- 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?