
एन्क्रिप्टेड कमांड-एंड-कंट्रोल (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उदाहरण:
# मूल स्टार्टअप (लॉग पासफ़्रेज़ के लिए संकेत)
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 मोड (डिफ़ॉल्ट): क्लाइंट SPA_UDP_PORT पर 32-बाइट HMAC-SHA256 टोकन भेजता है।
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 पूर्व-साझा रहस्य (हेक्स या स्ट्रिंग) |
--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 अनुरोधों को स्वचालित रूप से स्वीकार करें (कोई ऑपरेटर प्रॉम्प्ट नहीं) |
| कमांड | विवरण |
|---|
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 | पूर्ण प्रॉक्सी सहायता |
| कमांड | विवरण |
|---|
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-बिट) |
| हार्टबीट दर सीमा | हार्टबीट के बीच न्यूनतम 3s; उल्लंघन ट्रैक किए जाते हैं |
| कमांड फ्लड सुरक्षा | दर सीमक; सीमा के बाद स्वचालित डिस्कनेक्ट |
| स्कैन पहचान | कनेक्ट स्कैन, बैनर ग्रैब, हैंडशेक विफलता काउंटर |
| IP प्रबंधन | स्थायी ब्लॉकलिस्ट + अस्थायी बैन (स्वचालित + मैन्युअल) |
| लॉग एन्क्रिप्शन | AES-256-GCM + PBKDF2-HMAC-SHA256 (600k पुनरावृत्तियाँ) |
| प्रतिक्रिया जिटर | टाइमिंग हमलों का विरोध करने के लिए 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) |