
إطار عمل بحثي للتحكم والأوامر المشفرة (C2) لتعليم الأمن السيبراني، ومختبرات الفريق الأحمر، وتجارب الاتصال الآمن بين العميل والخادم.
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)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، يجب على العملاء المصادقة عبر UDP قبل قبول اتصال TCP.
وضع SPA (الافتراضي): يرسل العميل رمز HMAC-SHA256 بطول 32 بايت إلى 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 دائمة من ecdhe-cert/ (يطلب عبارة المرور) |
-v | تسجيل التصحيح (debug) |
-vv | تسجيل مفصّل (مريح) |
-H <host> | مضيف الاستماع (الافتراضي: 0.0.0.0) |
-P <port> | منفذ الاستماع (الافتراضي: 9949) |
--no-secure | قبول أي عميل ECDHE بدون التحقق من HMAC |
--hmac <secret> | سر مشترك مسبق مخصص لـ HMAC (سداسي عشري أو نص) |
--log-passphrase <pass> | تشفير سجل الخادم باستخدام AES-256-GCM (PBKDF2 600 ألف تكرار) |
--logs | عارض سجل تفاعلي — بدون بدء الخادم |
--spa | تفعيل المصادقة المسبقة عبر SPA/بورت نوكينج |
--spa-mode <spa|knock> | spa = رمز UDP واحد، knock = تسلسل منافذ |
--spa-port <port> | منفذ UDP لمستمع SPA (الافتراضي: 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 | الموافقة التلقائية على جميع طلبات 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> | إنهاء جلسة بواسطة المعرف أو IP |
block <IP> | حظر IP بشكل دائم |
unblock <IP> | إلغاء حظر IP (دائم + مؤقت) |
blocklist | عرض عناوين IP المحظورة (دائمة ومؤقتة) |
log | عارض سجل تفاعلي (يدعم السجلات المشفرة) |
report | ملخص الحالة: مدة التشغيل، الجلسات، النقل |
banner | إعادة عرض لافتة بدء التشغيل |
clean | حذف ملفات سجل الخادم |
v | تبديل تسجيل DEBUG |
vv | تبديل تسجيل VERBOSE |
cd <dir> | تغيير دليل العمل المحلي للخادم |
E <cmd> | تنفيذ أمر عبر os.system محليًا |
<any command> | تنفيذ أمر محليًا على الخادم |
exit | إيقاف الخادم والخروج |
| الأمر | الوصف |
|---|
proxy | بدء خفي الوكيل TLS/HTTP (الوضع التلقائي) |
proxy --mode <mode> | الأوضاع: auto، tls، http، https، both، all |
proxy --stats | عرض إحصائيات الوكيل |
proxy gui | تشغيل واجهة الوكيل الرسومية (عملية منفصلة) |
stop-proxy | إيقاف خفي الوكيل |
stop-proxy-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 بايت لكل رسالة |
| مصادقة العميل | HMAC-SHA256 على سر مشترك أثناء المصافحة |
| سلامة الرسالة | HMAC-SHA256 لكل حزمة (يغطي seq + nonce + ciphertext) |
| مقاومة إعادة التشغيل | متعقب نافذة الرقم التسلسلي لكل جلسة |
| حماية تخفيض المستوى | يتم فرض الحد الأدنى لحجم مفتاح AES (256 بت) |
| تحديد معدل ضربات القلب | 3 ثوانٍ على الأقل بين ضربات القلب؛ يتم تتبع المخالفات |
| حماية فيضان الأوامر | محدد معدل؛ فصل تلقائي بعد العتبة |
| كشف الفحص | فحص الاتصال، أخذ البانر، عدادات فشل المصافحة |
| إدارة IP | قائمة حظر دائمة + حظر مؤقت (تلقائي ويدوي) |
| تشفير السجل | AES-256-GCM + PBKDF2-HMAC-SHA256 (600 ألف تكرار) |
| التشتيت الزمني للاستجابة | 10–50 مللي ثانية عشوائية لمقاومة هجمات التوقيت |
| المصادقة المسبقة | رمز SPA أو بورت نوكينج قبل قبول TCP |
| ملف السجل | المحتويات |
|---|
logs/BlackBerryC2_Server.log | سجل خادم دوار نص عادي (INFO+) |
logs/BlackBerryC2_enc.log | سجل خادم مشفر (إذا تم تعيين --log-passphrase) |
logs/sessions.jsonl | أحداث الجلسة: اتصال، قطع، بايتات |
logs/bt_transfer.jsonl | سجل نقل ملفات BerryTransfer |
logs/last_start.json | لقطة تكوين بدء التشغيل (المضيف، المنفذ، الرمز، معرف العملية) |