
विस्तार योग्य डीबगर UI टूलकिट जो LLDB, GDB, VDB और WinDbg के लिए अनुकूलन योग्य रजिस्टर, डिसअसेंबली, स्टैक, मेमोरी, ब्रेकपॉइंट और बैकट्रेस व्यू प्रदान करता है।
Voltron एक extensible debugger UI टूलकिट है जो Python में लिखा गया है। इसका उद्देश्य विभिन्न डीबगर्स (LLDB, GDB, VDB और WinDbg) के उपयोगकर्ता अनुभव को बेहतर बनाना है, जिससे उपयोगिता दृश्यों को संलग्न किया जा सके जो डीबगर होस्ट से डेटा प्राप्त और प्रदर्शित कर सकते हैं। इन दृश्यों को अन्य TTYs में चलाकर, आप अपनी आवश्यकताओं के अनुसार एक अनुकूलित डीबगर उपयोगकर्ता इंटरफ़ेस बना सकते हैं।
Voltron का उद्देश्य सभी के लिए सब कुछ बनना नहीं है। यह आपके डीबगर के CLI का पूर्ण प्रतिस्थापन नहीं है। बल्कि, इसका उद्देश्य आपके मौजूदा सेटअप को पूरक बनाना और आपको अपने CLI डीबगर को जितना चाहें उतना विस्तारित करने की अनुमति देना है। यदि आप केवल अपने डीबगर के साथ एक विंडो में रजिस्टर सामग्री का दृश्य चाहते हैं, तो आप ऐसा कर सकते हैं। यदि आप पूरी तरह से जाना चाहते हैं और OllyDbg जैसा कुछ चाहते हैं, तो आप वह भी कर सकते हैं।
निर्मित दृश्य प्रदान किए गए हैं:
लेखक का सेटअप कुछ इस प्रकार दिखता है:
किसी भी डीबगर कमांड को एक दृश्य में विभाजित किया जा सकता है और निर्दिष्ट Pygments लेक्सर के साथ हाइलाइट किया जा सकता है:
अधिक स्क्रीनशॉट यहाँ हैं।
Voltron LLDB, GDB, VDB और WinDbg/CDB ( PyKD के माध्यम से) का समर्थन करता है और macOS, Linux और Windows पर चलता है।
WinDbg समर्थन अभी भी काफी नया है, कृपया यदि आपको समस्या हो तो एक मुद्दा खोलें।
निम्नलिखित आर्किटेक्चर समर्थित हैं:
नोट: केवल macOS और Debian डेरिवेटिव इंस्टॉल स्क्रिप्ट द्वारा पूरी तरह से समर्थित हैं। उम्मीद है कि यह अन्य लिनक्स वितरणों पर विफल नहीं होगा, लेकिन यह पैकेज निर्भरताओं को स्थापित करने का प्रयास नहीं करेगा। यदि आप किसी अन्य वितरण का उपयोग कर रहे हैं, तो install.sh देखें कि चलाने से पहले आपको कौन सी निर्भरताएँ स्थापित करने की आवश्यकता हो सकती है।
स्रोत डाउनलोड करें और इंस्टॉल स्क्रिप्ट चलाएँ:
$ git clone https://github.com/snare/voltron
$ cd voltron
$ ./install.sh
डिफ़ॉल्ट रूप से, इंस्टॉल स्क्रिप्ट उपयोगकर्ता के site-packages निर्देशिका में स्थापित होगी। यदि आप सिस्टम site-packages में स्थापित करना चाहते हैं, तो -s फ़्लैग का उपयोग करें:
$ ./install.sh -s
आप एक वर्चुअल वातावरण में भी (केवल LLDB के लिए) इस प्रकार स्थापित कर सकते हैं:
$ ./install.sh -v /path/to/venv -b lldb
यदि आप बिना शेल वाले Windows पर हैं, स्थापना में समस्या है, या मैन्युअल रूप से स्थापित करना पसंद करेंगे, तो कृपया मैन्युअल स्थापना दस्तावेज़ देखें।
यदि आपके डीबगर में एक init स्क्रिप्ट है (LLDB के लिए .lldbinit या GDB के लिए .gdbinit), तो इसे कॉन्फ़िगर करें कि वह entry.py एंट्री पॉइंट स्क्रिप्ट को सोर्स करके प्रारंभ होने पर Voltron लोड करे। पूर्ण पथ voltron पैकेज के अंदर होगा। उदाहरण के लिए, macOS पर यह /Library/Python/2.7/site-packages/voltron/entry.py हो सकता है। install.sh स्क्रिप्ट इसे आपके .gdbinit या .lldbinit फ़ाइल में स्वचालित रूप से जोड़ देगी यदि वह आपके पथ में GDB या LLDB का पता लगाती है।
LLDB:
command script import /path/to/voltron/entry.py
GDB:
source /path/to/voltron/entry.py
अपना डीबगर प्रारंभ करें और यदि आवश्यक हो तो Voltron को मैन्युअल रूप से आरंभ करें।
LLDB के हाल के संस्करणों पर आपको Voltron को मैन्युअल रूप से आरंभ करने की आवश्यकता नहीं है:
$ lldb target_binary
LLDB के पुराने संस्करणों पर आपको इनफीरियर लोड करने के बाद voltron init कॉल करना होगा:
github पर wiki देखें।
प्रश्न. Voltron लोड करने पर मुझे ImportError क्यों मिल रहा है?
उत्तर. आपके पास Python के कई संस्करण स्थापित हो सकते हैं और आपने गलत का उपयोग करके Voltron स्थापित किया हो सकता है। अधिक विस्तृत स्थापना निर्देश देखें।
प्रश्न. GEF? PEDA? PwnDbg? fG's gdbinit?
उत्तर. ये सभी GDB के लिए बहुत उत्कृष्ट एक्सटेंशन हैं। ये उपकरण मुख्य रूप से शोषण कार्यों के लिए अतिरिक्त कमांड का सेट प्रदान करते हैं, लेकिन प्रत्येक Voltron की तरह रजिस्टर, स्टैक, कोड आदि के दृश्य के साथ एक "संदर्भ" प्रदर्शन भी प्रदान करता है। ये उपकरण हर बार जब डीबगर रुकता है तो अपना संदर्भ डीबगर कंसोल में प्रिंट करते हैं। Voltron डीबगर में एक RPC सर्वर इम्प्लांट एम्बेड करके और अन्य टर्मिनलों (या यहाँ तक कि वेब ब्राउज़र, या अब Binary Ninja के साथ सिंक्रोनाइज़) से दृश्यों को संलग्न करने में सक्षम बनाकर एक अलग दृष्टिकोण अपनाता है, जो उपयोगकर्ता को अपने डीबगर के लिए एक स्वच्छ मल्टी-विंडो इंटरफ़ेस बनाने की अनुमति देता है। Voltron इन सभी उपकरणों के साथ बहुत अच्छा काम करता है। आप बस अपने पसंदीदा GDB एक्सटेंशन में संदर्भ प्रदर्शन को अक्षम कर सकते हैं और कुछ Voltron दृश्य जोड़ सकते हैं, जबकि इन उपकरणों द्वारा जोड़े गए उपयोगी कमांड के सभी लाभ अभी भी प्राप्त कर सकते हैं।
अधिक जानकारी या मुद्दे प्रस्तुत करने के लिए github पर issue tracker देखें।
यदि आप Voltron लोड करने में ImportError का अनुभव कर रहे हैं, तो कृपया सुनिश्चित करें कि आपने अपने प्लेटफॉर्म के लिए स्थापना निर्देश का पालन किया है।
LLDB के पुराने संस्करणों पर, डीबग लक्ष्य लोड करने के बाद voltron init कमांड को मैन्युअल रूप से चलाना होगा, क्योंकि Voltron के हुक स्थापित होने से पहले एक लक्ष्य लोड होना चाहिए। Voltron स्वचालित रूप से अपने ईवेंट हैंडलर को पंजीकृत करने का प्रयास करेगा, और यदि voltron init की आवश्यकता होगी तो उपयोगकर्ता को सूचित करेगा।
WinDbg/CDB समर्थन के बारे में अधिक जानकारी यहाँ।
लेखक मुख्य रूप से macOS पर LLDB के सबसे हाल के संस्करण के साथ Voltron का उपयोग करते हैं। हम रिलीज़ से पहले जितना संभव हो सके उतने प्लेटफार्मों और आर्किटेक्चर पर सब कुछ परीक्षण करने का प्रयास करेंगे, लेकिन LLDB/macOS/x64 अब तक सबसे अधिक उपयोग किया जाने वाला संयोजन होगा। उम्मीद है कि Voltron आपके पालतू जानवरों को आग नहीं लगाएगा, लेकिन आपका अनुभव भिन्न हो सकता है।
LICENSE फ़ाइल देखें।
यदि आप इसका उपयोग करते हैं और इससे नफरत नहीं करते, तो किसी सम्मेलन में मुझे एक बीयर खरीद दें। यह लाइसेंस अन्य योगदानकर्ताओं पर भी लागू होता है - richo निश्चित रूप से अपने योगदान के लिए कुछ बीयर का हकदार है।
मेरे पूर्व नियोक्ताओं Assurance और Azimuth Security को धन्यवाद जिन्होंने मुझे इस पर काम करने का समय दिया।
richo को Voltron में उनके सभी योगदानों के लिए सलाम।
fG! का gdbinit इस परियोजना के लिए मूल प्रेरणा था।
VDB समर्थन लागू करने के लिए Willi को धन्यवाद।
Voltron अब डिसअसेंबली के लिए Capstone का उपयोग करता है, साथ ही डीबगर होस्ट के आंतरिक डिसअसेंबली तंत्र का भी। Capstone एक शक्तिशाली, ओपन सोर्स, मल्टी-आर्किटेक्चर डिसअसेंबलर है जिस पर रिवर्स इंजीनियरिंग और डीबगिंग टूल्स की अगली पीढ़ी बनाई जा रही है। इसे देखें।
निरंतर योगदान के लिए grazfather को धन्यवाद।
| lldb | gdb | vdb | windbg |
|---|
| x86 | ✓ | ✓ | ✓ | ✓ |
| x86_64 | ✓ | ✓ | ✓ | ✓ |
| arm | ✓ | ✓ | ✓ | ✗ |
| arm64 | ✓ | ✗ | ✗ | ✗ |
| powerpc | ✗ | ✓ | ✗ | ✗ |
$ lldb target_binary
(lldb) voltron init
GDB:
$ gdb target_binary
VDB:
$ ./vdbbin target_binary
> script /path/to/voltron/entry.py
WinDbg/CDB केवल लिनक्स यूज़रलैंड के साथ Bash के माध्यम से चलाने पर समर्थित है। लेखक Git Bash और ConEmu के साथ परीक्षण करता है। डीबगर लॉन्च करते समय PyKD और Voltron को एक कमांड में लोड किया जा सकता है:
$ cdb -c '.load C:\path\to\pykd.pyd ; !py --global C:\path\to\voltron\entry.py' target_binary
दूसरे टर्मिनल में (मैं iTerm पैन का उपयोग करता हूँ) UI दृश्यों में से एक प्रारंभ करें। LLDB, WinDbg और GDB पर दृश्य तुरंत अपडेट होंगे। VDB पर वे तब तक अपडेट नहीं होंगे जब तक इनफीरियर रुकता नहीं (ब्रेकपॉइंट पर, एक कदम के बाद, आदि):
$ voltron view register
$ voltron view stack
$ voltron view disasm
$ voltron view backtrace
एक ब्रेकपॉइंट सेट करें और अपना इनफीरियर चलाएँ।
(*db) b main
(*db) run
जब डीबगर ब्रेकपॉइंट पर हिट करता है, तो दृश्य रजिस्टर, स्टैक, मेमोरी आदि की वर्तमान स्थिति को दर्शाने के लिए अपडेट किए जाएंगे। डीबगर CLI में प्रत्येक कमांड निष्पादित होने के बाद, डीबगर के "स्टॉप हुक" तंत्र का उपयोग करके दृश्य अपडेट किए जाते हैं। इसलिए हर बार जब आप कदम बढ़ाते हैं, या जारी रखते हैं और एक ब्रेकपॉइंट पर हिट करते हैं, तो दृश्य अपडेट होंगे।