
फाइललेस x64 असेंबली C2 फ्रेमवर्क जिसमें द्वि-चैनल ICMP/DNS प्रोटोकॉल पिवोटिंग, प्रत्यक्ष syscall निष्पादन, और ptrace-आधारित प्रोसेस इंजेक्शन शामिल हैं — गुप्त कमांड निष्पादन और डेटा एक्सफिल्ट्रेशन के लिए।
________ ___ ___ ________ ________ _________ ________ ________
|\ ____\|\ \|\ \|\ __ \|\ ____\|\___ ___\ |\ ____\|\_____ \
\ \ \___| \ \ \\\ \ \ \|\ \ \ \___|\|___ \ \_| \ \ \___|\|____|\ \
\ \ \ __ \ \ __ \ \ \\\ \ \_____ \ \ \ \ \ \ \ ____\_\ \
\ \ \|\ \ \ \ \ \ \ \\\ \|____|\ \ \ \ \ \ \ \___|\____ \ \
\ \_______\ \__\ \__\ \_______\____\_\ \ \ \__\ \ \______\\_________\
\|_______|\|__|\|__|\|_______|\_________\ \|__| \|______\|_________|
\|_________|
फ़ाइललेस, शुद्ध x64 असेंबली C2 इम्प्लांट जो डुअल-चैनल (ICMP / DNS) आर्किटेक्चर का उपयोग करता है। ज़ीरो libc। ज़ीरो डिस्क। मानक EDR हुक्स के लिए अदृश्य।
⭐️ यदि आपको यह शोध उपयोगी लगता है, तो कृपया आगे के विकास को समर्थन देने के लिए इसे स्टार देने पर विचार करें
🚨 पूर्ण तकनीकी शोध और सोर्स कोड: यह रिपॉज़िटरी एक सारांश है। संपूर्ण आर्किटेक्चरल विवरण, W^X मेमोरी एवेज़न विवरण, और VTable कार्यान्वयन के लिए, आधिकारिक प्रोजेक्ट पेज देखें: ICMP-Ghost Technical Breakdown
Ghost-C2 एक कमांड-एंड-कंट्रोल फ्रेमवर्क है जो पूरी तरह से शुद्ध x64 Linux असेंबली में लिखा गया है, जिसमें कोई libc निर्भरता नहीं है। हर ऑपरेशन सीधे syscalls के माध्यम से होता है। कोई import tables नहीं हैं, कोई dynamic linker artifacts नहीं हैं, और कोई डिस्क राइट नहीं है।
मूल रूप से एक raw ICMP स्टील्थ चैनल के रूप में निर्मित, संस्करण 3.6.2 एक डुअल-चैनल प्रोटोकॉल पाइवटिंग आर्किटेक्चर प्रस्तुत करता है। ऑपरेटर इम्प्लांट के संचार चैनल को साइलेंट ICMP Raw Sockets और एवेसिव DNS UDP टनलिंग के बीच तुरंत स्विच कर सकते हैं। इम्प्लांट पूरी तरह से RAM में रहता है, एक कस्टम ptrace-आधारित लोडर के माध्यम से एक चालू सिस्टम प्रोसेस में इंजेक्ट किया जाता है।
यह प्रोजेक्ट यह पता लगाने के लिए बनाया गया था कि कर्नेल को छुए बिना यूज़र-स्पेस स्टील्थ और नेटवर्क स्टेट सिंक्रोनाइज़ेशन कितनी दूर तक जा सकते हैं।
┌─────────────────────────────────────────────────────────────┐
│ OPERATOR MACHINE │
│ │
│ ┌──────────────┐ │
│ │ client.asm │ ← Terminal UI: Prompt IP/Domain + Cmd │
│ │ (Operator │ Encrypts payload with Rolling XOR │
│ │ Console) │ State Sync: ICMP mode / DNS mode │
│ └──────┬───────┘ │
│ │ │
└──────────┼──────────────────────────────────────────────────┘
│ Channel 1: Raw ICMP (Stateless, Port-less)
│ Channel 2: DNS UDP Port 53 (Asymmetric)
┌──────────┼──────────────────────────────────────────────────┐
│ │ TARGET MACHINE │
│ ▼ │
│ ┌──────────────┐ ┌─────────────────────────────────┐ │
│ │ loader.asm │────▶│ sniff.asm (PIC) │ │
│ │ (Phantom │ │ Lives in RAM only │ │
│ │ Loader) │ │ inside host process │ │
│ └──────────────┘ └────────────────┬────────────────┘ │
│ │ │
│ 1. Scans /proc for target PID │ Listens ICMP/DNS │
│ 2. ptrace ATTACH │ Validates Auth │
│ 3. Force remote mmap (RW) │ Decrypts command │
│ 4. Inject PIC shellcode │ fork+execve │
│ 5. mprotect → RX │ memfd_create │
│ 6. Redirect RIP → shellcode │ Compress(DPCM-RLE)│
│ 7. ptrace DETACH → exits │ Encrypt & Frag. │
│ │ Sends Reply │
└─────────────────────────────────────────┼───────────────────┘
│ Encrypted Traffic
▼
[ client.asm ]
Receives & Validates
Decrypts Payload
Decompresses (Hybrid)
Reassembles & Prints
client.asm — ऑपरेटर कंसोलहमलावर-पक्ष का टर्मिनल। UI, डायनामिक मेमोरी प्रबंधन, और टारगेट स्टेट सिंक्रोनाइज़ेशन को संभालता है। पैकेट्स को ICMP Echo Requests या DNS TXT क्वेरीज़ के रूप में भेज सकता है। फ्रैगमेंटेड रिप्लाई सुनता है, बफर ओवरफ्लो को रोकता है, और आउटपुट को पुनर्निर्मित करता है। अनाथ सत्रों को बचाने के लिए एक "सक्रिय टारगेट पुनःकनेक्शन" मॉड्यूल शामिल है।
sniff.asm — PIC इम्प्लांट एजेंटटारगेट पर चलने वाला इम्प्लांट। एक raw बाइनरी के रूप में कंपाइल किया गया (पोज़ीशन-इंडिपेंडेंट, कोई ELF हेडर नहीं) ताकि इसे किसी भी मेमोरी एड्रेस में इंजेक्ट किया जा सके। यह ऑपरेटर पाइवट कमांड्स के आधार पर ICMP स्निफिंग और UDP DNS बाइंडिंग के बीच स्विच करने के लिए अपने आंतरिक VTable को डायनामिक रूप से अपडेट करता है।
Phantom_Loader/loader.asm — इंजेक्शन इंजनडिलीवरी तंत्र। /proc को स्कैन करता है, comm नाम से टारगेट प्रोसेस खोजता है, और मल्टी-स्टेज ptrace स्टेट मशीन का उपयोग करके उसमें PIC शेलकोड इंजेक्ट करता है। इंजेक्शन के बाद साफ-सुथरा बाहर निकलता है — कोई निशान नहीं छोड़ता।
Ghost-C2 v3.6.2 ऑपरेटर को एजेंट को खोए बिना नेटवर्क प्रोटोकॉल को हॉट-स्वैप करने की अनुमति देता है। विशिष्ट पाइवट कमांड भेजकर, मास्टर और एजेंट दोनों में VTables डायनामिक रूप से ओवरराइट हो जाते हैं:
!D (DNS पर पाइवट): दोनों नोड ICMP सॉकेट बंद कर देते हैं और UDP पोर्ट 53 संचार आरंभ करते हैं। कॉर्पोरेट DNS ट्रैफ़िक में घुलमिल कर सख्त Layer 3 फ़िल्टरिंग को बायपास करने के लिए आदर्श।!I (ICMP पर पाइवट): एजेंट UDP सॉकेट बंद कर देता है, पोर्ट बाइंडिंग समाप्त कर देता है, और साइलेंट Raw Socket स्निफिंग में वापस आ जाता है। "Phantom" स्टील्थ मोड के लिए एकदम सही।Ghost-C2 का डेटा ट्रांसमिशन इंजन x86-64 असेंबली में अत्यधिक अनुकूलित एक हाइब्रिड कंप्रेशन और एन्कोडिंग परत का उपयोग करता है।
हर आउटगोइंग ICMP पैकेट इस तरह संरचित होता है कि वह मानक Linux ping से अप्रभेद्य हो:
struct timeval की नकल करते हैं।iputils पैडिंग (0x10 से 0x1F) बुनियादी ह्यूरिस्टिक फ़ायरवॉल को बायपास करती है।दोनों दिशाओं में क्रमिक रूप से बदलती QWORD कुंजी के साथ एन्क्रिप्शन होता है। यह Shannon एंट्रॉपी को कम रखता है (AES के विपरीत, जो ~8.0 स्कोर करता है और DPI विसंगतियों को ट्रिगर करता है)। रोलिंग XOR ऐसी एंट्रॉपी उत्पन्न करता है जो प्राकृतिक रूप से नॉइज़ी डेटा जैसी दिखती है। कोई क्रिप्टोग्राफिक कॉन्स्टेंट नहीं, कोई S-box नहीं, YARA के मिलान के लिए कुछ भी नहीं।
इम्प्लांट उन सभी ICMP पैकेट्स को अनदेखा करता है जहाँ ID + SEQ ≠ 45,000। इम्प्लांट ऐसे पैकेट्स के साथ उत्तर देता है जहाँ ID + SEQ = 55,000। यह OS इको भ्रम को रोकता है और इंटरनेट स्कैनर्स या हनीपॉट्स को फ़िल्टर कर देता है।
memfd_create के माध्यम से फ़ाइललेस निष्पादनकमांड आउटपुट कभी डिस्क को स्पर्श नहीं करता। शेल आउटपुट एक अनाम RAM फ़ाइल (memfd_create) के माध्यम से कैप्चर किया जाता है, जिसे /proc/PID/fd में वैध शेयर्ड मेमोरी मैपिंग्स में घुलमिल करने के लिए [shm] नाम दिया जाता है।
RWX मेमोरी को प्रतिबंधित करने वाले आधुनिक कर्नेल मिटिगेशन को पराजित करता है। लोडर दो-चरणीय दृष्टिकोण का उपयोग करता है (RW के साथ Remote mmap → इंजेक्ट → RX के साथ Remote mprotect)। कोई भी पेज कभी भी एक साथ W और X नहीं होता।
स्टैटिक विश्लेषण और सरल grep-आधारित स्कैनर्स को पराजित करने के लिए सभी syscall नंबर दो निर्देशों में विभाजित किए गए हैं।
सख्त OPSEC बनाए रखने के लिए, Ghost-C2 एजेंट (sniff.asm) बाहरी कॉन्फ़िगरेशन का उपयोग नहीं करता है। आपको कंपाइल और इंजेक्ट करने से पहले अपने मास्टर C2 IP, पोर्ट, और डिकॉय DNS डोमेन को सीधे असेंबली कोड के अंदर परिभाषित करना होगा।
sniff.asm खोलें और .text सेगमेंट के बिल्कुल नीचे तक स्क्रॉल करें। (नोट: चूंकि एजेंट सख्ती से Position Independent Code (PIC) है, इसलिए कोई .data सेगमेंट नहीं है। सभी कॉन्फ़िगरेशन वेरिएबल्स इनलाइन संग्रहीत हैं)।
अपने मास्टर सर्वर से मेल खाने के लिए निम्नलिखित मानों को संशोधित करें:
db 127, 0, 0, 1 बदलें।dw 0xB414 (पोर्ट 5300) को Network Byte Order में अपने इच्छित पोर्ट में बदलें (जैसे, पोर्ट 53 के लिए 0x3500)।nasm -f bin sniff.asm -o shellcode.bin
python3 -c "data = open('shellcode.bin', 'rb').read(); lines = ['\tdb ' + ', '.join(f'0x{b:02x}' for b in data[i:i+12]) for i in range(0, len(data), 12)]; open('c2_payload.txt', 'w').write('\n'.join(lines))"
c2_payload.txt की सामग्री कॉपी करें।xor.py खोलें और raw_asm वेरिएबल की सामग्री को अपने कॉपी किए गए शेलकोड से बदलें।python3 xor.py चलाएँ और एन्क्रिप्टेड आउटपुट कॉपी करें।loader.asm खोलें।c2_payload: लेबल का पता लगाएँ।target db "cron", 10 संशोधित करके लक्षित इंजेक्शन प्रोसेस को बदलें)।nasm -f elf64 loader.asm -o loader.o
ld loader.o -o loader
रूट विशेषाधिकारों के साथ टारगेट मशीन पर निष्पादित करें (sudo ./loader)। एजेंट अब पूरी तरह से फ़ाइललेस चल रहा है।
मास्टर कंसोल को कंपाइल करने से पहले, आपको यह सुनिश्चित करना होगा कि उसके लिसनर और टारगेट प्रोफाइल आपके एजेंट के कॉन्फ़िगरेशन के साथ संरेखित हों। client.asm खोलें और .data सेक्शन क्षेत्र पर जाएँ।
master_bind_addr का पता लगाएँ। यह वह जगह है जहाँ मास्टर आने वाले DNS बीकन्स को सुनता है।
UDP पोर्ट: अपने एजेंट द्वारा भेजे जा रहे पोर्ट से मेल खाने के लिए dw 0xB414 बदलें।
नोट: यह Network Byte Order में होना चाहिए। पोर्ट 53 के लिए, 0x3500 का उपयोग करें।
target_addr का पता लगाएँ। इस पोर्ट का उपयोग तब किया जाता है जब आप DNS पाइवट (!D) करते हैं या रीकनेक्ट मॉड्यूल का उपयोग करते हैं।
पोर्ट संरेखण: एजेंट द्वारा सुने जा रहे UDP पोर्ट से मेल खाने के लिए dw 0xB414 बदलें। यदि ये पोर्ट मेल नहीं खाते हैं, तो (डेडलॉक) होगा क्योंकि मास्टर गलत शून्य में चिल्ला रहा होगा।
कॉन्फ़िगर हो जाने पर, मास्टर को असेंबल और लिंक करें:
nasm -f elf64 client.asm -o client.o
ld client.o -o client
प्रोटिप: अपने ऑपरेशन के लिए हमेशा एक "प्रोफाइल शीट" रखें। यदि आप sniff.asm में पोर्ट को 0x3500 (पोर्ट 53) में बदलते हैं, तो आपको ऑपरेशन शुरू होने से पहले client.asm में master_bind_addr और target_addr दोनों को अपडेट करना होगा।
नोट: ऑपरेटर कंसोल को raw sockets और UDP पोर्ट 53 को बाइंड करने के लिए रूट विशेषाधिकारों की आवश्यकता होती है।
स्थायी पहुँच सुनिश्चित करने और सत्र हानि को रोकने के लिए, अपने मास्टर कंसोल सत्र को समाप्त करने से पहले हमेशा एजेंट को ICMP मोड (!I) पर वापस पाइवट करें।
तर्क: ICMP Ghost-C2 का "गोल्डन चैनल" है — यह स्टेटलेस, निष्क्रिय है, और टारगेट IP के माध्यम से हमेशा पहुँच योग्य है।
जोखिम: DNS मोड डायनामिक UDP पोर्ट सिंक्रोनाइज़ेशन पर निर्भर करता है। यदि DNS मोड में रहते हुए मास्टर कंसोल बंद कर दिया जाता है, तो एजेंट UDP लिसनिंग स्थिति में "फँसा" रहता है। पुनः कनेक्शन स्थापित करने के लिए एजेंट के विशिष्ट एफेमरल पोर्ट को जानना आवश्यक होगा, जो मास्टर के पुनः आरंभ होने पर खो जाता है।
सक्रिय ट्रैफ़िक निरीक्षण के विरुद्ध नियंत्रित प्रयोगशाला वातावरण में परीक्षण किया गया:
| परीक्षण | परिणाम |
|---|---|
| Suricata v8.0.3 (Emerging Threats ruleset) | ✅ बायपास किया गया |
| Suricata v8.0.3 (कस्टम ICMP पेलोड नियम) | ✅ बायपास किया गया |
| DigitalOcean FRA1 गेटवे | ✅ 100% एक्सफ़िल्ट्रेशन सफलता |
| ~25KB एक्सफ़िल्ट्रेशन के दौरान उत्पन्न अलर्ट | 0 |
Ghost-C2 सीधे Linux कर्नेल के साथ इंटरैक्ट करता है:
mprotect निर्भरताओं को समाप्त करने के लिए डायनामिक ASLR पराजयPTY की अनुपस्थिति एक आर्किटेक्चरल निर्णय है, सीमा नहीं:
/dev/ptmx और ioctl कॉल की आवश्यकता होती है जिनकी EDRs बारीकी से निगरानी करते हैं।Ghost-C2 एक हाइपर-स्टील्थ कमांड निष्पादन और एक्सफ़िल्ट्रेशन इम्प्लांट है। इंटरैक्टिविटी सुविधा के लिए अदृश्यता का व्यापार करती है — इस प्रोजेक्ट ने अदृश्यता को चुना।
डिज़ाइन द्वारा, Pull Requests और Forks को सख्ती से अनदेखा किया जाता है। इस प्रोजेक्ट का आर्किटेक्चर सीधे लेखक द्वारा बनाए रखा जाता है। यदि आपको कोई बग, तर्क दोष मिलता है, या कोई फीचर सुझाव है, तो कृपया एक Issue खोलें। इसे वस्तुनिष्ठ और तकनीकी रखें।
Ghost-C2 जुनून, पसीने और शुद्ध x64 असेंबली के साथ बनाया गया है। यदि इस प्रोजेक्ट ने आपको लो-लेवल एवेज़न, प्रोटोकॉल मिमिक्री समझने में मदद की, या आपके रेड टीमिंग ऑपरेशन्स को सुचारू बनाया है, तो विकास को समर्थन देने पर विचार करें!
Ghost-C2 पूरी तरह से शैक्षिक उद्देश्यों, रिवर्स इंजीनियरिंग, और अधिकृत साइबर सुरक्षा शोध के लिए विकसित किया गया है।
संस्करण 3.6.1 से आगे, यह प्रोजेक्ट GNU Affero General Public License v3.0 (AGPLv3) के अंतर्गत लाइसेंस प्राप्त है। कोई भी इकाई जो नेटवर्क पर इस सॉफ़्टवेयर के साथ इंटरैक्ट करती है या इसे संशोधित करती है, उसे लाइसेंस द्वारा अनिवार्य अपना पूर्ण सोर्स कोड प्रकट करना होगा। व्यावसायिक शोषण या प्रोप्राइटरी/क्लोज्ड-सोर्स प्लेटफ़ॉर्म में एकीकरण सख्त वर्जित है।
Copyright (c) 2026 JM00NJ (commSync). All Rights Reserved.
लेखक इस टूल के कारण होने वाले किसी भी अवैध उपयोग या क्षति के लिए ज़िम्मेदार नहीं है। इसे अपने जोखिम पर उपयोग करें।
| Syscall | नंबर | उपयोग |
|---|
sys_socket | 41 | Raw ICMP / UDP सॉकेट निर्माण |
sys_recvfrom | 45 | निष्क्रिय ICMP/UDP पैकेट कैप्चर |
sys_sendto | 44 | ICMP/UDP रिप्लाई ट्रांसमिशन |
sys_bind | 49 | UDP DNS पोर्ट बाइंडिंग |
sys_memfd_create | 319 | आउटपुट के लिए अनाम RAM फ़ाइल |
sys_dup2 | 33 | stdout/stderr रीडायरेक्शन |
sys_execve | 59 | शेल कमांड निष्पादन |
sys_fork | 57 | प्रोसेस आइसोलेशन |
sys_ptrace | 101 | प्रोसेस इंजेक्शन + एंटी-डीबग |
sys_getdents64 | 217 | /proc डायरेक्टरी पार्सिंग |
sys_mmap | 9 | रिमोट मेमोरी आवंटन |
sys_mprotect | 10 | W^X अनुमति स्विच |