
रिवर्स इंजीनियरों के लिए एक कवरेज एक्सप्लोरर
Lighthouse IDA Pro और Binary Ninja के लिए एक शक्तिशाली कोड कवरेज एक्सप्लोरर है, जो सॉफ़्टवेयर शोधकर्ताओं को सिंबल या सोर्स की आवश्यकता के बिना नेटिव एप्लिकेशन के निष्पादन मैप्स का अध्ययन करने के लिए विशिष्ट रूप से इंटरैक्टिव नियंत्रण प्रदान करता है।
इस प्रोजेक्ट ने IDA की 2017 Plug-In Contest में दूसरा स्थान प्राप्त किया और बाद में सुरक्षा अनुसंधान उद्योग में इसके योगदान के लिए 2021 Pwnie Awards में नामांकित किया गया।
प्रेरणा के लिए @0vercl0k को विशेष धन्यवाद।
Lighthouse एक क्रॉस-प्लेटफ़ॉर्म (Windows, macOS, Linux) Python 2/3 प्लगइन है। इसमें शून्य थर्ड पार्टी डिपेंडेंसीज़ हैं, जो कोड को पोर्टेबल और इंस्टॉल करने में आसान बनाता है।
अपने संबंधित डिसअसेम्बलर के लिए नीचे दिए गए निर्देशों का उपयोग करें।
import idaapi, os; print(os.path.join(idaapi.get_user_idadir(), "plugins"))/plugins/ फ़ोल्डर की सामग्री को सूचीबद्ध डायरेक्टरी में कॉपी करें।Lighthouse को Binary Ninja पर प्लगइन मैनेजर के माध्यम से इंस्टॉल किया जा सकता है, जो v3.5 और नए संस्करणों का समर्थन करता है।
Edit -> Preferences -> Manage PluginsEnable बटन पर क्लिक करें।उचित रूप से इंस्टॉल होने के बाद, डिसअसेम्बलर में कुछ नई मेनू प्रविष्टियाँ उपलब्ध होंगी। ये उपयोगकर्ता के लिए कवरेज डेटा लोड करने और Lighthouse का उपयोग शुरू करने के प्रवेश बिंदु हैं।
Lighthouse कवरेज डेटा के कुछ अलग 'फ़्लेवर्स' लोड करने में सक्षम है। Lighthouse में लोड किए जा सकने वाले कवरेज डेटा को जनरेट करने के लिए, कृपया इस रिपॉज़िटरी की coverage डायरेक्टरी में README देखें।
जब Lighthouse उपयोग में होता है, तो यह डिसअसेम्बलर में उपलब्ध सभी कोड व्यूअर्स पर सक्रिय कवरेज डेटा को 'पेंट' करेगा। विशेष रूप से, यह आपके लीनियर डिसअसेम्बली, ग्राफ़, और डीकंपाइलर विंडोज़ पर लागू होगा।
Binary Ninja में, केवल लीनियर डिसअसेम्बली, ग्राफ़, और IL व्यूज़ समर्थित हैं। Binary Ninja में डीकंपाइलर आउटपुट की पेंटिंग के लिए समर्थन Lighthouse में निकट भविष्य में जोड़ा जाएगा क्योंकि यह सुविधा स्थिर हो जाती है।
कवरेज अवलोकन एक डॉक करने योग्य विजेट है जो Lighthouse में कवरेज लोड होने के बाद खुल जाएगा।
यह इंटरैक्टिव विजेट लोड किए गए कवरेज डेटा का फ़ंक्शन स्तर का दृश्य प्रदान करता है। इसमें लोड किए गए डेटा को प्रबंधित करने और कवरेज विश्लेषण के अधिक उन्नत रूपों को संचालित करने के लिए कई उपकरण भी हैं।
कवरेज अवलोकन में टेबल पर राइट क्लिक करने से एक कॉन्टेक्स्ट मेनू उत्पन्न होगा जिसमें टेबल से जानकारी निकालने, या आपकी रिवर्स इंजीनियरिंग प्रक्रिया के हिस्से के रूप में डेटाबेस में हेरफेर करने के लिए कुछ बुनियादी सुविधाएँ होंगी।
यदि आपको लगता है कि इस कॉन्टेक्स्ट मेनू में जोड़ने के लिए कोई अन्य क्रियाएँ उपयोगी हो सकती हैं, तो कृपया एक इश्यू फ़ाइल करें और उन्हें Lighthouse के भविष्य के रिलीज़ के लिए विचार किया जाएगा।
लोड किए गए कवरेज और उपयोगकर्ता द्वारा निर्मित कंपोज़िशन को कवरेज कॉम्बोबॉक्स के माध्यम से चुना या हटाया जा सकता है।
Lighthouse प्रारंभिक HTML कवरेज रिपोर्ट उत्पन्न कर सकता है। एक नमूना रिपोर्ट यहाँ देखी जा सकती है।
कवरेज अवलोकन विंडो के निचले भाग में कवरेज शेल है। इस शेल का उपयोग लोड किए गए कवरेज सेट्स को संयोजित या हेरफेर करने वाले लॉजिक-आधारित ऑपरेशन करने के लिए किया जा सकता है।
यह सुविधा कई रनों में प्रोग्राम निष्पादन के संबंधों की खोज में अत्यंत उपयोगी है। दूसरे शब्दों में, शेल का उपयोग कवरेज सेट्स के बीच निष्पादन को 'डिफ' करने और उनके व्यक्तिगत भागों के शोर के भीतर अन्यथा छिपे हुए गहरे अर्थ को निकालने के लिए किया जा सकता है।
कवरेज कंपोज़िशन, या Composing जैसा कि ऊपर प्रदर्शित किया गया है, कंपोज़िंग शेल पर एक सरल एक्सप्रेशन ग्रामर और 'शॉर्टहैंड' कवरेज सिंबल्स (A से Z) के माध्यम से प्राप्त किया जाता है।
|, &, ^, -A, B, C, ..., Z, *(...)A और कवरेज B के बीच साझा है:A & B
A के लिए अद्वितीय है:A - B
A या B के लिए अद्वितीय है, लेकिन C के लिए नहीं:(A | B) - C
एक्सप्रेशन मनमानी लंबाई या जटिलता के हो सकते हैं, लेकिन कंपोज़िशन का मूल्यांकन दाएँ से बाएँ हो सकता है। इसलिए संभावित अस्पष्ट एक्सप्रेशन के लिए पैरेंथेसिस सुझाए जाते हैं।
इसके अतिरिक्त, एक 'हॉट शेल' मोड है जो उपयोगकर्ता कंपोज़िशन को वास्तविक समय में एसिंक्रोनस रूप से मूल्यांकन और कैश करता है।