Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
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
TamperingSyscalls — Librería C++ que recupera y falsifica los argumentos de las syscalls de Windows mediante puntos de interrupción de hardware y controladores de excepciones para subvertir la telemetría de EDR. | Kitploit
Herramientas/GitHubGitHub/rad9800/tamperingsyscalls
Evasión de IDS/IPSPost-ExplotaciónRed TeamingDesarrollo de Payloads
GitHubrad9800/tamperingsyscalls

TamperingSyscalls

Librería C++ que recupera y falsifica los argumentos de las syscalls de Windows mediante puntos de interrupción de hardware y controladores de excepciones para subvertir la telemetría de EDR.

Ver Repositorio
50876hace 4 añosRevisado por Kitploit

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

TamperingSyscalls

TamperingSyscalls es un proyecto novedoso de 2 partes que consiste en el spoofing de argumentos y la obtención de syscalls, los cuales abusan del EH para subvertir los EDR. Este proyecto consta de ambos subproyectos para proporcionar una solución alternativa a las syscalls directas.

Manipulando syscalls.

  1. Configura un EH global que se utilizará más tarde.
root@kitploit:~
SetUnhandledExceptionFilter( OneShotHardwareBreakpointHandler );
  1. Establece un punto de interrupción de hardware en la dirección de una instrucción syscall que tenga los bytes 0f05 en el registro Dr0. Podemos localizar la dirección del stub de syscall con esta búsqueda rápida de bytes en memoria.
root@kitploit:~
BYTE stub[] = { 0x0F, 0x05 };
for( unsigned int i = 0; i < (unsigned int)25; i++ )
{
	if( memcmp( (LPVOID)((DWORD_PTR)function + i), stub, 2 ) == 0 ) {
		return (LPVOID)((DWORD_PTR)function + i);
	}
}
  1. A continuación, podemos hacer una llamada a esta función pasando NULL para los argumentos <=4 (que suelen ser los argumentos más importantes que contienen información como manejadores de procesos, etc.). También establecemos EnumState en el Enum correspondiente para esta función (para poder corregir los argumentos más tarde).
  2. Si bien el EDR tiene introspección completa de nuestros argumentos, no puede tomar con confianza la decisión de que estamos realizando una acción maliciosa, ya que hemos pasado NULL como los primeros <=4 argumentos.
  3. El EDR devolverá entonces el número de syscall (SSN) y lo almacenará en RAX. Si solo te interesa obtener syscalls, consulta la rama stripped de este repositorio.
  4. El programa fluye entonces hacia la instrucción syscall { 0x0F, 0x05 }, que alcanza el punto de interrupción que establecimos anteriormente. Esto lanzará una excepción SINGLE_STEP que será manejada por el manejador de excepciones que configuramos en el Paso 1.
root@kitploit:~
if( ExceptionInfo->ExceptionRecord->ExceptionCode == STATUS_SINGLE_STEP )
  1. Este manejador de excepciones deshabilitará el punto de interrupción de hardware para Dr0 solo si Dr0 y RIP coinciden, estableciendo el valor al que apunta el registro Dr0 a 0 (que debería ser el RIP actual).
root@kitploit:~
if( ExceptionInfo->ExceptionRecord->ExceptionCode == STATUS_SINGLE_STEP )
{
	if( ExceptionInfo->ContextRecord->Dr7 & 1 ) {
		if( ExceptionInfo->ContextRecord->Rip == ExceptionInfo->ContextRecord->Dr0 ) {
			ExceptionInfo->ContextRecord->Dr0 = 0;
  1. Luego corregiremos los registros restantes que habíamos establecido a NULL. El motivo de que sean 4 es que la convención de llamadas de x64 dicta que usemos RCX, RDX, R8, R9 para los primeros 4 argumentos, y el resto se configuran en la pila. Es posible configurar manualmente los parámetros >4 en la pila, pero esto está fuera del alcance de este proyecto, ya que requeriría ensamblado en línea. La razón por la que se usa R10 y no RCX es que al inicio de cada stub de syscall mov r10, rcx se ejecuta porque el registro RCX se destruye en las siguientes instrucciones.
root@kitploit:~
case NTMAPVIEWOFSECTION_ENUM:
	ExceptionInfo->ContextRecord->R10 =
		(DWORD_PTR)((NtMapViewOfSectionArgs*)(StateArray[EnumState].arguments))->SectionHandle;

	ExceptionInfo->ContextRecord->Rdx =
		(DWORD_PTR)((NtMapViewOfSectionArgs*)(StateArray[EnumState].arguments))->ProcessHandle;

	ExceptionInfo->ContextRecord->R8 =
		(DWORD_PTR)((NtMapViewOfSectionArgs*)(StateArray[EnumState].arguments))->BaseAddress;

	ExceptionInfo->ContextRecord->R9 =
		(DWORD_PTR)((NtMapViewOfSectionArgs*)(StateArray[EnumState].arguments))->ZeroBits;

Podemos ver en este ejemplo que estamos corrigiendo los argumentos para NtMapViewOfSection.

Cómo

Si deseas comenzar a falsificar la telemetría del EDR, es posible modificar las definiciones p[FunctionName] donde actualmente están establecidas a NULL.

Generación

Para generar las funciones necesarias, usa gen.py. Esto admite:

  • Funciones separadas por comas
root@kitploit:~
python gen.py NtOpenSection,NtMapViewOfSection,NtUnmapViewOfSection

Producirá 3 archivos: TamperingSyscalls.cpp, TamperingSyscalls.h, y main.cpp. Puedes añadir #include "TamperingSyscalls.h" a tu proyecto. Podemos llamar a las funciones agregando el nombre de la función a p, por ejemplo pNtOpenSection(...);

Limitaciones

No podemos establecer un punto de interrupción en NtSetThreadContext o sus variantes, ya que se utiliza para establecer los registros de depuración. Hay un breve período en el que se establecen los registros de depuración, pero es muy pequeño y no creo que seamos detectados por mantener un Dr0 abierto.

He publicado una pequeña entrada de blog que aborda estas técnicas.

Entrada de blog de descripción general de TamperingSyscalls

Entrada de blog de falsa introspección de TamperingSyscalls

Descargar herramienta