Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
TamperingSyscalls — Bibliothèque C++ qui récupère et usurpe les arguments des appels système Windows à l'aide de points d'arrêt matériels et de gestionnaires d'exceptions afin de contourner la télémétrie EDR. | Kitploit
Outils/GitHubGitHub/rad9800/tamperingsyscalls
Évasion IDS/IPSPost-ExploitationRed TeamingDéveloppement de Charges Utiles
GitHubrad9800/tamperingsyscalls

TamperingSyscalls

Bibliothèque C++ qui récupère et usurpe les arguments des appels système Windows à l'aide de points d'arrêt matériels et de gestionnaires d'exceptions afin de contourner la télémétrie EDR.

Voir le dépôt
50876il y a 4 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

TamperingSyscalls

TamperingSyscalls est un projet inédit en 2 parties composé de l’usurpation d’arguments et de la récupération de syscalls, qui abusent tous deux du gestionnaire d’exceptions (EH) afin de contourner les EDR. Ce projet regroupe ces deux sous-projets afin de fournir une solution alternative aux appels système directs.

Altération des appels système.

  1. Configurez un gestionnaire d’exceptions global (EH) qui sera utilisé plus tard.
root@kitploit:~
SetUnhandledExceptionFilter( OneShotHardwareBreakpointHandler );
  1. Placez un point d’arrêt matériel à l’adresse d’une instruction syscall contenant les octets 0f05 dans le registre Dr0. Nous pouvons localiser l’adresse du stub syscall grâce à cette rapide recherche d’octets en mémoire.
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. Nous pouvons ensuite appeler cette fonction en passant NULL pour les <=4 premiers arguments (qui ont tendance à être les arguments les plus importants, contenant des informations telles que les handles de processus, etc.). Nous définissons également EnumState sur l’Enum correspondant pour cette fonction (afin de pouvoir corriger les arguments plus tard).
  2. Bien que l’EDR ait une introspection complète sur nos arguments, il ne peut pas prendre la décision en toute confiance que nous effectuons une action malveillante, car nous avons passé NULL comme premiers <=4 arguments.
  3. L’EDR retournera ensuite le numéro d’appel système (SSN) et le stockera dans RAX. Si vous n’êtes intéressé que par la récupération des syscalls, consultez la branche stripped de ce dépôt.
  4. Le programme atteint ensuite l’instruction syscall { 0x0F, 0x05 } qui déclenche le point d’arrêt défini précédemment. Cela lèvera alors une exception SINGLE_STEP qui sera traitée par le gestionnaire d’exceptions configuré à l’étape 1.
root@kitploit:~
if( ExceptionInfo->ExceptionRecord->ExceptionCode == STATUS_SINGLE_STEP )
  1. Ce gestionnaire d’exceptions désactivera le point d’arrêt matériel pour Dr0 uniquement si Dr0 et RIP correspondent, en définissant la valeur du registre Dr0 à 0 (qui devrait être le RIP actuel).
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. Nous corrigerons ensuite les registres restants que nous avions précédemment définis à NULL. La raison pour laquelle il y en a 4 est que la convention d’appel x64 impose d’utiliser RCX, RDX, R8, R9 pour les 4 premiers arguments, et que les autres sont placés sur la pile. Il est possible de définir manuellement ces paramètres >4 sur la pile, mais cela dépasse le cadre de ce projet car cela nécessiterait de l’assembleur inline. La raison pour laquelle on utilise R10 et non RCX est qu’au début de chaque stub syscall, mov r10, rcx est exécuté, car le registre RCX est détruit dans les instructions suivantes.
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;

On voit dans cet exemple que nous corrigeons les arguments de NtMapViewOfSection.

Mode d’emploi

Si vous souhaitez commencer à simuler de fausses télémétries EDR, il est possible de modifier les définitions p[FunctionName] qui sont actuellement définies à NULL.

Génération

Pour générer les fonctions requises, utilisez gen.py. Cela prend en charge :

  • Des fonctions séparées par des virgules
root@kitploit:~
python gen.py NtOpenSection,NtMapViewOfSection,NtUnmapViewOfSection

Cela produira 3 fichiers : TamperingSyscalls.cpp, TamperingSyscalls.h et main.cpp. Vous pouvez faire #include "TamperingSyscalls.h" dans votre projet. Nous pouvons appeler les fonctions en ajoutant le nom de la fonction à p, par exemple pNtOpenSection(...);

Limitations

Nous ne pouvons pas définir de point d’arrêt sur NtSetThreadContext ou ses variantes, car cela est utilisé pour définir les registres de débogage. Il y a une brève période pendant laquelle les registres de débogage sont définis, mais elle est très courte et je ne pense pas que nous serons détectés pour avoir un Dr0 ouvert.

J’ai publié un petit article de blog abordant ces techniques.

Article de blog : Vue d’ensemble de TamperingSyscalls

Article de blog : Fausse introspection de TamperingSyscalls

Télécharger l’outil