Uso de WinDbg y Llamadas de APIs????

Iniciado por x64core, 9 Octubre 2011, 10:54 AM

0 Miembros y 1 Visitante están viendo este tema.

x64core

bueno tengo esa duda leido y me parece que e comprobado que las APIs "normales" que se encuentran
en las DLLs comunes ( kernel32, user32,shell32,etc)  como por ejemplo las apis: FindFirstFile,GetWindowText,IsWindow e leido
que algunas ( creo, no se si todas :P ) hacen llamada a las APIs nativas para hacer la tarea
y no se si es posible "mirar" eso, digamos uso cualquier API "normal" yo quiero ver a que APis Nativas llama? como puedo verlo
con el Windbg?

y quiero preguntar algo que no se si es asi :xD
sobre el Windbg...
cuando digamos abrimos el Disassembly muestra el codigo en Asm de un X programa no?
pero como coños le agrego los scrollbar!!!!! :xD
aparte que con los scrollbar sé la cantidad de codigo de asm, puedo navegar sobre el codigo facilmente :/
y parece que no tiene! :/
tengo que estar dandole con el raton hacia arriba... :/


en la imagen sale que no tiene scrollbar :/

Eternal Idol

Ejemplo sencillo para Windows 7 x64 con un programa de 32 bits :

0:000> u kernel32!openprocess
kernel32!OpenProcess:
756d1993 ff2554096d75    jmp     dword ptr [kernel32!_imp__OpenProcess (756d0954)]
756d1999 90              nop
756d199a 90              nop
756d199b 90              nop
756d199c 90              nop
756d199d 90              nop
kernel32!WaitForMultipleObjectsExImplementation:
756d199e 8bff            mov     edi,edi
756d19a0 55              push    ebp
0:000> dd 756d0954
756d0954  7616e788 76170857 76170c50 76170586
756d0964  761704c2 76170965 761703b8 76170ce4
756d0974  76173156 76170add 761709f9 761707c3
756d0984  76170d5f 761702e7 761702ca 761705b0
756d0994  76170434 76170d2f 76170793 76170716
756d09a4  76170740 76170319 76170daf 761708eb
756d09b4  761704f0 761703e2 7617093e 00000000
756d09c4  7617a3f8 7617a529 7616c19e 7616f4e4
0:000> u 7616e788
KERNELBASE!OpenProcess:
7616e788 8bff            mov     edi,edi
7616e78a 55              push    ebp
7616e78b 8bec            mov     ebp,esp
7616e78d 83ec20          sub     esp,20h
7616e790 8b4510          mov     eax,dword ptr [ebp+10h]
7616e793 8945f8          mov     dword ptr [ebp-8],eax
7616e796 8b450c          mov     eax,dword ptr [ebp+0Ch]
7616e799 56              push    esi
0:000> u
KERNELBASE!OpenProcess+0x12:
7616e79a 33f6            xor     esi,esi
7616e79c f7d8            neg     eax
7616e79e 1bc0            sbb     eax,eax
7616e7a0 83e002          and     eax,2
7616e7a3 8945ec          mov     dword ptr [ebp-14h],eax
7616e7a6 8d45f8          lea     eax,[ebp-8]
7616e7a9 50              push    eax
7616e7aa 8d45e0          lea     eax,[ebp-20h]
0:000> u
KERNELBASE!OpenProcess+0x25:
7616e7ad 50              push    eax
7616e7ae ff7508          push    dword ptr [ebp+8]
7616e7b1 8d4510          lea     eax,[ebp+10h]
7616e7b4 50              push    eax
7616e7b5 8975fc          mov     dword ptr [ebp-4],esi
7616e7b8 c745e018000000  mov     dword ptr [ebp-20h],18h
7616e7bf 8975e4          mov     dword ptr [ebp-1Ch],esi
7616e7c2 8975e8          mov     dword ptr [ebp-18h],esi
0:000> u
KERNELBASE!OpenProcess+0x3d:
7616e7c5 8975f0          mov     dword ptr [ebp-10h],esi
7616e7c8 8975f4          mov     dword ptr [ebp-0Ch],esi
7616e7cb ff15d4111676    call    dword ptr [KERNELBASE!_imp__NtOpenProcess (761611d4)]
7616e7d1 3bc6            cmp     eax,esi
7616e7d3 5e              pop     esi
7616e7d4 7c05            jl      KERNELBASE!OpenProcess+0x53 (7616e7db)
7616e7d6 8b4510          mov     eax,dword ptr [ebp+10h]
7616e7d9 eb08            jmp     KERNELBASE!OpenProcess+0x5b (7616e7e3)
0:000> dd 761611d4
761611d4  771ffc10 77238de8 771ffca0 77238d1d
761611e4  772015f4 77226ea5 77217d73 77219953
761611f4  77219c70 7720f79b 7720e819 7720e7f3
76161204  77243b00 772012e4 77201548 77201110
76161214  772000ec 772a1e9a 77230b4b 7723090a
76161224  7721ac00 7723f86d 7723c9bc 7723c9e7
76161234  772125e8 772147a6 771ff9b4 771ffe64
76161244  7720127c 77200864 771ff950 7720078c
0:000> u 771ffc10
ntdll!ZwOpenProcess:
771ffc10 b823000000      mov     eax,23h
771ffc15 33c9            xor     ecx,ecx
771ffc17 8d542404        lea     edx,[esp+4]
771ffc1b 64ff15c0000000  call    dword ptr fs:[0C0h]
771ffc22 83c404          add     esp,4
771ffc25 c21000          ret     10h


Lo mejor que podes hacer es crear un programita con las funciones y asi DEPURAR, el codigo en ejecucion es mas facil de comprender al menos para mi ... especialmente teniendo en cuenta que los binarios que tenes son seguro de Release y por lo tanto optimizados (incluyendo saltos que no reflejan directamente la logica del codigo fuente).
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

x64core

interesante tio! muchas gracias :)
una duda:
veo que usas este comando al incio:
"u kernel32!openprocesss"
si la API que quiero depurar es digamos "GetClassName" osea que pertenece a User32 entonces seria asi?:
u User32!Getclassname
estoy en lo correcto?
y por cierto como lo depuro? :P abro la DLL ? o como ? :P
la verdad yo tenia curiosidad sobre esto por eso me anime a preguntar :P
no tengo experiencia en esto :P

Eternal Idol

Si, aunque usar el comando u (unassemble) o ver en la ventana de Disassembly es justamente eso desensamblar, no depurar, para depurar el programa tiene que estar en ejecucion.

En el caso de GetClassName como podes ver en la documentacion uno de los parametros es una cadena y entonces existen dos funciones:
GetClassNameA (ANSI)
y
GetClassNameW (Widechar=Unicode).

Seria finalmente u user32!GetClassNameW

Para depurar lo que te decia es que hicieras un programa sencillo que llamara a las funciones en cuestion ...
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

x64core

ya entendi ;D
hice un pequeño codigo que usa la API GetWindowsDirectory
y pude ver lo desemsamblado, no se pero vi bastante codigo y llamadas a muchas APIs nativas :S
y sobre el scrollbar de Disassembly como haces tu? a mi me resulta algo incomodo :P aparte que creo
que no puedes usar buscador de palabras ( al menos yo no pude  :P ) para identicar APIs y todo eso :P

Eternal Idol

Para buscar funciones podes usar el comando x asi:

x kernel32!*getw*

No tiene scroll ... usa el comando u y sino PAGE UP/DOWN tambien funciona en esa ventana.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

x64core

vaya... que complicado :P ok gracias por tu ayuda Eternal Idol :)
vere como practico :P saludos :)

Eternal Idol

Es solo cuestion de practica, cuando te acostumbras y sabes los comandos de memoria no es dificil  ::)
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón