Introducción a los desvíos de Microsoft
Anteriormente cubrí Hooking en mi
Detours contiene una gran cantidad de potentes API que puede utilizar en sus aplicaciones para conectar cualquier función. Como sugiere el nombre, le permite redirigir una función a otra. Puede usar esta biblioteca para desviar las funciones del juego o realizar parches en tiempo de ejecución en juegos más antiguos: para permitir que se ejecuten en sistemas operativos modernos.
Necesitará las siguientes herramientas para este tutorial:
En este tutorial, nos centraremos en Notepad.exe de 64 bits (Windows 10). También estoy usando Visual Studio Community 2017, así que si está usando una versión diferente, asegúrese de actualizar la ruta anterior para reflejar eso. Del mismo modo, si tiene como objetivo un ejecutable de 32 bits, asegúrese de modificar los comandos anteriores para usar x32 en lugar de x64.
Cree un nuevo proyecto de biblioteca de vínculos dinámicos en Visual Studio y asegúrese de cambiar el conjunto de caracteres para usar el conjunto de caracteres Unicode en las propiedades del proyecto. Es una buena idea hacer coincidir la configuración de la aplicación de destino, por lo que si está inyectando en un proceso habilitado para Unicode, su archivo DLL también debería estar habilitado para Unicode. Esto también facilita la búsqueda de fallas y la depuración.
Una vez que haya creado el proyecto de desvíos, puede copiar el archivo detours.lib del directorio lib.X64 en el directorio de su proyecto. También copie los archivos del directorio de inclusión y agréguelos a su proyecto.
El código
Defina un nuevo punto de entrada de DllMain:
Ahora podemos agregar nuestra función de desvío:
Vamos a interceptar la llamada del Bloc de notas a WriteFile para que podamos hacer las modificaciones que queramos. Nuestra función simplemente pasará sus parámetros a la API correcta y regresará (por ahora).
Dentro de su DllMain, deberá inicializar la biblioteca Detours y aplicar el gancho:
Ahora simplemente construya su proyecto e inyecte su DLL usando un inyector fácilmente disponible o usando un depurador como
El Bloc de notas debería funcionar normalmente y no fallar.
Ahora hagamos algo más interesante, agregue el siguiente código a su función de intercepción:
Ahora abra el bloc de notas, inyecte su DLL e intente guardar texto en un archivo. ¡Descubrirá que su texto ha sido reemplazado con la cadena que insertamos arriba!
Conclusión
¡Y ahí lo tienes! Ahora podemos enganchar cualquier función que queramos. Las desventajas obvias de enganchar de esta manera es que nuestro código se basa en la biblioteca Detours y requiere un método para inyectar nuestra DLL en la aplicación de destino. En el próximo tutorial veremos cómo escribir nuestro propio código de enganche sin usar Detours.
Creditos
timb3r
Anteriormente cubrí Hooking en mi
Please,
Acceder
or
Registrarse
to view URLs content!
, pero hoy vamos a discutir otras formas en que su aplicación puede enlazar API en un proceso remoto. Este tutorial cubrirá una biblioteca de enlace bastante conocida y fácil de usar disponible en Microsoft llamada Detours. Detours contiene una gran cantidad de potentes API que puede utilizar en sus aplicaciones para conectar cualquier función. Como sugiere el nombre, le permite redirigir una función a otra. Puede usar esta biblioteca para desviar las funciones del juego o realizar parches en tiempo de ejecución en juegos más antiguos: para permitir que se ejecuten en sistemas operativos modernos.
Necesitará las siguientes herramientas para este tutorial:
-
Please, Acceder or Registrarse to view URLs content!
-
Please, Acceder or Registrarse to view URLs content!
Código:
Please,
Acceder
or
Registrarse to view codes content!
En este tutorial, nos centraremos en Notepad.exe de 64 bits (Windows 10). También estoy usando Visual Studio Community 2017, así que si está usando una versión diferente, asegúrese de actualizar la ruta anterior para reflejar eso. Del mismo modo, si tiene como objetivo un ejecutable de 32 bits, asegúrese de modificar los comandos anteriores para usar x32 en lugar de x64.
Cree un nuevo proyecto de biblioteca de vínculos dinámicos en Visual Studio y asegúrese de cambiar el conjunto de caracteres para usar el conjunto de caracteres Unicode en las propiedades del proyecto. Es una buena idea hacer coincidir la configuración de la aplicación de destino, por lo que si está inyectando en un proceso habilitado para Unicode, su archivo DLL también debería estar habilitado para Unicode. Esto también facilita la búsqueda de fallas y la depuración.
Una vez que haya creado el proyecto de desvíos, puede copiar el archivo detours.lib del directorio lib.X64 en el directorio de su proyecto. También copie los archivos del directorio de inclusión y agréguelos a su proyecto.
El código
Defina un nuevo punto de entrada de DllMain:
C++:
Please,
Acceder
or
Registrarse to view codes content!
Ahora podemos agregar nuestra función de desvío:
C++:
Please,
Acceder
or
Registrarse to view codes content!
Vamos a interceptar la llamada del Bloc de notas a WriteFile para que podamos hacer las modificaciones que queramos. Nuestra función simplemente pasará sus parámetros a la API correcta y regresará (por ahora).
Dentro de su DllMain, deberá inicializar la biblioteca Detours y aplicar el gancho:
C++:
Please,
Acceder
or
Registrarse to view codes content!
Ahora simplemente construya su proyecto e inyecte su DLL usando un inyector fácilmente disponible o usando un depurador como
Please,
Acceder
or
Registrarse
to view URLs content!
(Símbolos -> Clic derecho -> Cargar biblioteca). El Bloc de notas debería funcionar normalmente y no fallar.
Ahora hagamos algo más interesante, agregue el siguiente código a su función de intercepción:
C++:
Please,
Acceder
or
Registrarse to view codes content!
Ahora abra el bloc de notas, inyecte su DLL e intente guardar texto en un archivo. ¡Descubrirá que su texto ha sido reemplazado con la cadena que insertamos arriba!
Conclusión
¡Y ahí lo tienes! Ahora podemos enganchar cualquier función que queramos. Las desventajas obvias de enganchar de esta manera es que nuestro código se basa en la biblioteca Detours y requiere un método para inyectar nuestra DLL en la aplicación de destino. En el próximo tutorial veremos cómo escribir nuestro propio código de enganche sin usar Detours.
Creditos
timb3r