
Зашифрованная исследовательская платформа командования и управления (C2) для обучения кибербезопасности, лабораторных работ red team и экспериментов по безопасной связи клиент-сервер.
BlackBerryC2 — это зашифрованная платформа для удаленного администрирования и C2, разработанная исключительно для образовательных целей, исследований в области безопасности и контролируемых лабораторных сред.

Проект демонстрирует, как построить пользовательский сервер управления и контроля с криптографией на уровне приложения, управлением сессиями и безопасной связью с клиентом без использования внешних TLS-стеков.
Этот проект НЕ является вредоносным ПО и НЕ предназначен для несанкционированного доступа.
BlackBerryC2:
Используйте только на системах и сетях, которыми вы владеете или на тестирование которых имеете явное разрешение.
Python-зависимости:
pip install cryptography prompt_toolkit zstandard
zstandardопционален, но рекомендуется для передачи файлов размером более 1 ГБ.
get -r, put -r)-b) — неблокирующие, отменяемые.partial + .resume)generate-payload)BlackBerryHTTPs_TLSProxyGUI)log)BlackBerryC2 v2.0 устанавливает безопасную связь следующим образом:
REQUEST_PUBKEY.secp256r1).HMAC_PRE_SHARED_SECRET).Каждая сессия поддерживает:
Все криптографические ключи генерируются во время выполнения и никогда не повторяются между перезапусками (если не установлен --persistente).
python3 BlackBerryC2_server.py
Конфигурация по умолчанию:
0.0.0.09949Примеры:
# Базовый запуск (запрашивает парольную фразу для журнала)
python3 BlackBerryC2_server.py
# Постоянные ключи ECDHE + подробный режим
python3 BlackBerryC2_server.py -p -vv
# Пользовательский порт, без проверки HMAC
python3 BlackBerryC2_server.py -P 8080 --no-secure
# Port-knocking на пользовательских портах
python3 BlackBerryC2_server.py --spa --spa-mode knock --knock-seq 9001,9002,9003
# Режим BerryTransfer с авто-подтверждением
python3 BlackBerryC2_server.py --berrytransfer --auto-confirm
# Просмотр/расшифровка журналов без запуска сервера
python3 BlackBerryC2_server.py --logs
select <ID>)BerryTransfer — это выделенный режим сервера только для передачи файлов, вдохновленный scp. При активации сервер отклоняет любой доступ к оболочке и принимает только команды протокола BT:*.
Запуск:
python3 BlackBerryC2_server.py --berrytransfer
python3 BlackBerryC2_server.py --berrytransfer --auto-confirm # без запроса оператора для GET
Команды оболочки BerryTransfer:
Журнал передачи записывается в logs/bt_transfer.jsonl (опционально зашифрован AES-256-GCM).
Когда активен --spa, клиенты должны пройти аутентификацию через UDP до того, как TCP-соединение будет принято.
Режим SPA (по умолчанию): Клиент отправляет 32-байтовый токен HMAC-SHA256 на SPA_UDP_PORT.
token = HMAC-SHA256(HMAC_SECRET, "{ip}:{time_window_30s}")
Режим Knock: Клиент последовательно стучит по UDP-портам в течение временного окна.
python3 BlackBerryC2_server.py --spa --spa-mode knock --knock-seq 7001,7002,7003 --knock-timeout 10
Авторизованные IP-адреса действительны в течение --spa-ttl секунд (по умолчанию 60).
Просмотр журналов со встроенным просмотрщиком:
BlackBerry> log
Или отдельно (без сервера):
python3 BlackBerryC2_server.py --logs
Этот проект предназначен только для:
Несанкционированное использование против систем без разрешения строго запрещено.
См. файл LICENSE для получения полной информации о лицензии.
Данное программное обеспечение предоставляется "как есть", без каких-либо гарантий.
Авторы не несут ответственности за неправильное использование или ущерб, причиненный данным программным обеспечением.
logs/last_start.json| Флаг | Описание |
|---|
-p / --persistente | Использовать постоянные ключи ECDHE из ecdhe-cert/ (запрашивает парольную фразу) |
-v | Отладка логирования |
-vv | Подробное (расслабленное) логирование |
-H <host> | Прослушиваемый хост (по умолчанию: 0.0.0.0) |
-P <port> | Прослушиваемый порт (по умолчанию: 9949) |
--no-secure | Принимать любого клиента ECDHE без проверки HMAC |
--hmac <secret> | Пользовательский предварительно общий секрет HMAC (hex или строка) |
--log-passphrase <pass> | Шифровать журнал сервера с помощью AES-256-GCM (PBKDF2 600k итераций) |
--logs | Интерактивный просмотрщик журналов — сервер не запускается |
--spa | Включить предварительную аутентификацию SPA / port-knocking |
--spa-mode <spa|knock> | spa = одиночный UDP-токен, knock = последовательность портов |
--spa-port <port> | UDP-порт для SPA-слушателя (по умолчанию: 7331) |
--knock-seq <ports> | Последовательность портов для режима knock (по умолчанию: 7001,7002,7003) |
--knock-timeout <sec> | Секунды для завершения последовательности knock (по умолчанию: 10) |
--spa-ttl <sec> | Секунды, в течение которых авторизованный IP остается действительным (по умолчанию: 60) |
--berrytransfer | Режим BerryTransfer: только передача файлов, без оболочки |
--transfer-root <dir> | Корневая директория для BerryTransfer (по умолчанию: ./berry_transfers) |
--auto-confirm | Автоматически подтверждать все GET-запросы в BerryTransfer (без запроса оператора) |
| Команда | Описание |
|---|
list | Список активных сессий со статистикой и именем хоста |
select <ID> | Взаимодействие с клиентской сессией |
all <cmd> | Отправить команду всем подключенным клиентам |
report | Полный отчет о состоянии сервера (аптайм, сессии, передачи) |
set host <HOST> | Изменить прослушиваемый хост (перезапускает сервер) |
set port <PORT> | Изменить прослушиваемый порт (перезапускает сервер) |
sVbanner "<text>" | Изменить баннер службы |
generate-payload | Сгенерировать клиентскую полезную нагрузку |
fingerprint | Показать отпечаток серверного ключа ECDHE (SHA-256) |
ecdhe-keys | Показать текущую пару ключей ECDHE (PEM) |
kill <id|ip> | Завершить сессию по ID или IP |
block <IP> | Постоянно заблокировать IP |
unblock <IP> | Разблокировать IP (постоянный + временный) |
blocklist | Показать заблокированные IP (постоянные и временные) |
log | Интерактивный просмотрщик журналов (поддерживает зашифрованные журналы) |
report | Сводка состояния: аптайм, сессии, передачи |
banner | Повторно отобразить стартовый баннер |
clean | Удалить файлы журналов сервера |
v | Переключить отладку DEBUG |
vv | Переключить подробное логирование VERBOSE |
cd <dir> | Изменить рабочую директорию сервера |
E <cmd> | Выполнить команду через os.system локально |
<любая команда> | Выполнить локально на сервере |
exit | Остановить сервер и выйти |
| Команда | Описание |
|---|
proxy | Запустить демона TLS/HTTP-прокси (авто режим) |
proxy --mode <mode> | Режимы: auto, tls, http, https, both, all |
proxy --stats | Показать статистику прокси |
proxy gui | Запустить GUI прокси (отдельный процесс) |
stop-proxy | Остановить демона прокси |
stop-proxy-gui | Остановить GUI прокси |
proxy-help | Полная справка по прокси |
| Команда | Описание |
|---|
help | Показать справку сессии |
exit | Вернуться в главную оболочку |
!<cmd> | Выполнить команду локально на сервере |
<cmd> | Выполнить команду на удаленном клиенте |
cmd1 && cmd2 | Цепочка: выполнить cmd2 только если cmd1 успешна |
cmd1 || cmd2 | Цепочка: выполнить cmd2 только если cmd1 не удалась |
cmd1 ; cmd2 | Цепочка: всегда выполнять cmd2 |
| Команда | Описание |
|---|
get <file> | Скачать файл с клиента |
get <dir> -r | Рекурсивная загрузка директории |
get <file> -b | Фоновая загрузка (неблокирующая) |
get <dir> -r -b | Фоновая рекурсивная загрузка |
put <file> | Выгрузить файл на клиент |
put <file> -exc | Выгрузить и выполнить в памяти (скрипты) |
put <dir> -r | Рекурсивная выгрузка директории |
put <file> -b | Фоновая выгрузка |
transfers | Список всех активных и завершенных передач |
stop <ID> | Отменить фоновую передачу (например, stop T1) |
resume <local_file> | Возобновить прерванную загрузку |
screenshot | Захват экрана клиента |
| Команда | Описание |
|---|
confirm <ID> | Подтвердить ожидающий GET-запрос |
deny <ID> | Отклонить ожидающий GET-запрос |
pending | Список GET-запросов, ожидающих подтверждения |
auto [on|off] | Включить/выключить/установить авто-подтверждение |
clients | Показать активные сессии BerryTransfer |
ls [dir] | Список файлов в корне передачи |
tree [dir] | Дерево файлов корня передачи |
find <name> | Поиск файла в корне передачи |
rm <file> | Удалить файл из корня передачи (с подтверждением) |
log [N] | Показать последние N записей журнала передачи (по умолч. 30) |
cd <dir> | Изменить локальную рабочую директорию |
pwd | Показать текущую локальную директорию |
!<cmd> | Выполнить локальную системную команду |
exit | Остановить сервер BerryTransfer |
| Функция | Детали |
|---|
| Обмен ключами | ECDHE secp256r1 эфемерный или постоянный |
| Шифрование сессии | AES-256-GCM, случайный 12-байтовый nonce на сообщение |
| Аутентификация клиента | HMAC-SHA256 по общему секрету во время рукопожатия |
| Целостность сообщений | HMAC-SHA256 на каждый пакет (покрывает seq + nonce + шифротекст) |
| Защита от повторного воспроизведения | Трекер окна номеров последовательности на сессию |
| Защита от понижения версии | Минимальный размер ключа AES — 256 бит |
| Ограничение частоты heartbeat | Минимум 3 секунды между heartbeats; нарушения отслеживаются |
| Защита от флуда командами | Ограничитель скорости; авто-отключение после порога |
| Обнаружение сканирования | Счетчики сканирования подключений, захвата баннера, сбоев рукопожатия |
| Управление IP | Постоянный список блокировки + временные баны (авто и ручные) |
| Шифрование журнала | AES-256-GCM + PBKDF2-HMAC-SHA256 (600k итераций) |
| Джиттер ответов | 10–50 мс случайный джиттер для защиты от атак по времени |
| Предварительная аутентификация | SPA-токен или port-knocking до принятия TCP |
| Файл журнала | Содержимое |
|---|
logs/BlackBerryC2_Server.log | Обычный ротируемый журнал сервера (INFO+) |
logs/BlackBerryC2_enc.log | Зашифрованный журнал сервера (если установлен --log-passphrase) |
logs/sessions.jsonl | События сессий: подключение, отключение, байты |
logs/bt_transfer.jsonl | Журнал передачи файлов BerryTransfer |
logs/last_start.json | Снимок конфигурации запуска (хост, порт, токен, PID) |