
बाइनरी निंजा प्लगइन ऑब्फस्केटेड कोड का विश्लेषण और सरलीकरण करने के लिए
लेखक: Tim Blazytko और Nicolò Altamura
ऑब्फस्केटेड कोड का विश्लेषण और सरलीकरण करें
ऑब्फस्केशन विश्लेषण एक Binary Ninja प्लगइन है जो भारी सुरक्षित बाइनरीज़ के साथ काम करने की कठिनाई को दूर करता है। यह कुछ केंद्रित सहायक उपकरणों को एक साथ लाता है जो आपको निम्नलिखित की अनुमति देते हैं
कुछ उदाहरण उपयोग के मामले examples में पाए जा सकते हैं। इसके अलावा, REcon वार्ता "Breaking Mixed Boolean-Arithmetic Obfuscation in Real-World Applications" कुछ उपयोग के मामलों को प्रदर्शित करती है। स्लाइड्स यहाँ पाई जा सकती हैं। यह प्लगइन Obfuscation Detection का पूरक है: एक बार संदिग्ध फ़ंक्शनों को चिह्नित करने के बाद, Obfuscation Analysis उन्हें साफ़ करने और समझने में आपकी सहायता करता है। समय के साथ और अधिक सहायक उपकरण जोड़े जाएंगे।
यह टूल Binary Ninja के प्लगइन मैनेजर का उपयोग करके इंस्टॉल किया जा सकता है।
मैन्युअल इंस्टॉलेशन के लिए, Binary Ninja के प्लगइन फ़ोल्डर में इन चरणों का पालन करें:
git clone https://github.com/mrphrazer/obfuscation_analysis.git
cd obfuscation_analysis
# optionally: use a virtual environment
python -m venv obfana-env
source obfana-env/bin/activate
# install requirements
pip install -r requirements.txt
यदि आप वर्चुअल एनवायरनमेंट का उपयोग करते हैं, तो आपको Binary Ninja की सेटिंग्स में site-packages पथ मैन्युअल रूप से सेट करना होगा।
यह प्लगइन Binary Ninja के टॉप-बार मेनू में Plugins -> Obfuscation Analysis के अंतर्गत उपलब्ध है।
अरिथमेटिक ऑब्फस्केशन को सरल बनाने के लिए, पहले डीकंपाइलर व्यू में उस HLIL अभिव्यक्ति को हाइलाइट करें जिसे आप सरल बनाना चाहते हैं। इसके बाद, Plugins -> Obfuscation Analysis -> MBA Simplification -> Slice & Simplify चुनें। प्लगइन पूरी गणना को हल करता है, इसे msynth के माध्यम से चलाता है, और सरलीकृत परिणाम को उसी पंक्ति पर एक टिप्पणी के रूप में सम्मिलित करता है। नीचे दिया गया संक्षिप्त एनिमेशन पूरे वर्कफ़्लो को दर्शाता है:
MBA सरलीकरण msynth पर निर्भर करता है। डिफ़ॉल्ट रूप से, प्लगइन msynth’s default simplification oracle का उपयोग करता है, जो प्लगइन के साथ आता है और पूर्व-कॉन्फ़िगर किया गया है। यदि आप एक बड़े या कस्टम oracle का उपयोग करना चाहते हैं, तो obfuscation_analysis.mba_oracle_path को मैन्युअल रूप से सेट करें या Binary Ninja की Settings विंडो में फ़ाइल तक ब्राउज़ करें।
यदि कुछ गलत होता है तो प्लगइन Log पैन में एक संक्षिप्त उपयोगकर्ता-स्तरीय संदेश लिखता है; पूरा ट्रेसबैक देखने के लिए लॉग व्यू को Debug पर स्विच करें।
यह प्लगइन केंद्रित सहायक उपकरणों के साथ आता है जो सुरक्षित बाइनरीज़ को रिवर्स करते समय आने वाली सामान्य बाधाओं को लक्षित करते हैं, प्रत्येक को UI या हेड-लेस स्क्रिप्ट से बैकग्राउंड टास्क के रूप में चलाया जा सकता है। नीचे वर्तमान में उपलब्ध विशेषताएँ दी गई हैं।
करप्टेड फ़ंक्शन वे फ़ंक्शन हैं जिनकी डिसअसेम्बली अपरिभाषित कलाकृतियाँ दिखाती है—खाली बेसिक ब्लॉक, अमान्य या ओवरलैपिंग निर्देश, और इसी तरह के। यह सहायक पूरे BinaryView को ट्रैवर्स करता है, उन लक्षणों वाले फ़ंक्शनों को चिह्नित करता है, और उन्हें सूचीबद्ध करता है ताकि विश्लेषक उस कोड का शीघ्रता से निरीक्षण कर सके जिसे गलत तरीके से पार्स किया गया था या जानबूझकर ऑब्फस्केट किया गया था। एक वैकल्पिक remove क्रिया प्रत्येक चिह्नित फ़ंक्शन को मिटा देती है और नए सिरे से विश्लेषण को बाध्य करती है, फ़ंक्शन सूची को साफ़ करती है। यह विशेष रूप से निम्नलिखित का पता लगाने के लिए उपयोगी है
मिक्स्ड-बूलियन अरिथमेटिक (MBA) एक ऑब्फस्केशन तकनीक है जो सरल गणनाओं को अरिथमेटिक और बूलियन ऑपरेशनों की लंबी श्रृंखलाओं में छिपा देती है। यह सुविधा डीकंपाइलर में ऐसी अभिव्यक्तियों को सरल बनाती है। जब आप एक HLIL निर्देश चुनते हैं, तो प्लगइन वर्तमान बेसिक ब्लॉक तक सीमित SSA बैकवर्ड स्लाइस के साथ उसकी पूरी गणना श्रृंखला एकत्र करता है, उस स्लाइस को Miasm IR में अनुवादित करता है, इसे msynth में फीड करता है, और अंत में सरलीकृत परिणाम को डीकंपाइलर व्यू में एक टिप्पणी के रूप में जोड़ता है। यह सुविधा आपको निम्नलिखित की अनुमति देती है
वर्तमान में चयनित फ़ंक्शन के लिए, यह सहायक डीकंपाइलर व्यू के अंदर प्रत्येक कैली को पुनरावर्ती रूप से इनलाइन करता है, जिससे Binary Ninja को एक एकल, स्व-निहित IL मिलता है। सभी सीमाओं के हट जाने के बाद डीकंपाइलर फ़ंक्शनों के बीच डेटा का प्रसार कर सकता है, जिससे गहरा स्थिरांक फोल्डिंग, डेड-कोड एलिमिनेशन, और आम तौर पर स्पष्ट तर्क सक्षम होता है। इसका उपयोग निम्नलिखित के लिए करें
ध्यान दें कि बहुत बड़े फ़ंक्शनों या गहरे कॉल ट्री पर HLIL बहुत विशाल और रेंडर करने में धीमा हो सकता है। इसके अलावा, एक बार सब कुछ एक इकाई में विलीन हो जाने के बाद कुछ डीकंपाइलर अनुकूलन कम प्रभावी हो सकते हैं। इसे नियंत्रित करने के लिए, आप इनलाइनिंग गहराई को सीमित कर सकते हैं: Settings -> Obfuscation Analysis -> Max Function Inlining Depth को एक ऊपरी सीमा N पर सेट करें (डिफ़ॉल्ट रूप से 1 पर सेट)। गहराई सीमा के साथ, केवल पहले N कॉल स्तर इनलाइन किए जाते हैं; गहरे कॉल इनलाइन नहीं किए जाते हैं।
प्लगइन में कुछ चेतावनियाँ हैं जिनके बारे में आपको जानना चाहिए, उनमें से अधिकांश MBA सरलीकरण पाइपलाइन से संबंधित हैं:
Binary Ninja बग: BN 5.0 stable पर, बैकवर्ड-स्लाइसिंग चरण विफल हो सकता है क्योंकि HLIL टाइप-कास्ट गायब हैं: https://github.com/Vector35/binaryninja-api/issues/6371; यह समस्या 5.1.7477-de और नए संस्करणों में ठीक कर दी गई है
स्लाइस एक बेसिक ब्लॉक तक सीमित: पूर्ववर्ती ब्लॉकों में स्थित चर परिभाषाओं को अनदेखा किया जाता है (अक्सर नियंत्रण-प्रवाह पर निर्भर), इसलिए कुछ MBA शब्द आंशिक रूप से हल रह सकते हैं
HLIL से Miasm IR अनुवाद अंतराल: प्रत्येक HLIL निर्माण का एक सुसंगत Miasm समकक्ष नहीं होता है; जब अनुवाद विफल होता है तो अभिव्यक्ति को छोड़ दिया जाता है और एक त्रुटि लॉग की जाती है
IL कवरेज: नियंत्रण-प्रवाह नोड्स और फ़्लोटिंग-पॉइंट ऑपरेशन वर्तमान में अनुवादित नहीं हैं
विरासत में मिली msynth बाधाएँ : MBA सरलीकरण सभी msynth सीमाओं को विरासत में लेता है
अधिक जानकारी के लिए, Tim Blazytko (@mr_phrazer) या Nicolò Altamura (@nicolodev) से संपर्क करें।