Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
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
SysWhispers2 — Evasione di AV/EDR tramite chiamate di sistema dirette. | Kitploit
Strumenti/GitHubGitHub/jthuraisamy/syswhispers2
Strumenti DifensiviGenerazione di PayloadEvasione IDS/IPSShellcodeRed TeamingGenerazione di ShellcodeSviluppo PayloadBinary ExploitationTop in Evasione IDS/IPS n.18Top in Sviluppo Payload n.6
1.8k265704 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 →
Top in Generazione di Payload n.8
Top in Shellcode n.6
Top in Generazione di Shellcode n.8
GitHubjthuraisamy/syswhispers2

SysWhispers2

Evasione di AV/EDR tramite chiamate di sistema dirette.

Vedi Repository
Condividi

SysWhispers2

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

Tutte le syscall principali sono supportate e nella cartella example-output/ sono disponibili file generati di esempio.

Differenza tra SysWhispers 1 e 2

L'utilizzo è quasi identico a SysWhispers1 ma non è necessario specificare quali versioni di Windows supportare. La maggior parte delle modifiche è sotto il cofano. Non si basa più sulle tabelle delle syscall di @j00ru, ma utilizza la tecnica "sorting by system call address" resa popolare da @modexpblog. Questo riduce significativamente la dimensione degli stub delle syscall.

L'implementazione specifica in SysWhispers2 è una variazione del codice di @modexpblog. Una differenza è che gli hash dei nomi delle funzioni vengono randomizzati ad ogni generazione. @ElephantSe4l, che aveva pubblicato questa tecnica in precedenza, ha un'altra implementazione basata in C++17 che vale la pena di esaminare.

Il repository originale di SysWhispers è ancora presente ma potrebbe essere deprecato in futuro.

Introduzione

Vari prodotti di sicurezza inseriscono hook nelle funzioni API in modalità utente che consentono loro di reindirizzare il flusso di esecuzione verso i propri motori e rilevare comportamenti sospetti. Le funzioni in ntdll.dll che effettuano le syscall sono composte da poche istruzioni assembly, quindi reimplementarle nel proprio implant può bypassare l'attivazione di quegli hook dei prodotti di sicurezza. Questa tecnica è stata resa popolare da @Cn33liz e il suo post sul blog contiene maggiori dettagli tecnici che vale la pena leggere.

SysWhispers fornisce ai red teamer la capacità di generare coppie header/ASM per qualsiasi syscall nell'immagine del kernel principale (ntoskrnl.exe). Gli header includeranno anche le definizioni dei tipi necessarie.

Installazione

> git clone https://github.com/jthuraisamy/SysWhispers2.git
> cd SysWhispers2
> py .\syswhispers.py --help

Utilizzo ed esempi

Righe di comando

# Esporta tutte le funzioni con compatibilità per tutte le versioni di Windows supportate (vedi example-output/).
py .\syswhispers.py --preset all -o syscalls_all

# Esporta solo le funzioni comuni (vedi elenco in basso).
py .\syswhispers.py --preset common -o syscalls_common

# Esporta NtProtectVirtualMemory e NtWriteVirtualMemory con compatibilità per tutte le versioni.
py .\syswhispers.py --functions NtProtectVirtualMemory,NtWriteVirtualMemory -o syscalls_mem

Output dello script

PS C:\Projects\SysWhispers2> py .\syswhispers.py --preset common --out-file syscalls_common

python syswhispers.py -p all -a all -l all -o example-output/Syscalls

                  .                         ,--.
,-. . . ,-. . , , |-. o ,-. ,-. ,-. ,-. ,-.    /
`-. | | `-. |/|/  | | | `-. | | |-' |   `-. ,-'
`-' `-| `-' ' '   ' ' ' `-' |-' `-' '   `-' `---
     /|                     |  @Jackson_T
    `-'                     '  @modexpblog, 2021

SysWhispers2: Why call the kernel when you can whisper?

All functions selected.

Complete! Files written to:
        example-output/Syscalls.h
        example-output/Syscalls.c
        example-output/SyscallsStubs.std.x86.asm
        example-output/SyscallsStubs.rnd.x86.asm
        example-output/SyscallsStubs.std.x86.nasm
        example-output/SyscallsStubs.rnd.x86.nasm
        example-output/SyscallsStubs.std.x86.s
        example-output/SyscallsStubs.rnd.x86.s
        example-output/SyscallsInline.std.x86.h
        example-output/SyscallsInline.rnd.x86.h
        example-output/SyscallsStubs.std.x64.asm
        example-output/SyscallsStubs.rnd.x64.asm
        example-output/SyscallsStubs.std.x64.nasm
        example-output/SyscallsStubs.rnd.x64.nasm
        example-output/SyscallsStubs.std.x64.s
        example-output/SyscallsStubs.rnd.x64.s
        example-output/SyscallsInline.std.x64.h
        example-output/SyscallsInline.rnd.x64.h

Esempio prima e dopo dell'iniezione DLL classica con CreateRemoteThread

py .\syswhispers.py -f NtAllocateVirtualMemory,NtWriteVirtualMemory,NtCreateThreadEx -o syscalls
#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);
}
#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 l'opzione --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

Scarica lo strumento