
Inyector de DLL para Windows 10 mediante driver que utiliza VAD y oculta el driver cargado
Driver DLL Injector Descripción
Driver DLL Injector es una herramienta potente que permite a los usuarios cargar los controladores de su elección utilizando su mapeador preferido. Aprovechando las capacidades de un cargador de controladores sin firmar, como KDmapper, este inyector fue construido y probado en procesos x64 de Windows 10 2004
El controlador engancha una función segura de PatchGuard conocida como xKdEnumerateDebuggingDevices para la comunicación con nuestro proceso de modo usuario. Este método es altamente detectado por los anti-trampas populares, así que vamos un paso más allá y atrapamos un hilo de modo usuario en el kernel para comunicarnos, restaurando la dirección de la función original y evadiendo así las comprobaciones de integridad de la función.
El controlador hace lo siguiente para ocultar los rastros que deja atrás:
Manipulación de VAD: El controlador asigna memoria estratégicamente detrás de la "pila del hilo" aprovechando funciones no documentadas del Descriptor de Direcciones Virtuales (VAD) como MiInsertChange y MiAllocVad, que no son ampliamente conocidas. Una vez que el VAD se asigna y la DLL se carga correctamente, el controlador elimina el VAD del árbol de VAD.
Manipulación de PTE: Para evadir las comprobaciones de NtQueryVirtualMemory, el controlador manipula las Entradas de Tabla de Páginas (PTE) para hacer ejecutables las páginas asignadas por el VAD. Al modificar las PTE, el controlador garantiza que el VAD no se actualice con el bit ejecutable (X) habilitado, eludiendo posibles restricciones.
Limpieza de PiDDBCacheTable, MmUnloadedDrivers (lista de cubos hash).
Dependiendo del mapeador manual que uses para el controlador, también tendrás que tener en cuenta los grandes pools.
El proceso de modo usuario utiliza la superposición de Discord para llamar a la función main de nuestra DLL.
El proceso de modo usuario hace lo siguiente:
Para usar Driver DLL Injector, sigue estos pasos:
1. Elige e instala un mapeador compatible, como KDmapper.
2. Compila o construye el proyecto Driver DLL Injector.
3. Carga el controlador usando el mapeador seleccionado
4. Ejecuta la aplicación de prueba (con la superposición de Discord habilitada)
5. Ejecuta la aplicación de modo usuario y espera el cuadro de mensaje Hello World.
Al hacer este proyecto, hubo varios obstáculos en el camino. Algunos de los siguientes fueron:
/sdl-, /GS- y la biblioteca en tiempo de ejecución en /MT solucionó mis problemas de bloqueos.KMODE_EXCEPTION, lo cual se solucionó estableciendo la propiedad del controlador /GS-.ModMap - por mostrar la manipulación de VAD
SkCrypt - por el cifrado
Stealthy Kernel Mode Injector - por la base del controlador
Poseidon - por atrapar un hilo de modo usuario en el kernel
FACE INJECTOR - por el shellcode