Novedades

Guia Tutorial de Enganche de Funciones con Microsoft Detours



c0de

Administrador
Desde
19 Abr 2020
Mensajes
329
1650127186827.png
Introducción a los desvíos de Microsoft

Anteriormente cubrí Hooking en mi Proxy DLL , 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:
  1. Microsoft Visual Studio 2017
  2. La biblioteca de los desvíos
Descargue la biblioteca de desvíos a su PC, luego abra una nueva ventana de comandos y navegue hasta la carpeta de desvíos. Deberá configurar su entorno de compilación para que coincida con el tipo de proceso que conectará (x86/x64).

Código:
Por favor, Acceder o Regístrate para ver el contenido de los códigos!

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++:
Por favor, Acceder o Regístrate para ver el contenido de los códigos!

Ahora podemos agregar nuestra función de desvío:

C++:
Por favor, Acceder o Regístrate para ver el contenido de los códigos!

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++:
Por favor, Acceder o Regístrate para ver el contenido de los códigos!

Ahora simplemente construya su proyecto e inyecte su DLL usando un inyector fácilmente disponible o usando un depurador como x64dbg (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++:
Por favor, Acceder o Regístrate para ver el contenido de los códigos!

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
 
Atrás
Arriba