
परिष्कृत एवेज़न क्षमताओं के साथ डायनेमिक शेलकोड लोडर
AsmLdr एक उन्नत शेलकोड लोडर है जिसे x64 असेम्बली भाषा में लागू किया गया है, जिसे विंडोज़ x64 वातावरण के लिए डिज़ाइन किया गया है। इसका प्राथमिक उद्देश्य एन्क्रिप्टेड पेलोड को निष्पादित करना है, साथ ही उन्नत एंटीवायरस सॉफ़्टवेयर, एंडपॉइंट डिटेक्शन एंड रिस्पॉन्स (EDR) सिस्टम, सैंडबॉक्स और डिबगर द्वारा पहचान को न्यूनतम करना है। यह रनटाइम पर मॉड्यूल, API और सिस्टम कॉल को डायनामिक रूप से रिज़ॉल्व करके इसे प्राप्त करता है, जिससे इम्पोर्ट टेबल या हार्डकोडेड एड्रेस जैसी स्टैटिक निर्भरताएँ समाप्त हो जाती हैं। यह दृष्टिकोण कम पहचान प्रोफ़ाइल वाला एक कॉम्पैक्ट बाइनरी बनाता है।
लोडर शेलकोड को किसी मौजूदा DLL के एक्ज़ीक्यूटेबल सेक्शन में रखने के लिए मॉड्यूल स्टॉम्पिंग का उपयोग करता है, पेलोड को मेमोरी में डिक्रिप्ट करता है, और इसे स्टैक स्पूफिंग के साथ इनडायरेक्ट सिस्कॉल के माध्यम से चलाता है। इसमें एंटी-डिबगिंग उपाय, सामान्य एप्लिकेशन पैटर्न की नकल करने के लिए टाइमिंग समायोजन, और विंडोज़ इवेंट ट्रेसिंग (ETW) को बायपास करना जैसी एवेज़न सुविधाएँ शामिल हैं। ये क्षमताएँ इसे रेड टीमिंग और सुरक्षा अनुसंधान के लिए एक उपकरण बनाती हैं। नैतिक अस्वीकरण: यह प्रोजेक्ट केवल शैक्षिक और अनुसंधान उद्देश्यों के लिए है। यह PEB ट्रैवर्सल, एक्सपोर्ट टेबल पार्सिंग, सिस्कॉल अनहुकिंग और मेमोरी प्रोटेक्शन हेरफेर सहित लो-लेवल विंडोज़ इंटरनल्स को प्रदर्शित करता है। नियंत्रित वातावरण (जैसे, VM) में उपयोग करें। दुर्भावनापूर्ण गतिविधियों के लिए दुरुपयोग अवैध और अनैतिक है। लेखक किसी भी दुरुपयोग के लिए दायित्व को अस्वीकार करता है।
AsmLdr गुप्त पेलोड निष्पादन और एवेज़न के लिए कई सुविधाएँ प्रदान करता है। प्रत्येक का वर्णन नीचे किया गया है, जो इसके कार्य और लाभों पर केंद्रित है:
PEB ट्रैवर्सल के माध्यम से मॉड्यूल रिज़ॉल्यूशन: लोडर PEB की मॉड्यूल श्रृंखला का अनुसरण करके चल रहे मॉड्यूल की सूची बनाता है। यह वांछित DLL का बेस एड्रेस खोजने और लौटाने के लिए यूनिकोड तुलनाओं के माध्यम से मॉड्यूल नामों का मिलान करता है। यह विधि मानक लोडिंग फ़ंक्शन को बायपास करती है, जिससे इंटरसेप्शन का जोखिम कम हो जाता है।
एक्सपोर्ट टेबल से API रिज़ॉल्यूशन: लोडर फ़ंक्शन का पता लगाने के लिए DLL की एक्सपोर्ट डायरेक्ट्री की जाँच करता है। यह समान फ़ंक्शन नामों के बीच भ्रम को रोकने के लिए हैशिंग या वैकल्पिक रूप से लंबाई सत्यापन के साथ सीधे नाम जाँच का उपयोग करके API का मिलान करता है। यह पहले से लिंक किए गए इम्पोर्ट पर भरोसा किए बिना फ़ंक्शन का एड्रेस प्रदान करता है।
एंटी-डिबगिंग सुरक्षा: लोडर कई जाँचों के माध्यम से डिबगिंग का पता लगाता है और यदि कोई भी विश्लेषण का संकेत देती है तो सफाई से बाहर निकल जाता है।
विश्लेषण प्रतिरोध के लिए जंक कोड जनरेशन: लोडर डिसएसेम्बली में भ्रामक पैटर्न बनाने के लिए गैर-आवश्यक संचालन के अनुक्रम चलाता है, जिससे रनटाइम दक्षता को प्रभावित किए बिना स्टैटिक विश्लेषण कठिन हो जाता है।
टाइमिंग और व्यवहारिक सामान्यीकरण: लोडर सामान्य एप्लिकेशन पैटर्न से मेल खाने वाले सिम्युलेटेड वर्कलोड चलाने के लिए सिस्टम गति को मापता है, जिससे यह वैध प्रक्रियाओं के साथ घुलने-मिलने में मदद मिलती है। यह निष्पादन समय को सामान्य करने के लिए मुख्य क्रियाओं से पहले संक्षेप में रुकता भी है।
ETW लॉगिंग बायपास: लोडर इवेंट लॉगिंग कॉल को इंटरसेप्ट और स्किप करने के लिए ETW लॉगिंग API पर हार्डवेयर ब्रेकपॉइंट सेट करता है, जिससे सिस्टम लॉग में निशान रोके जाते हैं।
मल्टी-लेयर अनहुकिंग: लोडर फ़ंक्शन को सीधे जाँच करके, हुक होने पर आस-पास के कोड को स्कैन करके, या संख्या का अनुमान लगाने के लिए ntdll में पैटर्न गिनकर वैध सिस्टम कॉल नंबर (SSN) डायनामिक रूप से प्राप्त करता है, और ज्ञात अपवादों के लिए समायोजन करता है।
उपयोग की गई तकनीकें:
इनडायरेक्ट सिस्कॉल और स्टैक स्पूफिंग: लोडर सिस्टम कॉल के लिए ntdll में स्वच्छ कोड पथ ढूंढता है और ट्रेसिंग से बचने के लिए कॉल स्टैक को छिपाते हुए 32 ऑपरेशन तक की श्रृंखला बनाता है। यह पूरा होने के बाद मूल स्थिति को पुनर्स्थापित करता है।
DLL होलोइंग: लोडर एक लक्षित DLL लाता है, अस्थायी रूप से उसके कोड सेक्शन में लिखने की अनुमति देता है, एन्क्रिप्टेड शेलकोड डालता है, उसे डिक्रिप्ट करता है, और सुरक्षा को केवल-निष्पादन पर रीसेट करता है।
इन-मेमोरी डिक्रिप्शन: लोडर इंजेक्ट की गई मेमोरी में सीधे एक दोहराए जाने वाले कुंजी पैटर्न को लागू करके शेलकोड को डिक्रिप्ट करता है।
यूटिलिटी फ़ंक्शन: लोडर में स्ट्रिंग लंबाई मापने, स्ट्रिंग की तुलना करने (मानक या वाइड कैरेक्टर), लुकअप के लिए नाम हैश करने, मेमोरी पॉइंटर सत्यापित करने और टाइमिंग नियंत्रण के लिए टाइमस्टैम्प पढ़ने के उपकरण शामिल हैं।
Python स्क्रिप्ट generate.py कच्ची शेलकोड फ़ाइल को एन्क्रिप्ट करती है। यह संरेखण के लिए पैडिंग जोड़ती है, एक कुंजी बनाती है या उपयोग करती है, और प्रत्येक बाइट को दोहराए जाने वाले चक्र में कुंजी के साथ XOR करती है। आउटपुट फ़ाइल shellcode.asm आकार, एन्क्रिप्टेड डेटा और कुंजी के लिए ऐरे, और रनटाइम पर डेटा लोड करने के लिए एक रूटीन परिभाषित करती है। लोडर की डिक्रिप्शन मेमोरी में इस प्रक्रिया से मेल खाती है। ध्यान दें कि लंबी कुंजियाँ प्रतीक्षा समय बढ़ाती हैं।
एक कच्चा शेलकोड बाइनरी (जैसे, payload.bin) तैयार करें। shellcode.asm उत्पन्न करने के लिए python generate.py payload.bin [optional_key] चलाएँ।
वैकल्पिक DLL जैसे urlmon.dll के लिए szDllName (evader.asm में यूनिकोड हेक्स शब्द) को संशोधित करें। str_hash लॉजिक का उपयोग करके नए API के लिए DJB2 हैश की पुनर्गणना करें। डिबगिंग के लिए मैक्रोज़ (जैसे, KILL_DEBUGGERS) को कमेंट करें।
AsmLdr विंडोज़ 10 और 11 x64 के लिए अनुकूलित है; कर्नेल अपडेट ऑफसेट (जैसे, PEB+0x18) या NTDLL पैटर्न (जैसे, 0xb8d18b4c) को बदल सकते हैं, जिसके लिए सत्यापन आवश्यक है। त्रुटि हैंडलिंग NTSTATUS रिटर्न (जैसे, <0 विफलता) पर निर्भर करती है, जिसमें कोई अंतर्निहित लॉगिंग नहीं है। जंक और नकली ऑपरेशन CPU चक्र की खपत करते हैं, जो सीमित सिस्टम पर संसाधन मॉनिटर को सचेत कर सकते हैं। केवल नियंत्रित वातावरण में उपयोग करें।