
एक गतिशील अनपैकिंग उपकरण
Shinigami एक प्रायोगिक उपकरण है जिसे प्रोसेस हॉलोइंग या सामान्य पैकर रूटीन के माध्यम से इंजेक्ट किए गए मैलवेयर इम्प्लांट्स का पता लगाने और अनपैक करने के लिए डिज़ाइन किया गया है।
यह उपकरण प्रोसेस हॉलोइंग से संबंधित NT फ़ंक्शनों को हुक करके और नई निष्पादन योग्य मेमोरी पेजों को पेज गार्ड बिट के साथ चिह्नित करके काम करता है। यह तकनीक Shinigami को अप्रत्यक्ष प्रवाह परिवर्तनों का पता लगाने की अनुमति देती है, जो आमतौर पर शेलकोड या अनपैक किए गए कोड के कारण होते हैं, जो अक्सर मैलवेयर का संकेत होते हैं। Shinigami लक्षित निष्पादन योग्य को निलंबित अवस्था में बनाता है और "Ichigo" नामक एक DLL लाइब्रेरी इंजेक्ट करता है। यह लाइब्रेरी स्वचालित रूप से इम्प्लांट का पता लगाने और निकालने के लिए हर आवश्यक फ़ंक्शन को हुक करती है। एक बार आर्टिफैक्ट पूरी तरह से निकाल लिया जाता है, तो उपकरण प्रक्रिया को समाप्त कर देता है।
Shinigami की प्रभावशीलता उस विशेष मैलवेयर के आधार पर भिन्न हो सकती है जिसे वह लक्षित कर रहा है। हालाँकि, यह किसी भी मैलवेयर विश्लेषण टूलकिट के लिए एक मूल्यवान अतिरिक्त है और प्रोसेस हॉलोइंग या सामान्य पैकर रूटीन का उपयोग करने वाले मैलवेयर का पता लगाने और विश्लेषण करने में उपयोगी साबित हो सकता है।
महत्वपूर्ण: यह एक डायनामिक अनपैकिंग उपकरण है और इसे आपके व्यक्तिगत मशीन या स्टैटिक विश्लेषण प्रयोगशाला में नहीं चलाया जाना चाहिए
प्रोसेस हॉलोइंग का उपयोग करके इंजेक्ट किए गए इम्प्लांट्स को निकालने के लिए Shinigami की मुख्य विधि में दो NT फ़ंक्शनों को हुक करना शामिल है: NtResumeThread और NtWriteVirtualMemory। यह इस प्रकार काम करता है:
NtResumeThread हुक
NtWriteVirtualMemory हुक
--stop-at-write फ्लैग पास किया गया हो।Shinigami का जेनेरिक अनपैकर मॉड्यूल नई आवंटित मेमोरी क्षेत्रों को PAGE_GUARD बिट के साथ चिह्नित करता है, यह बिट तब भी लागू करता है जब किसी मौजूदा मेमोरी क्षेत्र की सुरक्षा को किसी निष्पादन योग्य चीज़ से बदल दिया गया हो। गार्ड पेजों का उपयोग करके, यह ट्रैक कर सकता है कि किस मेमोरी क्षेत्र का उपयोग कुछ शेलकोड या PE छवियों को आवंटित करने के लिए किया जाने वाला है।
पहचाने गए प्रत्येक शेलकोड के लिए, Shinigami कच्चे शेलकोड को डिस्क पर सहेजता है। यह PE फ़ाइलों को खोजने के लिए उस मेमोरी क्षेत्र को भी स्कैन करता है और उन्हें भी सहेजता है। Shinigami प्रत्येक अलग शेलकोड निष्पादन को एक नए चरण के रूप में मानता है, इसलिए अंत तक, आपकी कार्यशील निर्देशिका में filename_shellcode_STAGENUM.bin or .exe नामक फ़ाइलें होंगी।
उपकरण के पास कुछ विकल्प हैं:
Usage: Shinigami [--help] [--version] [--output VAR] [--stop-at-write] [--verbose] [--only-executables] [--exported VAR] program_name
Positional arguments:
program_name Name of the program to execute
Optional arguments:
-h, --help shows help message and exits
-v, --version prints version information and exits
-o, --output Directory to dump artefacts
--stop-at-write Unhollow: Stop the execution when the PE file is being to be written
--verbose Display a verbose output
-p, --only-executables Only extract PE artefacts
-e, --exported Exported Function: Choose a exported function to execute if the target is a DLL (rundll will be used)
कुछ महत्वपूर्ण विकल्प हैं:
-o, --output: निकाले गए आर्टिफैक्ट्स को डंप करने के लिए निर्देशिका निर्दिष्ट करता है। डिफ़ॉल्ट रूप से, निकाले गए आर्टिफैक्ट्स को वर्तमान कार्यशील निर्देशिका में output नामक निर्देशिका में सहेजा जाएगा। आप इसके पथ को तर्क के रूप में पास करके एक अलग निर्देशिका निर्दिष्ट कर सकते हैं।
--stop-at-write: यह तर्क एक हॉलो किए गए प्रक्रिया को अनपैक करने के दौरान उपयोग किया जाता है। जब Shinigami पता लगाता है कि PE फ़ाइल हॉलो किए गए प्रक्रिया में लिखी जा रही है, तो यह निष्पादन रोक देगा और निकाली गई PE फ़ाइल को सहेज लेगा। यह विकल्प उपयोगी हो सकता है यदि आप पूरी हॉलो किए गए प्रक्रिया को निष्पादित करने से बचना चाहते हैं और केवल अनपैक किए गए कोड को निकालने की आवश्यकता है।
--verbose: एक विस्तृत आउटपुट प्रदर्शित करता है। यह डिबगिंग या Shinigami की आंतरिक कार्यप्रणाली को समझने के लिए उपयोगी हो सकता है।
![]() |
|---|
| Dridex के विरुद्ध परीक्षण |
एक्सट्रैक्शन पूरा होने के बाद, प्रक्रिया को समाप्त कर दिया जाता है और आपके पास (मुझे उम्मीद है) निकाली गई PE होगी:
![]() |
|---|
| डंप किया गया इम्प्लांट |
पहचाना गया इम्प्लांट पहचान विधियों अनुभाग में वर्णित प्रारूप के अनुसार डंप किया जाएगा
![]() |
|---|
| यहाँ वर्णित एक रैंडम लोडर को अनपैक करना |
उपरोक्त उदाहरण में, Shinigami ने स्वचालित रूप से एक जेनेरिक लोडर के व्यवहार का पता लगाया और उसके भीतर सभी निष्पादित शेलकोड और छवियों को निकाल लिया, बिना अनपैकिंग रूटीन को सक्षम या अक्षम करने के लिए किसी विशेष स्विच की आवश्यकता के। यह संभव था क्योंकि Shinigami Unhollow मॉड्यूल के साथ कुछ फ़ंक्शन साझा करता है, Gancho लाइब्रेरी द्वारा प्रदान किए गए साझा हुक का उपयोग करके।
![]() |
|---|
| Emotet DLL को अनपैक करना |
Shinigami के पास DLL समर्थन और अलग किए गए DOS हेडर का उपयोग करके इंजेक्ट किए गए बाइनरी को पुनर्निर्मित करने की क्षमता भी है। विशेष रूप से, Emotet जैसे मैलवेयर नमूने इन-मेमोरी PE स्कैनर से बचने के लिए इस तकनीक का उपयोग करते हैं। Shinigami ऐसे लापता हिस्सों (DOS हेडर) का पता लगाता है और उन्हें पुनर्निर्मित करने के लिए ह्यूरिस्टिक्स का उपयोग करता है।
अपना पसंदीदा संस्करण Release पृष्ठ से प्राप्त करें।
यह अद्भुत होगा यदि आप इस परियोजना की मदद करते हैं, इसलिए यदि आप चाहें तो यहाँ निर्भरताएँ और चरण हैं
कृपया किसी भी बदलाव के लिए एक issue या pull request खोलें जो आप करना चाहते हैं।
यह बढ़िया मस्कट छवि Bleach से प्रेरित थी और Dall-E द्वारा उत्पन्न की गई थी।