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
ICALL-GADGET — Exploit para redirigir el flujo de control de un módulo del kernel legítimo hacia tu propio módulo del kernel ilegítimo para evadir el stack walking de los anti-cheats | Kitploit
Herramientas/GitHubGitHub/gmh5225/icall-gadget
Mecanismos de PersistenciaExplotaciónEvasión de IDS/IPSIngeniería InversaShellcodeRed TeamingDesarrollo de PayloadsExplotación de Binarios
GitHubgmh5225/icall-gadget

ICALL-GADGET

Exploit para redirigir el flujo de control de un módulo del kernel legítimo hacia tu propio módulo del kernel ilegítimo para evadir el stack walking de los anti-cheats

12hace 2 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 →
Ver Repositorio
Compartir

ABUSO DE GADGET ICALL PARA COMUNICACIÓN

Información general: esto está en el kernel de Windows y nos permitirá comunicarnos en nuestro driver sin ser detectados por los anticheats

Así que estaba navegando por IDA y encontré esto

image

Tras una inspección más detallada podemos ver que llama a una función llamada _guard_dispatch_icall_ptr. El icall básicamente es un jmp a rax, así que si piensas un poco podemos modificar toda esta función para que en su lugar llame a nuestro handler usando shellcode.

Nuestro Shellcode

Vamos a crear shellcode que establezca rax a un ptr a nuestra función handler. De esa forma, cuando se llame a la función, ejecutará nuestro shellcode y llamará a nuestro handler. Queremos asegurarnos de que cuando hagamos nuestro shellcode tenga exactamente el mismo tamaño en bytes que el código que estamos modificando. Así que aquí hay un ejemplo del shellcode que usé en asm; necesitarás convertirlo a bytes.

 sub    rsp,0x38
 movabs rax,0xdeadbeef #placeholder for handler
 movabs r10,0xab39cfee
 inc    rax
 dec    rax
 call   QWORD PTR [rip+0x720d4]        # 0x720f8
 jmp    0x29

Nuestro código

En cpp solo necesitamos obtener la dirección de la función y luego mapear nuestro shellcode en ella, pero aquí es donde se complica: si hacemos esto simplemente tal cual, corromperemos la pila y provocaremos un bluescreen de vez en cuando. Para evitar esto necesitaremos reparar la pila. Así que en lugar de retornar dentro de nuestro handler, deberíamos realizar las mismas operaciones que harían las funciones si no las hubiéramos modificado. Dejaré esto para que el lector lo haga por su cuenta porque no quiero darle en bandeja un método increíble de evasión de anticheats, pero recuerda mirar el asm original de la función y ver qué estamos modificando. NOTA APARTE: Si arreglas la corrupción de la pila y haces lo que la función pretendía hacer dentro de tu handler, ¡parecerá que nada ha sido modificado! :)

 //getting address to function
 FunctionAddress = module + 0xD70C; 
  
 BYTE shellcode[] = { 0x48, 0x83, 0xEC, 0x38, 0x48, 0xB8, 0xEF, 0xBE, 0xAD, 0xDE, 0x00, 0x00, 0x00, 0x00, 0x49, 0xBA, 0xEE, 0xCF, 0x39, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x48, 0xFF, 0xC0, 0x48, 0xFF, 0xC8, 0xFF, 0x15, 0xD4, 0x20, 0x07, 0x00, 0xE9, 0x00, 0x00, 0x00, 0x00 };

 memcpy(&shellcode[6], &hkfunction, 8);

 DisableWriteProtection();
 memcpy((PVOID)FunctionAddress, &shellcode, sizeof(shellcode));
 EnableWriteProtection();

Conclusión

Espero que hayas sacado algo de este breve write up; solo ten en cuenta que también puedes encontrar otros gadgets que harán muchísimo más, cuanto más complejo mejor.

Descargar herramienta