2010-12-22 17 views
19

Soy nuevo en Microsoft Detours. Lo he instalado para rastrear las llamadas al sistema que hace un proceso. Ejecuto los siguientes comandos que obtuve de la web¿Cómo funciona Microsoft Detours y cómo lo uso para obtener un seguimiento de pila?

syelogd.exe /q C:\Users\xxx\Desktop\log.txt 
withdll.exe /d:traceapi.dll C:\Program Files\Google\Google Talk\googletalk.exe 

Obtengo el archivo de registro. El problema es que no entiendo completamente lo que está sucediendo aquí. ¿Cómo funcionan los desvíos? ¿Cómo rastrea las llamadas al sistema? Además, no sé cómo leer la salida en log.txt. Aquí hay una línea en log.txt

20101221060413329 2912 50.60: traceapi: 001 GetCurrentThreadId() 

Finalmente quiero obtener el seguimiento de la pila del proceso. ¿Cómo puedo obtener eso?

Respuesta

22

Detours le permite interceptar cualquier función. Coloca un jmp en la dirección que especifique creando un trampolín para su código. Finalmente, llama a la función anterior si quieres hacerlo. Para usar desvíos, debe insertar su código en el proceso que desea interceptar.

Para simplificar este proceso se puede utilizar Deviare API Hook el que hace todo el personal de la inyección y se puede utilizar aplicaciones de intercepción de cualquier lenguaje de programación compatible con la tecnología COM, incluyendo .NET, Delphi, C++, Python, etc .. Después de descargar el paquete encontrará algunos ejemplos en él. Hay una consola llamada DeviareCSharpConsole que le permite interceptar cualquier API de cualquier proceso que muestre la información de seguimiento de la pila completa.

Ésta es la manera Deviare API Hook obras, pero es lo que hay que hacer si se desea crear una aplicación que se conecta otro proceso:

Deviare API Hook Design

Un agente debe ser creado en el proceso de destino para interceptar el API que quieres. Para interceptar estas API, puede usar Desvíos, pero debe codificar el personal de IPC que no está incluido en esa biblioteca.

Si necesita escribir código dentro del proceso de destino usando Deviare API Hook, puede usar Deviare Custom Hooks. Esta característica le permite interceptar las API y manejar los parámetros procesados ​​de forma asíncrona.

15

En primer lugar, le aconsejaría ALTAMENTE, que si desea realizar API de enganche, me gustaría ir con easyhook: http://easyhook.codeplex.com/ (código abierto). Es un marco de api-hooking MUY bueno y fácil.

Acerca de cómo obtener el seguimiento de la pila, no recuerdo exactamente cómo hacerlo, pero eche un vistazo a WinAPIOverride32: http://jacquelin.potier.free.fr/winapioverride32/ (código abierto). Está haciendo exactamente eso, y es de código abierto. Además, si necesita los rastros para la investigación, WinAPIOverride32 es una gran aplicación para usar con el fin de estudiar cómo funcionan las aplicaciones.

EDITAR: acaba de agregar una aplicación más. http://www.rohitab.com/ es como WinAPIOVerride32, pero admite 64 bits y realmente ha mejorado desde que escribí esta respuesta. Debo señalar que, en algunos casos, faltó a las llamadas a API que encontré en WinAPIOverride32, pero sigue siendo bastante bueno. Lamentablemente, la fuente no está publicada.

Sobre cómo api-enganchando obras, Bien es una larga explicación, me gustaría apuntar a este artículo: http://www.codeproject.com/KB/system/hooksys.aspx Se da una buena explicación de cómo se hace bajo el capó (hay otros métodos, además de lo está escrito allí, pero aún así, es un artículo muy bueno).

Espero que ayude! :-)

20

En lugar de desvíos (que es gratuito para 32 bits) o easyhook (que es, KHM, un poco bit de código desordenado ) es posible que desee echa un vistazo a mhook 2.4 que es un código muy limpio y BSD con licencia. Funciona en x86 y x64, maneja el código relativo de IP, etc.

También hay una descripción detallada de cómo funciona en el sitio.

alt text

En cuanto a la traza de pila, puede utilizar CaptureStackBackTrace() de kernel32, o si usted desea conseguir la suposición, utilice StackWalk64() de dbghelp.

Cuestiones relacionadas