
x86, x64, या AMD64+x86 पोजीशन-इंडिपेंडेंट शेलकोड उत्पन्न करता है जो .NET असेंब्लियों, PE फ़ाइलों, और अन्य Windows पेलोड्स को मेमोरी से लोड करता है और उन्हें पैरामीटर के साथ चलाता है।

वर्तमान संस्करण: v1.1
Donut एक स्थिति-स्वतंत्र कोड है जो VBScript, JScript, EXE, DLL फ़ाइलों और dotNET असेंबलीज़ का इन-मेमोरी निष्पादन सक्षम बनाता है। Donut द्वारा बनाया गया मॉड्यूल या तो HTTP सर्वर से स्टेज किया जा सकता है या लोडर के अंदर ही एम्बेड किया जा सकता है। मॉड्यूल वैकल्पिक रूप से Chaskey ब्लॉक सिफर और 128-बिट यादृच्छिक रूप से उत्पन्न कुंजी का उपयोग करके एन्क्रिप्ट किया जाता है। फ़ाइल को मेमोरी में लोड और निष्पादित करने के बाद, मूल संदर्भ को मिटा दिया जाता है ताकि मेमोरी स्कैनर को धोखा दिया जा सके। जनरेटर और लोडर निम्नलिखित सुविधाओं का समर्थन करते हैं:
लिनक्स और विंडोज दोनों के लिए डायनामिक और स्टैटिक लाइब्रेरीज़ उपलब्ध हैं जिन्हें आप अपनी परियोजनाओं में एकीकृत कर सकते हैं। एक पायथन मॉड्यूल भी है जिसके बारे में आप पायथन एक्सटेंशन के निर्माण और उपयोग में अधिक पढ़ सकते हैं।
Donut में प्रत्येक समर्थित फ़ाइल प्रकार के लिए अलग-अलग लोडर होते हैं। dotNET EXE/DLL असेंबली के लिए, Donut कॉमन लैंग्वेज रनटाइम (CLR) को लोड करने के लिए अनमैनेज्ड CLR होस्टिंग API का उपयोग करता है। एक बार CLR होस्ट प्रक्रिया में लोड हो जाने के बाद, एक नया एप्लीकेशन डोमेन बनाया जाता है ताकि डिस्पोज़ेबल AppDomains में असेंबली को चलाया जा सके। जब AppDomain तैयार हो जाता है, तो dotNET असेंबली को AppDomain.Load_3 विधि के माध्यम से लोड किया जाता है। अंत में, EXE के लिए एंट्री पॉइंट या DLL के लिए उपयोगकर्ता द्वारा निर्दिष्ट सार्वजनिक विधि को किसी भी अतिरिक्त पैरामीटर के साथ आमंत्रित किया जाता है। अनमैनेज्ड CLR होस्टिंग API के दस्तावेज़ीकरण के लिए MSDN देखें। CLR होस्ट के एक स्टैंडअलोन उदाहरण के लिए, यहाँ कोड देखें।
VBScript और JScript फ़ाइलों को IActiveScript इंटरफ़ेस का उपयोग करके निष्पादित किया जाता है। विंडोज स्क्रिप्ट होस्ट (wscript/cscript) द्वारा प्रदान की गई कुछ विधियों के लिए न्यूनतम समर्थन भी है। एक स्टैंडअलोन उदाहरण के लिए, यहाँ कोड देखें। अधिक विस्तृत विवरण के लिए, पढ़ें: जावास्क्रिप्ट, VBScript, JScript और XSL का इन-मेमोरी निष्पादन
अनमैनेज्ड या देशी EXE/DLL फ़ाइलों को विलंबित आयात, TLS और कमांड लाइन को पैच करने के समर्थन के साथ एक कस्टम PE लोडर का उपयोग करके निष्पादित किया जाता है। केवल वे फ़ाइलें समर्थित हैं जिनमें रिलोकेशन जानकारी होती है। अधिक जानकारी के लिए DLL का इन-मेमोरी निष्पादन पढ़ें।
लोडर मेमोरी में निष्पादित दुर्भावनापूर्ण फ़ाइलों का पता लगाने से बचने में मदद करने के लिए AMSI और WLDP को अक्षम कर सकता है। अधिक जानकारी के लिए, रेड टीम्स .NET डायनामिक कोड के लिए AMSI और WLDP को कैसे बायपास करती हैं पढ़ें। यह aPLib या RtlDecompressBuffer API का उपयोग करके मेमोरी में फ़ाइलों के डीकंप्रेसन का भी समर्थन करता है। अधिक जानकारी के लिए डेटा संपीड़न पढ़ें।
v1.0 के अनुसार, ETW को भी बायपास किया गया है। AMSI/WLDP की तरह, यह एक मॉड्यूलर सिस्टम है जो आपको डिफ़ॉल्ट बायपास को अपने स्वयं के साथ बदलने की अनुमति देता है। डिफ़ॉल्ट बायपास XPN के शोध से लिया गया है। अधिक जानकारी के लिए अपने .NET को छिपाना - ETW पढ़ें।
डिफ़ॉल्ट रूप से, लोडर अनमैनेज्ड PE के PE हेडर को अधिलेखित कर देगा (आधार पते से `IMAGE_OPTIONAL_HEADER.SizeOfHeaders` तक)। यदि कोई डिकॉय मॉड्यूल (मॉड्यूल ओवरलोडिंग) का उपयोग नहीं किया जाता है, तो PE हेडर शून्य कर दिए जाएंगे। यदि डिकॉय मॉड्यूल का उपयोग किया जाता है, तो डिकॉय मॉड्यूल के PE हेडर का उपयोग पेलोड मॉड्यूल के हेडर को अधिलेखित करने के लिए किया जाएगा। यह मेमोरी में मॉड्यूल के PE हेडर की तुलना डिस्क पर उनकी फ़ाइल बैकिंग से करके पता लगाने को रोकने के लिए है। उपयोगकर्ता अनुरोध कर सकता है कि सभी PE हेडर अपनी मूल स्थिति में संरक्षित रहें। यह उन परिदृश्यों के लिए सहायक है जहाँ पेलोड मॉड्यूल को अपने PE हेडर तक पहुँचने की आवश्यकता होती है, जैसे कि एम्बेडेड PE संसाधनों को देखते समय।
जनरेटर का उपयोग करके विस्तृत वॉकथ्रू और Donut ट्रेडक्राफ्ट को कैसे प्रभावित करता है, इसके लिए Donut - .NET असेंबली को शेलकोड के रूप में इंजेक्ट करना पढ़ें। लोडर के बारे में अधिक जानकारी के लिए, मेमोरी से .NET असेंबली लोड करना पढ़ें।
जो लोग आंतरिक कार्यप्रणाली के बारे में अधिक जानना चाहते हैं, वे डेवलपर नोट्स देखें।
बिल्ड दो प्रकार के होते हैं। यदि आप Donut को डीबग करना चाहते हैं, तो कृपया यहाँ दस्तावेज़ीकरण देखें। यदि नहीं, तो रिलीज़ बिल्ड के लिए पढ़ना जारी रखें।
विंडोज कमांड प्रॉम्प्ट या लिनक्स टर्मिनल से, रिपॉजिटरी को क्लोन करें।
git clone http://github.com/thewover/donut.git