
مجموعة أدوات واجهة مستخدم قابلة للتوسع لمصحح الأخطاء، توفر عروضًا قابلة للتخصيص للسجلات، التفكيك، المكدس، الذاكرة، نقاط التوقف، وتتبع الاستدعاءات الخلفية لمصححي الأخطاء LLDB وGDB وVDB وWinDbg.
Voltron هي مجموعة أدوات واجهة مستخدم قابلة للتوسيع لمصحّحات الأخطاء، مكتوبة بلغة Python. تهدف إلى تحسين تجربة المستخدم لمختلف مصحّحات الأخطاء (LLDB و GDB و VDB و WinDbg) من خلال تمكين إرفاق عروض مساعدة يمكنها استرداد البيانات وعرضها من مضيف المصحّح. من خلال تشغيل هذه العروض في أجهزة طرفية أخرى (TTYs)، يمكنك بناء واجهة مستخدم مصحّح مخصصة تناسب احتياجاتك.
لا تهدف Voltron إلى أن تكون كل شيء للجميع. إنها ليست بديلاً كاملاً عن واجهة سطر الأوامر لمصحّح الأخطاء الخاص بك. بدلاً من ذلك، تهدف إلى استكمال إعدادك الحالي والسماح لك بتوسيع مصحّح الأخطاء CLI الخاص بك بقدر ما تريد. إذا كنت تريد فقط عرض محتويات السجلات في نافذة بجانب مصحّح الأخطاء الخاص بك، يمكنك فعل ذلك. إذا كنت تريد المضي قدمًا والحصول على شيء يشبه OllyDbg أكثر، يمكنك فعل ذلك أيضًا.
يتم توفير عروض مدمجة من أجل:
يبدو إعداد المؤلف شيئًا مثل هذا:
يمكن فصل أي أمر من أوامر المصحّح إلى عرض وإبرازه باستخدام محلل Pygments محدد:
المزيد من لقطات الشاشة هنا.
تدعم Voltron مصحّحات LLDB و GDB و VDB و WinDbg/CDB (عبر PyKD) وتعمل على أنظمة macOS و Linux و Windows.
لا يزال دعم WinDbg جديدًا نسبيًا، يرجى فتح مشكلة إذا واجهت مشاكل.
يتم دعم البنى التالية:
ملاحظة: يتم دعم مشتقات macOS و Debian فقط بشكل كامل بواسطة سكريبت التثبيت. من المفترض ألا يفشل في توزيعات Linux الأخرى، لكنه لن يحاول تثبيت تبعيات الحزم. إذا كنت تستخدم توزيعة أخرى، فاطلع على 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 (.lldbinit لـ LLDB أو .gdbinit لـ GDB) فقم بتكوينه لتحميل Voltron عند بدء التشغيل عن طريق تضمين ملف نقطة الدخول entry.py. سيكون المسار الكامل داخل حزمة 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 بعد تحميل الهدف:
انظر الويكي على جيتهاب.
سؤال. لماذا أحصل على خطأ ImportError عند تحميل Voltron؟
إجابة. قد يكون لديك إصدارات متعددة من Python مثبتة وقمت بتثبيت Voltron باستخدام الإصدار الخاطئ. راجع تعليمات التثبيت الأكثر تفصيلاً.
سؤال. GEF؟ PEDA؟ PwnDbg؟ fG's gdbinit؟
إجابة. كلها إضافات رائعة جدًا لـ GDB. توفر هذه الأدوات بشكل أساسي مجموعات من الأوامر الإضافية لمهام الاستغلال، لكن كل منها يوفر أيضًا عرض "سياق" مع رؤية للسجلات والمكدس والكود، وما إلى ذلك، مثل Voltron. تطبع هذه الأدوات عرض السياق الخاص بها في وحدة تحكم المصحّح في كل مرة يتوقف فيها المصحّح. تتبع Voltron نهجًا مختلفًا من خلال تضمين implant خادم RPC في المصحّح وتمكين إرفاق العروض من أجهزة طرفية أخرى (أو حتى متصفحات الويب، أو الآن المزامنة مع Binary Ninja)، مما يسمح للمستخدم ببناء واجهة متعددة النوافذ أنظف لمصحّح الأخطاء الخاص به. تعمل Voltron بشكل رائع جنبًا إلى جنب مع كل هذه الأدوات. يمكنك فقط تعطيل عرض السياق في إضافة GDB التي تختارها وتوصيل بعض عروض Voltron، مع الاستمرار في الحصول على جميع فوائد الأوامر المفيدة التي تضيفها هذه الأدوات.
انظر متتبع المشكلات على جيتهاب لمزيد من المعلومات أو لتقديم المشكلات.
إذا كنت تواجه خطأ ImportError عند تحميل Voltron، يرجى التأكد من اتباع تعليمات التثبيت الخاصة بمنصتك.
في الإصدارات الأقدم من LLDB، يجب تشغيل أمر voltron init يدويًا بعد تحميل هدف التصحيح، حيث يجب تحميل هدف قبل تثبيت خطافات Voltron. ستحاول Voltron تسجيل معالج الأحداث الخاص بها تلقائيًا، وستقوم بإبلاغ المستخدم إذا كان voltron init مطلوبًا.
مزيد من المعلومات حول دعم WinDbg/CDB هنا.
يستخدم المؤلفون بشكل أساسي Voltron مع أحدث إصدار من LLDB على macOS. سنحاول اختبار كل شيء على أكبر عدد ممكن من المنصات والبنى قبل الإصدارات، لكن LLDB/macOS/x64 سيكون على الأرجح التركيبة الأكثر استخدامًا. نأمل ألا يشعل Voltron حيواناتك الأليفة، لكن النتائج قد تختلف.
انظر ملف الترخيص.
إذا كنت تستخدم هذا ولا تكرهه، اشتر لي بيرة في مؤتمر في وقت ما. يمتد هذا الترخيص أيضًا إلى المساهمين الآخرين - richo يستحق بالتأكيد بضع بيرة لمساهماته.
شكرًا لأصحاب العمل السابقين Assurance و Azimuth Security على إعطائي وقتًا لقضائه في العمل على هذا.
تحية لـ richo على جميع مساهماته في Voltron.
كان fG!'s gdbinit هو الإلهام الأصلي لهذا المشروع.
شكرًا لـ Willi على تنفيذ دعم VDB.
يستخدم 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 مع بيئة مستخدم Linux. يقوم المؤلف بالاختبار باستخدام Git Bash و ConEmu. يمكن تحميل PyKD و Voltron في أمر واحد عند تشغيل المصحّح:
$ cdb -c '.load C:\path\to\pykd.pyd ; !py --global C:\path\to\voltron\entry.py' target_binary
في طرفية أخرى (أستخدم ألواح iTerm) ابدأ أحد عروض واجهة المستخدم. في LLDB و WinDbg و GDB، سيتم تحديث العروض فورًا. في VDB، لن يتم تحديثها حتى يتوقف الهدف (عند نقطة توقف، بعد خطوة، إلخ):
$ voltron view register
$ voltron view stack
$ voltron view disasm
$ voltron view backtrace
قم بتعيين نقطة توقف وقم بتشغيل الهدف الخاص بك.
(*db) b main
(*db) run
عندما يصل المصحّح إلى نقطة التوقف، سيتم تحديث العروض لتعكس الحالة الحالية للسجلات والمكدس والذاكرة وما إلى ذلك. يتم تحديث العروض بعد كل أمر يتم تنفيذه في CLI المصحّح، باستخدام آلية "ربط التوقف" الخاصة بالمصحّح. لذا في كل مرة تخطو فيها، أو تستمر وتصطدم بنقطة توقف، سيتم تحديث العروض.