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
SysWhispers — Contournement d'AV/EDR via des appels système directs. | Kitploit
Outils/GitHubGitHub/jthuraisamy/syswhispers
ExploitationÉvasion IDS/IPSShellcodeTests d'IntrusionRed TeamingDéveloppement de Charges Utiles
GitHubjthuraisamy/syswhispers

SysWhispers

Contournement d'AV/EDR via des appels système directs.

Voir le dépôt
2.0k277il y a 5 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

SysWhispers

SysWhispers aide à l'évasion en générant des fichiers d'en-tête/ASM que les implants peuvent utiliser pour effectuer des appels système directs.

Tous les appels système principaux sont pris en charge de Windows XP à Windows 10 19042 (20H2). Des exemples de fichiers générés sont disponibles dans le dossier example-output/.

Introduction

Divers produits de sécurité placent des hooks dans les API en mode utilisateur, ce qui leur permet de rediriger le flux d'exécution vers leurs moteurs et de détecter des comportements suspects. Les fonctions de ntdll.dll qui effectuent les appels système sont composées de seulement quelques instructions assembleur, donc les réimplémenter dans votre propre implant peut contourner le déclenchement de ces hooks de produits de sécurité. Cette technique a été popularisée par @Cn33liz et son article de blog contient plus de détails techniques qui valent la peine d'être lus.

SysWhispers fournit aux équipes rouges la possibilité de générer des paires en-tête/ASM pour tout appel système dans l'image du noyau principal (ntoskrnl.exe) sur n'importe quelle version de Windows à partir de XP. Les en-têtes incluront également les définitions de types nécessaires.

La principale différence d'implémentation entre ceci et le POC Dumpert est que celui-ci n'appelle pas RtlGetVersion pour interroger la version de l'OS, mais le fait dans l'assembleur en interrogeant directement le PEB. L'avantage est de pouvoir appeler une seule fonction qui prend en charge plusieurs versions de Windows au lieu d'appeler plusieurs fonctions, chacune prenant en charge une version.

Installation

root@kitploit:~
> git clone https://github.com/jthuraisamy/SysWhispers.git
> cd SysWhispers
> pip3 install -r .\requirements.txt
> py .\syswhispers.py --help

Utilisation et exemples

Lignes de commande

root@kitploit:~
# Exporte toutes les fonctions avec compatibilité pour toutes les versions de Windows prises en charge (voir example-output/).
py .\syswhispers.py --preset all -o syscalls_all

# Exporte juste les fonctions courantes avec compatibilité pour Windows 7, 8 et 10.
py .\syswhispers.py --preset common -o syscalls_common

# Exporte NtProtectVirtualMemory et NtWriteVirtualMemory avec compatibilité pour toutes les versions.
py .\syswhispers.py --functions NtProtectVirtualMemory,NtWriteVirtualMemory -o syscalls_mem

# Exporte toutes les fonctions avec compatibilité pour Windows 7, 8 et 10.
py .\syswhispers.py --versions 7,8,10 -o syscalls_78X

Sortie du script

root@kitploit:~
PS C:\Projects\SysWhispers> py .\syswhispers.py --preset common --out-file syscom

  ,         ,       ,_ /_   .  ,   ,_    _   ,_   ,
_/_)__(_/__/_)__/_/_/ / (__/__/_)__/_)__(/__/ (__/_)__
      _/_                         /
     (/                          /   @Jackson_T, 2019

SysWhispers: Pourquoi appeler le noyau quand on peut chuchoter ?

Fonctions courantes sélectionnées.

Terminé ! Fichiers écrits dans :
        syscom.asm
        syscom.h

Exemple avant-après de l'injection DLL classique via CreateRemoteThread

root@kitploit:~
py .\syswhispers.py -f NtAllocateVirtualMemory,NtWriteVirtualMemory,NtCreateThreadEx -o syscalls
root@kitploit:~
#include <Windows.h>

void InjectDll(const HANDLE hProcess, const char* dllPath)
{
    LPVOID lpBaseAddress = VirtualAllocEx(hProcess, NULL, strlen(dllPath), MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
    LPVOID lpStartAddress = GetProcAddress(GetModuleHandle(L"kernel32.dll"), "LoadLibraryA");
	
    WriteProcessMemory(hProcess, lpBaseAddress, dllPath, strlen(dllPath), nullptr);
    CreateRemoteThread(hProcess, nullptr, 0, (LPTHREAD_START_ROUTINE)lpStartAddress, lpBaseAddress, 0, nullptr);
}
root@kitploit:~
#include <Windows.h>
#include "syscalls.h" // Importer l'en-tête généré.

void InjectDll(const HANDLE hProcess, const char* dllPath)
{
    HANDLE hThread = NULL;
    LPVOID lpAllocationStart = nullptr;
    SIZE_T szAllocationSize = strlen(dllPath);
    LPVOID lpStartAddress = GetProcAddress(GetModuleHandle(L"kernel32.dll"), "LoadLibraryA");
	
    NtAllocateVirtualMemory(hProcess, &lpAllocationStart, 0, (PULONG)&szAllocationSize, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
    NtWriteVirtualMemory(hProcess, lpAllocationStart, (PVOID)dllPath, strlen(dllPath), nullptr);
    NtCreateThreadEx(&hThread, GENERIC_EXECUTE, NULL, hProcess, lpStartAddress, lpAllocationStart, FALSE, 0, 0, 0, nullptr);
}

Fonctions courantes

L'utilisation du commutateur --preset common créera une paire en-tête/ASM avec les fonctions suivantes :

Cliquez pour développer la liste des fonctions.
  • NtCreateProcess (CreateProcess)
  • NtCreateThreadEx (CreateRemoteThread)
  • NtOpenProcess (OpenProcess)
  • NtOpenThread (OpenThread)
  • NtSuspendProcess
  • NtSuspendThread (SuspendThread)
  • NtResumeProcess
  • NtResumeThread (ResumeThread)
  • NtGetContextThread (GetThreadContext)
  • NtSetContextThread (SetThreadContext)
  • NtClose (CloseHandle)
  • NtReadVirtualMemory (ReadProcessMemory)
  • NtWriteVirtualMemory (WriteProcessMemory)
  • NtAllocateVirtualMemory (VirtualAllocEx)
  • NtProtectVirtualMemory (VirtualProtectEx)
  • NtFreeVirtualMemory (VirtualFreeEx)
  • NtQuerySystemInformation (GetSystemInfo)
  • NtQueryDirectoryFile
  • NtQueryInformationFile
  • NtQueryInformationProcess
  • NtQueryInformationThread
  • NtCreateSection (CreateFileMapping)
  • NtOpenSection
  • NtMapViewOfSection
  • NtUnmapViewOfSection
  • NtAdjustPrivilegesToken (AdjustTokenPrivileges)
  • NtDeviceIoControlFile (DeviceIoControl)
  • NtQueueApcThread (QueueUserAPC)
  • NtWaitForMultipleObjects (WaitForMultipleObjectsEx)

Importation dans Visual Studio

  1. Copiez les fichiers H/ASM générés dans le dossier du projet.
  2. Dans Visual Studio, allez dans Projet → Personnalisations de la build... et activez MASM.
  3. Dans l'Explorateur de solutions, ajoutez les fichiers .h et .asm au projet en tant que fichiers d'en-tête et sources, respectivement.
  4. Allez dans les propriétés du fichier ASM et définissez le Type d'élément sur Microsoft Macro Assembler.
  5. Assurez-vous que la plateforme du projet est définie sur x64. Les projets 32 bits ne sont pas pris en charge pour le moment.

Mises en garde et limitations

  • Seul Windows 64 bits est pris en charge pour le moment.
  • Les appels système du sous-système graphique (win32k.sys) ne sont pas pris en charge.
  • Testé sur Visual Studio 2019 (v142) avec le SDK Windows 10.

Dépannage

  • ModuleNotFoundError dans le script Python.
    • Assurez-vous que les modules requis sont installés avec pip3 install -r requirements.txt.
  • Erreurs de redéfinition de type : un projet peut ne pas compiler si les typedefs de syscalls.h ont déjà été définis.
    • Assurez-vous que seules les fonctions nécessaires sont incluses (par exemple, --preset all est rarement nécessaire).
    • Si un typedef est déjà défini dans un autre en-tête utilisé, il peut être supprimé de syscalls.h.

Crédits

Ce script a été développé par @Jackson_T mais s'appuie sur le travail de beaucoup d'autres :

  • @j00ru pour la maintenance des numéros d'appels système dans des formats lisibles par machine.
  • @FoxHex0ne pour le catalogage de nombreux prototypes de fonctions et typedefs dans un format lisible par machine.
  • @PetrBenes, l'équipe NTInternals.net et MSDN pour les prototypes et typedefs supplémentaires.
  • @Cn33liz pour l'implémentation POC initiale de Dumpert.

Remerciements spéciaux à @Dcept905 pour les tests et les suggestions.

Articles et projets connexes

  • @0x00dtm : Userland API Monitoring and Code Injection Detection
  • @0x00dtm : Defeating Userland Hooks (ft. Bitdefender) (Code)
  • @Cn33liz : Combining Direct System Calls and sRDI to bypass AV/EDR (Code)
  • @mrgretzky : Defeating Antivirus Real-time Protection From The Inside
  • @SpecialHoang : Bypass EDR’s memory protection, introduction to hooking (Code)
  • @xpn et @domchell : Silencing Cylance: A Case Study in Modern EDRs
  • @mrjefftang : Universal Unhooking: Blinding Security Software (Code)
  • @spotheplanet : Full DLL Unhooking with C++
  • @hasherezade :

Licence

Ce projet est sous licence Apache License 2.0.

Télécharger l’outil
Floki Bot and the stealthy dropper
  • @hodg87 : Latest Trickbot Variant has New Tricks Up Its Sleeve
  • @hodg87 : Malware Mitigation when Direct System Calls are Used