online mp3tag mp3meta windows dll

windows - mp3tag - ¿Cómo interceptar las llamadas al método dll?



mp3meta (4)

Consulte Microsoft Detours para obtener una biblioteca con una API C / C ++. No es trivial inyectarlo en todos los demás programas sin desencadenar virusscanners / detectores de malware. Pero tu propio proceso es un juego limpio.

¿Cómo interceptar las llamadas al método dll?

  • ¿Cuáles son las técnicas disponibles para ello?
  • ¿Se puede hacer solo en C / C ++?
  • ¿Cómo interceptar llamadas de método desde todos los procesos en ejecución a un dll determinado?
  • ¿Cómo interceptar llamadas de método de un proceso dado a un dll dado?

En Linux, esto se puede hacer con la variable de entorno LD_PRELOAD. Configure esta variable para que apunte a una biblioteca compartida que contenga un símbolo que desea anular, luego inicie su aplicación.


Hay dos formas estándar en que puedo pensar para hacer esto

  • Gancho de la tabla de importación DLL.
    Para esto, necesita analizar el encabezado PE de la DLL, buscar la tabla de importación y escribir la dirección de su propia función en lugar de lo que ya está escrito allí. Puede guardar la dirección de la función original para poder llamarla más tarde. Las referencias en los enlaces externos de este artículo de wikipedia deberían darle toda la información que necesita para poder hacer esto.

  • Modificación directa del código. Encuentre el código real de la función que desea enganchar y modifique los primeros códigos de operación para saltar a su propio código. necesita guardar el código de operación que estaba allí para que finalmente se ejecuten. Esto es más simple de lo que suena en su mayoría porque ya fue implementado por no menos que los propios Microsoft en la forma de la biblioteca Detours .
    Esto es algo realmente bueno de hacer. con solo un par de líneas de código puede, por ejemplo, reemplazar todas las llamadas a GetSystemMetrics () desde say outlook.exe y ver las maravillas que ocurren.

Las ventajas de un método son las desventajas del otro. El primer método le permite agregar un gancho quirúrgico exactamente a la DLL que desea donde se desenganchan todas las otras DLL. El segundo método le permite el tipo de gancho más global para interceptar todas las llamadas que realiza la función.


Siempre que conozca todas las funciones de DLL por adelantado, una técnica es escribir su propia DLL contenedora que reenviará todas las llamadas de función a la DLL real. Esta DLL no tiene que estar escrita en C / C ++. Todo lo que necesita hacer es hacer coincidir la función de convención de llamada de la DLL original.