Título: Uso de WinDbg y Llamadas de APIs???? Publicado por: x64core en 9 Octubre 2011, 10:54 am 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... :/ (http://img20.imageshack.us/img20/361/sinttulorgt.png) en la imagen sale que no tiene scrollbar :/ Título: Re: Uso de WinDbg y Llamadas de APIs???? Publicado por: Eternal Idol en 9 Octubre 2011, 12:03 pm 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). Título: Re: Uso de WinDbg y Llamadas de APIs???? Publicado por: x64core en 9 Octubre 2011, 19:26 pm 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 Título: Re: Uso de WinDbg y Llamadas de APIs???? Publicado por: Eternal Idol en 9 Octubre 2011, 19:36 pm 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 (http://msdn.microsoft.com/en-us/library/windows/desktop/ms633582%28v=vs.85%29.aspx) 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 ... Título: Re: Uso de WinDbg y Llamadas de APIs???? Publicado por: x64core en 9 Octubre 2011, 20:03 pm 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 Título: Re: Uso de WinDbg y Llamadas de APIs???? Publicado por: Eternal Idol en 9 Octubre 2011, 21:13 pm 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. Título: Re: Uso de WinDbg y Llamadas de APIs???? Publicado por: x64core en 10 Octubre 2011, 06:06 am vaya... que complicado :P ok gracias por tu ayuda Eternal Idol :)
vere como practico :P saludos :) Título: Re: Uso de WinDbg y Llamadas de APIs???? Publicado por: Eternal Idol en 10 Octubre 2011, 09:43 am Es solo cuestion de practica, cuando te acostumbras y sabes los comandos de memoria no es dificil ::)
|