
बाइनरी निंजा प्लगइन जो अस्पष्ट कोड और अन्य रोचक कोड निर्माणों की पहचान करता है
लेखक: टिम ब्लाज़ीटको
ऑटोमैटिक रूप से ओबफस्केटेड कोड और अन्य दिलचस्प कोड निर्माणों का पता लगाएं
ओबफस्केशन डिटेक्शन एक बाइनरी निंजा प्लगइन है जो बाइनरीज़ में ओबफस्केटेड कोड और दिलचस्प कोड निर्माणों (जैसे, स्टेट मशीन) का पता लगाने के लिए है। बाइनरी दिए जाने पर, प्लगइन उन कोड स्थानों की पहचान करके विश्लेषण को आसान बनाता है जो रिवर्स इंजीनियरिंग के दौरान करीब से देखने लायक हो सकते हैं।
विभिन्न ह्युरिस्टिक्स के आधार पर, प्लगइन उन फंक्शनों को इंगित करता है जिनमें जटिल या असामान्य कोड निर्माण होते हैं। ऐसे कोड निर्माण निम्नलिखित को लागू कर सकते हैं:
निम्नलिखित ब्लॉग पोस्ट अंतर्निहित ह्युरिस्टिक्स के बारे में अधिक जानकारी प्रदान करते हैं और उनके उपयोग के मामलों को प्रदर्शित करते हैं:
कुछ उदाहरण उपयोग के मामले उदाहरण में पाए जा सकते हैं। इसके अलावा, REcon वार्ता "कोड डिटेक्शन रणनीतियों का उपयोग करके बाइनरीज़ में रहस्यों को उजागर करना" कुछ उपयोग के मामलों को प्रदर्शित करती है। स्लाइड्स यहाँ पाई जा सकती हैं; रिकॉर्डिंग यहाँ पाई जा सकती है।
बाइनरी निंजा के प्लगइन प्रबंधक का उपयोग करके उपकरण स्थापित किया जा सकता है।
हेडलेस संस्करण के लिए, इन चरणों का पालन करें:
git clone https://github.com/mrphrazer/obfuscation_detection.git
cd obfuscation_detection
# install obfuscation_detection
pip install .
प्लगइन का उपयोग उपयोगकर्ता इंटरफ़ेस और हेडलेस मोड में किया जा सकता है।
व्यक्तिगत ह्युरिस्टिक्स चलाने के लिए Plugins -> Obfuscation Detection चुनें, या व्यक्तिगत उपयोगिता डिटेक्शन चलाने के लिए Plugins -> Obfuscation Detection -> Utils चुनें। Plugins -> Obfuscation Detection -> All कमांड सभी ह्युरिस्टिक्स और सभी उपयोगिताओं को एक साथ चलाता है।
परिणाम लॉग विंडो में प्रदर्शित होते हैं:
पहचाने गए फंक्शन पतों पर क्लिक करके, बाइनरी निंजा चयनित फंक्शन पर नेविगेट करता है।
हेडलेस मोड में प्लगइन का उपयोग करने के लिए, scripts/detect_obfuscation.py चलाएं:
$ python3 scripts/detect_obfuscation.py <binary>
यह सभी ह्युरिस्टिक्स और सभी उपयोगिताओं को चलाता है। मशीन-पठनीय आउटपुट के लिए, --json पास करें:
$ python3 scripts/detect_obfuscation.py --json <binary>
JSON पेलोड में सभी परिणाम detections कुंजी के अंतर्गत होते हैं। प्रत्येक डिटेक्शन में स्वचालन के लिए एक स्थिर id और मानव-पठनीय name होता है। प्रत्येक टैग किए गए फंक्शन खोज में बाइनरी निंजा प्लगइन द्वारा उपयोग किया जाने वाला टैग प्रकार और विवरण शामिल होता है।
हेडलेस मोड में केवल स्टेट मशीन ह्युरिस्टिक चलाने के लिए, scripts/detect_state_machine.py का उपयोग करें:
$ python3 scripts/detect_state_machine.py [--json] <binary>
प्लगइन विभिन्न कोड निर्माणों का पता लगाने के लिए विभिन्न डिटेक्शन ह्युरिस्टिक्स लागू करता है। नीचे, हम व्यक्तिगत ह्युरिस्टिक्स का संक्षिप्त वर्णन करते हैं और उनके उपयोग की व्याख्या करते हैं।
बड़े बेसिक ब्लॉक ह्युरिस्टिक प्रति बेसिक ब्लॉक निर्देशों की सबसे बड़ी औसत संख्या वाले शीर्ष 10% फंक्शनों की पहचान करता है। यह पता लगाने की अनुमति देता है:
जटिल फंक्शन ह्युरिस्टिक सबसे जटिल कंट्रोल-फ्लो ग्राफ़ (साइक्लोमैटिक जटिलता के आधार पर) वाले शीर्ष 10% फंक्शनों की पहचान करता है। यह पहचानने की अनुमति देता है:
स्टेट मशीन ह्युरिस्टिक स्टेट मशीनों को लागू करने वाले फंक्शनों की पहचान करने के लिए ग्राफ़-सैद्धांतिक गुणों का उपयोग करता है। आमतौर पर, ऐसी स्टेट मशीनों को स्विच स्टेटमेंट के रूप में दर्शाया जा सकता है जो एक लूप में भेजे जाते हैं। ह्युरिस्टिक पहचानने की अनुमति देता है:
असामान्य निर्देश अनुक्रम ह्युरिस्टिक उन फंक्शनों के शीर्ष 10% की पहचान करने के लिए एक सांख्यिकीय विश्लेषण करता है जिनके कोड पैटर्न पूर्व-गणना किए गए ग्राउंड ट्रुथ से विचलित होते हैं। इस प्रकार, ह्युरिस्टिक पहचानने की अनुमति देता है:
ओवरलैपिंग निर्देश ह्युरिस्टिक गलत संरेखित निर्देशों (निर्देश बाइट्स दो अलग-अलग निर्देशों द्वारा साझा किए जाते हैं) वाले फंक्शनों की पहचान करता है। ह्युरिस्टिक पहचानता है:
यदि ह्युरिस्टिक का उपयोग बाइनरी निंजा के उपयोगकर्ता इंटरफ़ेस में किया जाता है, तो ओवरलैपिंग निर्देशों को ग्राफ़ व्यू में भी हाइलाइट किया जाता है।
सबसे अधिक कॉल किया गया फंक्शन ह्युरिस्टिक विभिन्न फंक्शनों से कॉल की सबसे बड़ी संख्या वाले शीर्ष 10% फंक्शनों की पहचान करता है। इस प्रकार, ह्युरिस्टिक पहचान सकता है:
ह्युरिस्टिक उच्च संख्या में लूप वाले फंक्शनों की पहचान करता है। इस प्रकार के फंक्शन निम्नलिखित को लागू कर सकते हैं:
ह्युरिस्टिक संभावित प्रदर्शन अड़चनों को इंगित करने में भी मदद करता है।
ह्युरिस्टिक दुर्लभ और जटिल लूप संरचनाओं वाले फंक्शनों की पहचान करता है जो आमतौर पर संकेत देते हैं:
ह्युरिस्टिक उन फंक्शनों की पहचान करता है जो लूप के अंदर एक स्थिरांक के साथ XOR ऑपरेशन करते हैं। इस प्रकार, ह्युरिस्टिक पहचान सकता है:
ह्युरिस्टिक उन फंक्शनों की पहचान करता है जिनमें अभिव्यक्तियों में एक साथ एक से अधिक अंकगणितीय संक्रिया और एक बूलियन संक्रिया होती है। इस प्रकार, ह्युरिस्टिक पहचान सकता है: