
रिवर्स इंजीनियर्स के लिए एक Trace Explorer
टेनेट एक आईडीए प्रो प्लगइन है जो निष्पादन ट्रेस की खोज के लिए है। इस प्लगइन का उद्देश्य किसी दिए गए बाइनरी के विरुद्ध निष्पादन ट्रेस को नेविगेट करने के लिए अधिक प्राकृतिक, मानवीय नियंत्रण प्रदान करना है। इस कार्य का आधार सॉफ्टवेयर में जटिल निष्पादन पैटर्न की जांच और सारांशित करने के लिए नए या अभिनव तरीकों पर शोध करने की इच्छा से उपजा है।
इस परियोजना के बारे में अधिक संदर्भ के लिए, कृपया इसके प्रारंभिक रिलीज़ के बारे में ब्लॉगपोस्ट पढ़ें।
प्रेरणा के लिए क्यूआईआरए / geohot एट अल. को विशेष धन्यवाद।
टेनेट एक क्रॉस-प्लेटफ़ॉर्म (विंडोज़, मैकओएस, लिनक्स) पायथन 3 प्लगइन है। यह कोई तृतीय-पक्ष निर्भरता नहीं लेता है, जो कोड को पोर्टेबल और स्थापित करने में आसान बनाता है।
अपने डिस्सेम्बलर के पायथन कंसोल से, इसका प्लगइन डायरेक्टरी खोजने के लिए निम्नलिखित कमांड चलाएं:
import idaapi, os; os.path.join(idaapi.get_user_idadir(), "plugins")इस रिपॉजिटरी के /plugins/ फ़ोल्डर की सामग्री को सूचीबद्ध निर्देशिका में कॉपी करें।
अपने डिस्सेम्बलर को पुनः आरंभ करें।
यह प्लगइन केवल आईडीए 7.5 और नए के लिए समर्थित है।
एक बार ठीक से स्थापित होने पर, डिस्सेम्बलर में एक नया मेनू एंट्री उपलब्ध होगा। इसका उपयोग बाहरी रूप से एकत्रित निष्पादन ट्रेस को टेनेट में लोड करने के लिए किया जा सकता है।
चूंकि यह प्रारंभिक रिलीज़ है, टेनेट केवल सरल मानव-पठनीय टेक्स्ट ट्रेस स्वीकार करता है। कृपया ट्रेस प्रारूप, सीमाओं और संदर्भ ट्रेसर्स के बारे में अतिरिक्त जानकारी के लिए इस रिपॉजिटरी में ट्रेसिंग रीडमी देखें।
टेनेट का उपयोग करते समय, प्लगइन सक्रिय निष्पादन ट्रेस में आपकी वर्तमान स्थिति से आगे (नीला) और पीछे (लाल) निष्पादन प्रवाह को इंगित करने के लिए 'ट्रेल्स' पेंट करेगा।
समय के माध्यम से आगे या पीछे कदम बढ़ाने के लिए, आप डिस्सेम्बलर के दाईं ओर टाइमलाइन पर होवर करते हुए स्क्रॉल करते हैं। फ़ंक्शन कॉल पर स्टेप ओवर करने के लिए, स्क्रॉल करते समय SHIFT दबाए रखें।
ट्रेस टाइमलाइन डिस्सेम्बलर के दाईं ओर डॉक की जाएगी। इस विजेट का उपयोग ट्रेस टाइमलाइन पर विभिन्न प्रकार की घटनाओं को विज़ुअलाइज़ करने और ऊपर वर्णित के रूप में बुनियादी नेविगेशन करने के लिए किया जाता है।
टाइमलाइन पर क्लिक करके और खींचकर, निष्पादन ट्रेस के एक विशिष्ट खंड पर ज़ूम इन करना संभव है। वांछित ग्रैन्युलैरिटी तक पहुंचने के लिए इस क्रिया को किसी भी संख्या में दोहराया जा सकता है।
रजिस्टर विंडो में इंस्ट्रक्शन पॉइंटर पर डबल-क्लिक करने से यह लाल रंग में हाइलाइट हो जाएगा, जो निष्पादन ट्रेस टाइमलाइन पर सभी स्थानों को प्रकट करेगा जहां इंस्ट्रक्शन निष्पादित किया गया था।
निष्पादनों के बीच कूदने के लिए, हाइलाइट किए गए इंस्ट्रक्शन पॉइंटर पर होवर करते हुए ऊपर या नीचे स्क्रॉल करें।
इसके अतिरिक्त, आप डिस्सेम्बली लिस्टिंग में राइट-क्लिक कर सकते हैं और रुचि के इंस्ट्रक्शन के निष्पादन की तलाश करने के लिए नेविगेशन-आधारित मेनू एंट्री में से एक का चयन कर सकते हैं।
आईडीए के मूल F2 हॉटकी का उपयोग मनमाने इंस्ट्रक्शन पर ब्रेकपॉइंट सेट करने के लिए भी किया जा सकता है।
स्टैक या मेमोरी दृश्यों में एक बाइट पर डबल-क्लिक करके, आप तुरंत उस पते पर सभी रीड/राइट को ट्रेस टाइमलाइन पर विज़ुअलाइज़ देखेंगे। पीला मेमोरी रीड को इंगित करता है, नीला मेमोरी राइट को इंगित करता है।
मेमोरी ब्रेकपॉइंट को निष्पादन ब्रेकपॉइंट के लिए वर्णित उसी तकनीक का उपयोग करके नेविगेट किया जा सकता है। एक बाइट पर डबल-क्लिक करें, और चयनित बाइट पर होवर करते हुए स्क्रॉल करें ताकि ट्रेस को उसके प्रत्येक एक्सेस पर ले जाया जा सके।
रुचि की एक बाइट पर राइट-क्लिक करना आपको मेमोरी रीड/राइट/एक्सेस के बीच तलाश करने के विकल्प देगा यदि आपके मन में कोई विशिष्ट नेविगेशन क्रिया है।
मेमोरी दृश्य को एक मनमाने पते पर नेविगेट करने के लिए, मेमोरी दृश्य पर क्लिक करें और दृश्य को तलाशने के लिए G दबाकर एक पता या डेटाबेस प्रतीक दर्ज करें।
मेमोरी के एक ब्लॉक को हाइलाइट करके और एक एक्सेस ब्रेकपॉइंट सेट करने के लिए उस पर डबल-क्लिक करके मेमोरी के एक क्षेत्र में मेमोरी ब्रेकपॉइंट सेट करना संभव है।
सामान्य मेमोरी ब्रेकपॉइंट की तरह, क्षेत्र पर होवर करना और स्क्रॉल करना चयनित मेमोरी क्षेत्र के एक्सेस के बीच नेविगेट करने के लिए उपयोग किया जा सकता है।
रिवर्स इंजीनियरिंग में, उन स्थितियों का सामना करना काफी आम है जहां आप खुद से पूछते हैं "किस इंस्ट्रक्शन ने इस रजिस्टर को इसके वर्तमान मान पर सेट किया?"
टेनेट का उपयोग करके, आप एक ही क्लिक में उस इंस्ट्रक्शन पर पीछे की ओर तलाश कर सकते हैं।
पीछे की ओर तलाश करना रजिस्टर परिवर्तनों को नेविगेट करने की अब तक की सबसे सामान्य दिशा है... लेकिन चपलता के लिए आप रजिस्टर के दाईं ओर नीले तीर का उपयोग करके अगले रजिस्टर असाइनमेंट की ओर आगे भी तलाश कर सकते हैं।
ट्रेस में विशिष्ट टाइमस्टैम्प पर नेविगेट करने के लिए एक सरल 'शेल' प्रदान किया गया है। टाइमस्टैम्प को कॉमा के साथ या बिना कॉमा के शेल में पेस्ट (या टाइप...) करना पर्याप्त होगा।
विस्मयादिबोधक बिंदु का उपयोग करके, आप ट्रेस में एक निर्दिष्ट 'प्रतिशत' भी तलाश सकते हैं। !100 दर्ज करने से ट्रेस में अंतिम इंस्ट्रक्शन पर तलाश होगी, जबकि !50 लगभग ट्रेस के 50% रास्ते पर तलाश करेगा। !last डिस्सेम्बलर में देखे जा सकने वाले अंतिम नेविगेट करने योग्य इंस्ट्रक्शन पर तलाश करेगा।
टेनेट दो डिफ़ॉल्ट थीम के साथ आता है - एक 'लाइट' थीम, और एक 'डार्क' थीम। आपके डिस्सेम्बलर द्वारा वर्तमान में उपयोग किए जाने वाले रंगों के आधार पर, टेनेट उस थीम का चयन करने का प्रयास करेगा जो सबसे उपयुक्त लगती है।
थीम फ़ाइलें डिस्क पर सरल JSON के रूप में संग्रहीत होती हैं और अत्यधिक कॉन्फ़िगर करने योग्य होती हैं। यदि आप डिफ़ॉल्ट थीम या रंगों से खुश नहीं हैं, तो आप अपनी स्वयं की थीम बना सकते हैं और उन्हें उपयोगकर्ता थीम निर्देशिका में ड्रॉप कर सकते हैं।
टेनेट भविष्य के लोड और उपयोग के लिए आपकी थीम प्राथमिकता को याद रखेगा।
समय और प्रेरणा फंडिंग की अनुमति मिलने पर, भविष्य के कार्य में शामिल हो सकते हैं:
मैं बाहरी योगदान, मुद्दों और सुविधा अनुरोधों का स्वागत करता हूं। कृपया यदि आप चाहते हैं कि उन्हें भविष्य की रिलीज़ के लिए विचार किया जाए, तो इस रिपॉजिटरी की develop शाखा में कोई भी पुल अनुरोध करें।