Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
SysWhispers — Elusione di AV/EDR tramite chiamate di sistema dirette. | Kitploit
Strumenti/GitHubGitHub/jthuraisamy/syswhispers
ExploitEvasione IDS/IPSShellcodePenetration TestingRed TeamingSviluppo Payload
GitHubjthuraisamy/syswhispers

SysWhispers

Elusione di AV/EDR tramite chiamate di sistema dirette.

Vedi Repository
2.0k2775 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

SysWhispers

SysWhispers aiuta nell'evasione generando file header/ASM che gli impianti possono utilizzare per effettuare chiamate di sistema dirette.

Tutte le syscall principali sono supportate da Windows XP a Windows 10 19042 (20H2). I file di esempio generati sono disponibili nella cartella example-output/.

Introduzione

Vari prodotti di sicurezza inseriscono hook nelle API in spazio utente che permettono loro di reindirizzare il flusso di esecuzione verso i propri motori e rilevare comportamenti sospetti. Le funzioni in ntdll.dll che eseguono le syscall sono costituite da poche istruzioni assembly, quindi reimplementarle nel proprio impianto può bypassare l'attivazione di quegli hook dei prodotti di sicurezza. Questa tecnica è stata resa popolare da @Cn33liz e il suo articolo contiene ulteriori dettagli tecnici che vale la pena leggere.

SysWhispers offre ai red teamer la possibilità di generare coppie header/ASM per qualsiasi chiamata di sistema nell'immagine del kernel principale (ntoskrnl.exe) su qualsiasi versione di Windows a partire da XP. Gli header includeranno anche le definizioni dei tipi necessari.

La principale differenza implementativa tra questo e la POC Dumpert è che questa non chiama RtlGetVersion per interrogare la versione del sistema operativo, ma lo fa direttamente nell'assembly interrogando il PEB. Il vantaggio è poter chiamare un'unica funzione che supporta più versioni di Windows invece di chiamare più funzioni ciascuna delle quali supporta una singola versione.

Installazione

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

Utilizzo ed Esempi

Righe di Comando

root@kitploit:~
# Export all functions with compatibility for all supported Windows versions (see example-output/).
py .\syswhispers.py --preset all -o syscalls_all

# Export just the common functions with compatibility for Windows 7, 8, and 10.
py .\syswhispers.py --preset common -o syscalls_common

# Export NtProtectVirtualMemory and NtWriteVirtualMemory with compatibility for all versions.
py .\syswhispers.py --functions NtProtectVirtualMemory,NtWriteVirtualMemory -o syscalls_mem

# Export all functions with compatibility for Windows 7, 8, and 10.
py .\syswhispers.py --versions 7,8,10 -o syscalls_78X

Output dello Script

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

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

SysWhispers: Why call the kernel when you can whisper?

Common functions selected.

Complete! Files written to:
        syscom.asm
        syscom.h

Esempio Prima-e-Dopo della Classica Iniezione di DLL con 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" // Import the generated header.

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);
}

Funzioni Comuni

Usando lo switch --preset common verrà creata una coppia header/ASM con le seguenti funzioni:

Clicca per espandere l'elenco delle funzioni.
  • 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)

Importazione in Visual Studio

  1. Copiare i file H/ASM generati nella cartella del progetto.
  2. In Visual Studio, andare su Progetto → Personalizzazioni compilazione... e abilitare MASM.
  3. In Esplora soluzioni, aggiungere i file .h e .asm al progetto rispettivamente come file di intestazione e di origine.
  4. Andare alle proprietà del file ASM e impostare Tipo elemento su Microsoft Macro Assembler.
  5. Assicurarsi che la piattaforma del progetto sia impostata su x64. I progetti a 32 bit non sono supportati al momento.

Avvertenze e Limitazioni

  • Attualmente è supportato solo Windows a 64 bit.
  • Le chiamate di sistema del sottosistema grafico (win32k.sys) non sono supportate.
  • Testato su Visual Studio 2019 (v142) con Windows 10 SDK.

Risoluzione dei Problemi

  • ModuleNotFoundError nello script Python.
    • Assicurarsi di aver installato i moduli richiesti con pip3 install -r requirements.txt.
  • Errori di ridefinizione dei tipi: un progetto potrebbe non compilare se i typedef in syscalls.h sono già stati definiti.
    • Assicurarsi di includere solo le funzioni necessarie (cioè --preset all è raramente necessario).
    • Se un typedef è già definito in un altro header utilizzato, è possibile rimuoverlo da syscalls.h.

Crediti

Questo script è stato sviluppato da @Jackson_T ma si basa sul lavoro di molti altri:

  • @j00ru per aver mantenuto i numeri delle syscall in formati leggibili dalle macchine.
  • @FoxHex0ne per aver catalogato molti prototipi di funzioni e typedef in un formato leggibile dalle macchine.
  • @PetrBenes, team di NTInternals.net e MSDN per prototipi e typedef aggiuntivi.
  • @Cn33liz per l'implementazione iniziale della POC Dumpert.

Un ringraziamento speciale a @Dcept905 per i test e i suggerimenti.

Articoli e Progetti Correlati

  • @0x00dtm: Monitoraggio delle API in spazio utente e rilevamento di iniezioni di codice
  • @0x00dtm: Sconfiggere gli Hook in spazio utente (con Bitdefender) (Codice)
  • @Cn33liz: Combinare chiamate di sistema dirette e sRDI per bypassare AV/EDR (Codice)
  • @mrgretzky: Sconfiggere la protezione in tempo reale degli antivirus dall'interno
  • @SpecialHoang: Bypassare la protezione della memoria degli EDR, introduzione all'hooking (Codice)
  • @xpn e @domchell: Silenziare Cylance: un caso studio sugli EDR moderni
  • @mrjefftang: Unhooking universale: accecare il software di sicurezza (Codice)
  • @spotheplanet: Disancoraggio completo delle DLL con C++
  • :

Licenza

Questo progetto è concesso in licenza secondo i termini della Apache License 2.0.

Scarica lo strumento
@hasherezade
Floki Bot e il dropper stealth
  • @hodg87: L'ultima variante di Trickbot ha nuovi trucchi nella manica
  • @hodg87: Mitigazione del malware quando vengono utilizzate chiamate di sistema dirette