
एन्क्रिप्टेड कमांड-एंड-कंट्रोल (C2) अनुसंधान ढांचा साइबर सुरक्षा शिक्षा, रेड टीम लैब्स, और सुरक्षित क्लाइंट-सर्वर संचार प्रयोगों के लिए।
BlackBerryC2 एक एन्क्रिप्टेड रिमोट एडमिनिस्ट्रेशन और C2 फ्रेमवर्क है, जिसे विशेष रूप से शैक्षिक उपयोग, सुरक्षा अनुसंधान और नियंत्रित प्रयोगशाला वातावरण के लिए डिज़ाइन किया गया है।

यह प्रोजेक्ट दर्शाता है कि कैसे एक कस्टम कमांड-एंड-कंट्रोल सर्वर बनाया जाए जिसमें एप्लिकेशन-लेयर क्रिप्टोग्राफी, सत्र प्रबंधन और सुरक्षित क्लाइंट संचार हो, बिना बाहरी TLS स्टैक पर निर्भर हुए।
यह प्रोजेक्ट मैलवेर नहीं है और अनधिकृत पहुंच के लिए नहीं है।
BlackBerryC2:
केवल उन सिस्टमों और नेटवर्कों पर उपयोग करें जिनके आप मालिक हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट अधिकार है।
Python निर्भरताएँ:
pip install cryptography prompt_toolkit zstandard
zstandardवैकल्पिक है लेकिन 1 GB से बड़े ट्रांसफर के लिए अनुशंसित है।
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) के विरुद्ध HMAC को सत्यापित करता है।प्रत्येक सत्र बनाए रखता है:
सभी क्रिप्टोग्राफिक कुंजियाँ रनटाइम पर उत्पन्न होती हैं और पुनरारंभ पर कभी पुन: उपयोग नहीं की जाती हैं (जब तक --persistente सेट न हो)।
python3 BlackBerryC2_server.py
डिफ़ॉल्ट कॉन्फ़िगरेशन:
0.0.0.09949| फ्लैग | विवरण |
|---|---|
-p / --persistente | ecdhe-cert/ से स्थायी ECDHE कुंजियों का उपयोग करें (पासफ़्रेज़ के लिए संकेत) |
-v | डीबग लॉगिंग |
-vv | वर्बोज़ (शिथिल) लॉगिंग |
-H <host> | सुनने वाला होस्ट (डिफ़ॉल्ट: 0.0.0.0) |
-P <port> | सुनने वाला पोर्ट (डिफ़ॉल्ट: 9949) |
--no-secure | HMAC सत्यापन के बिना किसी भी ECDHE क्लाइंट को स्वीकार करें |
--hmac <secret> | कस्टम HMAC पूर्व-साझा रहस्य (हेक्स या स्ट्रिंग) |
--log-passphrase <pass> | सर्वर लॉग को AES-256-GCM (PBKDF2 600k पुनरावृत्ति) के साथ एन्क्रिप्ट करें |
--logs | इंटरैक्टिव लॉग व्यूअर — कोई सर्वर प्रारंभ नहीं |
--spa | SPA/पोर्ट-नॉकिंग प्री-प्रमाणीकरण सक्षम करें |
--spa-mode <spa|knock> | spa = एकल UDP टोकन, knock = पोर्ट अनुक्रम |
--spa-port <port> | SPA श्रोता के लिए UDP पोर्ट (डिफ़ॉल्ट: 7331) |
--knock-seq <ports> | नॉक मोड के लिए पोर्ट अनुक्रम (डिफ़ॉल्ट: 7001,7002,7003) |
--knock-timeout <सेकंड> | नॉक अनुक्रम को पूरा करने के लिए सेकंड (डिफ़ॉल्ट: 10) |
--spa-ttl <सेकंड> | एक अधिकृत IP वैध रहने के लिए सेकंड (डिफ़ॉल्ट: 60) |
--berrytransfer | BerryTransfer मोड: केवल फ़ाइल-ट्रांसफर, कोई शेल नहीं |
--transfer-root <dir> | BerryTransfer के लिए रूट डायरेक्टरी (डिफ़ॉल्ट: ./berry_transfers) |
--auto-confirm | BerryTransfer में सभी GET अनुरोधों को स्वचालित रूप से स्वीकार करें (कोई ऑपरेटर प्रॉम्प्ट नहीं) |
उदाहरण:
# मूल स्टार्टअप (लॉग पासफ़्रेज़ के लिए संकेत)
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
| कमांड | विवरण |
|---|---|
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 के माध्यम से स्थानीय रूप से कमांड निष्पादित करें |
<any command> | सर्वर पर स्थानीय रूप से निष्पादित करें |
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 | पूर्ण प्रॉक्सी सहायता |
select <ID> के अंदर)| कमांड | विवरण |
|---|---|
help | सत्र सहायता दिखाएँ |
exit | मुख्य शेल पर लौटें |
!<cmd> | सर्वर पर स्थानीय रूप से कमांड निष्पादित करें |
<cmd> | रिमोट क्लाइंट पर कमांड निष्पादित करें |
cmd1 && cmd2 | श्रृंखला: cmd2 तभी चलाएँ जब cmd1 सफल हो |
cmd1 || cmd2 | श्रृंखला: cmd2 तभी चलाएँ जब cmd1 विफल हो |
cmd1 ; cmd2 | श्रृंखला: हमेशा cmd2 चलाएँ |