Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Herramientas/GitHubGitHub/gmh5225/iat-hook
Mecanismos de PersistenciaAnálisis de CódigoIngeniería InversaAnálisis de MalwareRed TeamingDesarrollo de PayloadsExplotación de Binarios
GitHubgmh5225/iat-hook

IAT-Hook

DLL en C++ que realiza hooking de la Import Address Table analizando las cabeceras PE y redirigiendo las direcciones de funciones importadas a un hook personalizado dentro de un proceso objetivo.

Ver Repositorio
1hace 4 añosAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Hooking - IAT

Hooking

El hooking es una técnica que permite a un usuario redirigir el flujo de ejecución de un programa. La mayoría de las veces utilizamos el hooking de funciones. Reemplazamos o redirigimos una función hacia la nuestra propia; esto es muy útil y tiene múltiples casos de uso. Existen múltiples formas de hacer hooking; aquí vamos a ver el IAT Hooking, que significa Import Address Table. Consiste en reemplazar la dirección de una función por la nuestra propia en una gran tabla que se rellena en tiempo de ejecución. Como ya indiqué antes en otro repositorio, recomiendo leer más sobre el PE Format para entender la parte de parseo de la IAT de este código. Aquí hay un diagrama básico de cómo funciona el IAT Hooking. En este ejemplo, se llama a la función original después de que se haya ejecutado el código malicioso. En este ejemplo simplemente llamaremos a otra función en lugar de la original. La ventaja de esa técnica es que no requiere modificar el cuerpo de una función, a diferencia de un hook regular de parcheo de .text con detours, que tiene que cambiar las instrucciones al principio de una función para colocar un jmp, por ejemplo.

image

Pasos para el hooking

En realidad es mucho más simple de lo que suena; procederemos internamente para facilitar las cosas, lo que significa que este repositorio compilará a una DLL que puede inyectarse en el proceso objetivo usando mis inyectores LoadLibraryA o Manual Mapping para inyectarla en el proceso objetivo.

Primero parseamos las PE Headers del proceso objetivo para localizar el Import Descriptor así:

process_base + nt_header->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress;

Luego podemos recorrer cada módulo importado, recorrer cada función de este módulo (razón de los bucles anidados) y encontrar la dirección de esa función que se ha rellenado en tiempo de ejecución. En este ejemplo haremos hooking de TranslateMessage, que es usada por Windows para procesar eventos en las gui's. Así que una vez que encontramos la dirección de esa función, la reemplazamos por la dirección de nuestra propia función que definimos previamente y que existe en el contexto del proceso remoto, ya que somos internos. No olvides usar VirtualProtect para asegurarte de tener permiso para escribir en esa ubicación.

VirtualProtect(&firstThunk->u1.Function, sizeof(uint64_t), PAGE_READWRITE, &old_protection);
firstThunk->u1.Function = (uint64_t)hookfunction;

Demostración

Como puedes ver, cuando notepad llama a TranslateMessage (prácticamente todo el tiempo) ejecutará nuestra función hook, ¡que termina mostrando un cuadro de mensaje!

image

Descargar herramienta