
暗号化されたコマンド&コントロール(C2)研究フレームワーク。サイバーセキュリティ教育、レッドチームラボ、およびセキュアなクライアント・サーバー通信実験向け。
BlackBerryC2は、教育目的、セキュリティ研究、管理された実験環境専用に設計された、暗号化されたリモート管理およびC2フレームワークです。

このプロジェクトは、外部TLSスタックに依存せずに、アプリケーション層の暗号化、セッション管理、安全なクライアント通信を備えたカスタムコマンド&コントロールサーバーを構築する方法を示しています。
このプロジェクトはマルウェアではありません。不正アクセスを目的としたものではありません。
BlackBerryC2:
所有している、またはテストする明示的な許可があるシステムとネットワークでのみ使用してください。
Python依存関係:
pip install cryptography prompt_toolkit zstandard
zstandardはオプションですが、1GBを超える転送には推奨されます。
get -r, put -r)-b フラグ) — 非ブロッキング、キャンセル可能.partial + .resume ファイル)generate-payload)BlackBerryHTTPs_TLSProxyGUI)log コマンド)logs/last_start.json に保存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
# カスタムポートでのポートノッキング
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が有効な場合、クライアントはTCP接続が受け入れられる前にUDP経由で認証する必要があります。
SPAモード(デフォルト): クライアントは32バイトのHMAC-SHA256トークンを SPA_UDP_PORT に送信します。
token = HMAC-SHA256(HMAC_SECRET, "{ip}:{time_window_30s}")
ノックモード: クライアントはタイムアウトウィンドウ内に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 ファイルを参照してください。
本ソフトウェアは「現状のまま」提供され、いかなる種類の保証もありません。
作者は、本ソフトウェアの誤用またはそれによって生じた損害について一切の責任を負いません。
| フラグ | 説明 |
|---|
-p / --persistente | ecdhe-cert/から永続的なECDHE鍵を使用(パスフレーズを要求) |
-v | デバッグロギング |
-vv | 詳細(緩やかな)ロギング |
-H <host> | 待受ホスト(デフォルト: 0.0.0.0) |
-P <port> | 待受ポート(デフォルト: 9949) |
--no-secure | HMAC検証なしで任意のECDHEクライアントを受け入れる |
--hmac <secret> | カスタムHMAC事前共有秘密鍵(16進数または文字列) |
--log-passphrase <pass> | サーバーログをAES-256-GCM(PBKDF2 60万イテレーション)で暗号化 |
--logs | インタラクティブログビューア — サーバーは起動しない |
--spa | SPA/ポートノッキング事前認証を有効化 |
--spa-mode <spa|knock> | spa = 単一UDPトークン、knock = ポートシーケンス |
--spa-port <port> | SPAリスナーのUDPポート(デフォルト: 7331) |
--knock-seq <ports> | ノックモードのポートシーケンス(デフォルト: 7001,7002,7003) |
--knock-timeout <sec> | ノックシーケンス完了までの秒数(デフォルト: 10) |
--spa-ttl <sec> | 認可されたIPが有効な秒数(デフォルト: 60) |
--berrytransfer | BerryTransferモード: ファイル転送のみ、シェルなし |
--transfer-root <dir> | BerryTransferのルートディレクトリ(デフォルト: ./berry_transfers) |
--auto-confirm | BerryTransferですべてのGETリクエストを自動承認(オペレータープロンプトなし) |
| コマンド | 説明 |
|---|
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 | チェーン: cmd1が成功した場合のみcmd2を実行 |
cmd1 || cmd2 | チェーン: cmd1が失敗した場合のみcmd2を実行 |
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バイトノンス |
| クライアント認証 | ハンドシェイク中の共有秘密鍵に対するHMAC-SHA256 |
| メッセージ完全性 | パケットごとのHMAC-SHA256(seq + nonce + ciphertextをカバー) |
| アンチリプレイ | セッションごとのシーケンス番号ウィンドウトラッカー |
| ダウングレード保護 | 最低AES鍵サイズを強制(256ビット) |
| ハートビートレート制限 | ハートビート間隔最小3秒; 違反は追跡 |
| コマンドフラッド保護 | レートリミッター; しきい値超過後自動切断 |
| スキャン検出 | コネクトスキャン、バナーグラブ、ハンドシェイク失敗カウンター |
| IP管理 | 永続的ブロックリスト + 一時的な禁止(自動+手動) |
| ログ暗号化 | AES-256-GCM + PBKDF2-HMAC-SHA256(60万イテレーション) |
| 応答ジッター | 10〜50msのランダムジッターでタイミング攻撃に対抗 |
| 事前認証 | TCP受け入れ前にSPAトークンまたはポートノッキング |
| ログファイル | 内容 |
|---|
logs/BlackBerryC2_Server.log | プレーンテキスト回転式サーバーログ(INFO以上) |
logs/BlackBerryC2_enc.log | 暗号化されたサーバーログ(--log-passphraseが設定されている場合) |
logs/sessions.jsonl | セッションイベント: 接続、切断、バイト数 |
logs/bt_transfer.jsonl | BerryTransferファイル転送ログ |
logs/last_start.json | 起動設定スナップショット(ホスト、ポート、トークン、PID) |