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

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

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

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

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

Категории

Все категории
Loading categories
SindriKit — Основополагающая библиотека на C для создания оперативно достоверных наступательных возможностей | Kitploit
Инструменты/GitHubGitHub/youssefnoob003/sindrikit
Фреймворки для пентестаФреймворки для эксплойтовАнализ КодаОбратная инженерияШелл-кодОбучение и ОбразованиеRed TeamingРазработка Полезной НагрузкиЭксплуатация Бинарных Файлов
GitHubyoussefnoob003/sindrikit

SindriKit

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

7154 дней назадПроверено Kitploit

Популярное

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

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

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

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

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

SindriKit

Наступательная разработка заслуживает лучшей архитектуры.
Библиотека на C для создания наступательных возможностей.


Основная концепция

Большинство наступательных утилит зашивают механики выполнения прямо в логику техники. Рефлексивный загрузчик не просто отображает образ — он отображает его с помощью конкретной, захардкоженной цепочки вызовов VirtualAlloc или нативных NTAPI. Когда EDR начинает отслеживать эту конкретную цепочку, вы вынуждены переписывать весь инструмент.

SindriKit решает эту проблему, обеспечивая разделение ответственности через таблицы абстракции интерфейсов:

  1. Логика техники: (например, загрузчики, инъекции, патчеры) занимается отслеживанием состояния и оркестрацией данных. Она ничего не знает о том, как выделяется память или создаются потоки.
  2. Механики выполнения: (например, Win32 API, нативный NTAPI, прямые syscall'ы) находятся внутри независимых таблиц API и внедряются в технику во время выполнения.

Переместив механики выполнения в указатели на функции времени выполнения, вы можете сменить всю стратегию с вызовов Win32 на сырые прямые syscall'ы одной строкой кода — без изменения логики выполнения полезной нагрузки.


Архитектура дизайна

  • Развязанные профили выполнения: меняйте нижележащее поведение манипуляций с памятью, модулями и потоками через таблицы указателей на функции, не ломая вызывающую технику.
  • Каскадные запасные варианты syscall'ов: подключаемые резолверы SSN (snd_syscall_resolve_ssn_scan, snd_syscall_resolve_ssn_sort) с цепочкой приоритетов — меняйте или расширяйте стратегии, не трогая доменный код.
  • Обфускация на этапе компиляции: алгоритмы хеширования строк и API (DJB2, FNV1A) можно глобально переключать через CMake. Сборка автоматически рандомизирует глобальное зерно, изменяя статические сигнатуры.
  • Движок мутаций: обеспечивает глубокий полиморфизм через SND_MORPH. Генерирует уникальные бинарные сигнатуры при каждой сборке, внедряя изменчивые непрозрачные предикаты в C-код, функционально эквивалентные математические выражения/NOP'ы в Assembly-заглушки и перемешивая раскладку памяти ключевых структур.
  • Release-сборки: тихий уровень удаляет все диагностические строки, ссылки на файлы и трекинговые кадры из финального бинарника, сокращая ваш статический след до голых примитивов.

Интеграция SindriKit

root@kitploit:~
cmake_minimum_required(VERSION 3.16)
project(MyTool C ASM_MASM)

set(SND_BUILD_PAYLOADS  OFF    CACHE BOOL   "")
set(SND_ENABLE_DEBUG    OFF    CACHE BOOL   "")
set(SND_HASH_ALGO      "DJB2"  CACHE STRING "")
set(SND_RANDOMIZE_SEED  ON     CACHE BOOL   "")
set(SND_MORPH           ON     CACHE BOOL   "")

add_subdirectory(libs/SindriKit)

add_executable(my_tool src/main.c)
target_link_libraries(my_tool PRIVATE sindri::engine)
root@kitploit:~
cmake -B build && cmake --build build --config Release

Всего две строки — и ваш инструмент наследует все возможности SindriKit: разбор PE, резолвинг syscall'ов, рефлексивную загрузку...


Движок

Слой абстракции API

root@kitploit:~
        ┌────────────────────────────────────────────────────────────────────────────┐
        │                          ANY OFFENSIVE INTENT                              │
        │    Loader · Injector · Spoofer · Patcher · Bypasser · Harvester · ...      │
        ├────────────────────────────────────────────────────────────────────────────┤
        │                     SINDRIKIT API ABSTRACTION LAYER                        │
        │      snd_memory_api_t  ->  alloc · free · protect                          │
        │      snd_module_api_t  ->  load_library · get_proc_address · ...           │
        │      snd_process_api_t ->  open · alloc_remote · write · protect · thread  │
        │      [ future tables ] ->  thread · object · ...                           │
        ├──────────────────┬──────────────────────┬──────────────────────────────────┤
        │   Win32 Profile  │    Native Profile    │    Bring Your Own Mechanic       │
        │  VirtualAlloc    │  NtAllocateVirtual   │  Driver · ROP · Exotic           │
        │  LoadLibraryA    │  PEB Walk + EAT      │  Operator-defined functions      │
        └──────────────────┴──────────────────────┴──────────────────────────────────┘

На практике это означает, что каждый домен следует одному и тому же контракту:

root@kitploit:~
// Reflective loader
snd_ldr_pe_ctx_t ctx = {0};
ctx.raw_source = &payload;
ctx.mem_api    = &snd_mem_win;   // or snd_mem_nt / snd_mem_sys
ctx.mod_api    = &snd_mod_win;   // or snd_mod_nt
snd_ldr_pe_prepare_image(&ctx);
snd_ldr_pe_execute_image(&ctx);

// Classic injection
snd_inj_ctx_t inj = {0};
inj.target_pid = 1337;
inj.payload    = &shellcode;
inj.proc_api   = &snd_proc_sys;  // or snd_proc_win / snd_proc_nt
snd_inj_classic_shell(&inj);
snd_inj_cleanup(&inj);

Каскадный конвейер syscall'ов

SindriKit рассматривает резолвинг syscall'ов как инжектируемую механику, выстраивая стратегии в порядке приоритета. Движок последовательно перебирает их, пока одна не сработает:

root@kitploit:~
snd_syscall_set_ntdll(clean_ntdll);
snd_syscall_set_resolver(snd_syscall_resolve_ssn_scan);
snd_syscall_add_resolver(snd_syscall_resolve_ssn_sort);
snd_syscall_set_invoker(snd_syscall_direct_invoke_asm);
// or for indirect syscalls:
// snd_syscall_set_invoker(snd_syscall_indirect_invoke_asm);
// snd_syscall_set_gadget_finder(snd_syscall_find_gadget_scan);

Инвокер отделён от резолвинга SSN — переключайтесь между прямыми и косвенными syscall'ами без изменения доменного кода. Косвенный вызов переходит на легитимный гаджет NTDLL, сохраняя адрес возврата syscall'а внутри ntdll.dll.

Гибкость алгоритмов на этапе компиляции

Каждое имя API и строка модуля удаляются из финального бинарника на этапе компиляции одной переменной CMake:

root@kitploit:~
set(SND_HASH_ALGO "FNV1A")  # or DJB2 recomputes everything automatically
set(SND_RANDOMIZE_SEED ON)  # generates a fresh 32-bit seed on next configure

Каждый хеш вычисляется со случайно сгенерированным зерном (если SND_RANDOMIZE_SEED=ON). Статический след полностью смещается между компиляциями без изменения ни строки C.

Динамический FFI с учётом архитектуры

Пользовательский мост на MASM-ассемблере для произвольного вызова функций во время выполнения. Сборки x64 точно следуют соглашению о вызовах Microsoft x64 (теневое пространство, размещение аргументов в регистрах, выравнивание стека). Сборки x86 помещают аргументы в обратном порядке с поддержкой целей как cdecl, так и stdcall.

PE-парсер с проверкой границ

Унифицированный парсер PE32/PE32+ с флагом is_mapped, который корректно обрабатывает как сырые образы на диске, так и отображаемые в память представления. Каждый доступ к записи каталога данных проверяется на соответствие отслеживаемым границам буфера перед разыменованием. Разрешение экспортов поддерживает цепочки форвардеров глубиной до 4 с поиском на основе хеша.

Протестировано на:

  • 40+ комбинаций ключевых тестов, охватывающих граничные случаи EXE, DLL, неверные аргументы, отсутствующие экспорты и TLS-колбэки на x86 и x64.
  • 100+ динамических мутаций PE, сгенерированных модулем pe_mutator: обнулённые имена секций, целочисленные переполнения, недопустимые границы e_lfanew, испорченные импорты.
  • Полный корпус Corkami: корректно загружает валидные образцы, корректно отклоняет повреждённые, не падая, в 99% образцов.

Контексты доменов с отслеживанием состояния

Каждая наступательная операция управляется через отдельную структуру контекста с перечислением стадий. Операции можно приостанавливать между стадиями для обфускации сна или поэтапного развертывания, чисто возобновлять и инспектировать, находя точную точку отказа вплоть до подсистемы и причины.


Философия API-дизайна

Однократно инициализируйте конвейер syscall'ов (типичный паттерн):

root@kitploit:~
PVOID clean_ntdll = NULL;
snd_om_knowndll_map(&snd_map_nt, L"ntdll.dll", &clean_ntdll);
snd_syscall_set_ntdll(clean_ntdll);
snd_syscall_set_resolver(snd_syscall_resolve_ssn_scan);
snd_syscall_add_resolver(snd_syscall_resolve_ssn_sort);
snd_syscall_set_invoker(snd_syscall_direct_invoke_asm);
// or for indirect syscalls:
// snd_syscall_set_invoker(snd_syscall_indirect_invoke_asm);
// snd_syscall_set_gadget_finder(snd_syscall_find_gadget_scan);

Инвокер отделён от резолвинга SSN — переключайтесь между прямыми и косвенными syscall'ами без изменения доменного кода. Косвенный вызов переходит на легитимный гаджет NTDLL, сохраняя адрес возврата syscall'а внутри ntdll.dll.

Меняйте профиль выполнения одним присваиванием:

root@kitploit:~
ctx.mem_api = &snd_mem_win;   // diagnostic
ctx.mem_api = &snd_mem_nt;    // NT stubs via PEB + EAT
ctx.mem_api = &snd_mem_sys;   // direct syscalls (pipeline required)

Разрешение модулей следует тому же паттерну (snd_mod_win vs snd_mod_nt). Бэкенда модулей на syscall'ах нет — импорты используют PEB Walk + EAT даже в полных _sys-профилях.


Уровни сборки

Отладочный уровень — SND_ENABLE_DEBUG=ON

Для локальной разработки. snd_status_t расширяется и включает file, line и 128-байтовый строковый буфер context. SND_ERR_CTX и SND_DEBUG_PRINT выводят переходы конечного автомата, значения полей разобранного PE и результаты резолвинга syscall'ов. Используйте SND_USE_PRINTF=ON, чтобы направлять вывод в stdout вместо консоли отладки.

Тихий уровень — SND_ENABLE_DEBUG=OFF

Стандартная конфигурация развертывания для операционных бинарников. Каждая диагностическая строка, ссылка на файл и номер строки полностью выкидываются на этапе компиляции. snd_status_t схлопывается до двух целых чисел. Ничего больше.

root@kitploit:~
set(SND_ENABLE_DEBUG   OFF   CACHE BOOL   "")
set(SND_BUILD_PAYLOADS OFF   CACHE BOOL   "")
set(SND_RANDOMIZE_SEED ON    CACHE BOOL   "")
set(SND_USE_DEFAULTS   ON    CACHE BOOL   "")
set(SND_HASH_ALGO    "DJB2"  CACHE STRING "")
add_subdirectory(vendor/SindriKit)
target_link_libraries(my_tool PRIVATE sindri::engine)

Документация

Полная документация в docs/:

  • Начало работы — CMake, уровни сборки, начальная инициализация DI, первый рабочий процесс загрузчика/инъекции
  • Архитектура — Внедрение зависимостей, конечные автоматы, система статусов
  • Примитивы — Память, модули, процессы, маппинг, syscall'ы, выполнение (FFI)
  • Загрузчики — Конвейер рефлексивного PE
  • Инъекции — Классическая инъекция шеллкода и PE
  • Парсеры — Поддомены PE и env (PEB)
  • Общее — CRT-free хелперы, буферы, хеширование, статусы
  • Примеры и PoC — loader_winapi, loader_nowinapi, inject_pe, inject_shell, heavens_gate
  • Тесты — Интеграционный раннер, PE-мутатор

В планах: домен Обход защит.


Отказ от ответственности

SindriKit создан исключительно для образовательных, исследовательских целей и авторизованного Red Teaming. Полный юридический дисклеймер и информация об OpSec-аспектах — в Политике безопасности.


Лицензия

MIT


Скачать инструмент