Voltron เป็นชุดเครื่องมือ UI ดีบักเกอร์ที่ขยายได้ซึ่งเขียนด้วย Python มีจุดมุ่งหมายเพื่อปรับปรุงประสบการณ์ผู้ใช้ของดีบักเกอร์ต่างๆ (LLDB, GDB, VDB และ WinDbg) โดยเปิดใช้งานการแนบมุมมองยูทิลิตี้ที่สามารถดึงและแสดงข้อมูลจากโฮสต์ดีบักเกอร์ ด้วยการรันมุมมองเหล่านี้ใน TTY อื่นๆ คุณสามารถสร้างส่วนติดต่อผู้ใช้ดีบักเกอร์แบบกำหนดเองเพื่อให้เหมาะกับความต้องการของคุณ
โวลตรอนไม่ได้มุ่งหวังที่จะเป็นทุกอย่างสำหรับทุกคน ไม่ใช่การทดแทนขายส่งสำหรับ CLI ของดีบักเกอร์ของคุณ แต่มีจุดมุ่งหมายเพื่อเสริมการตั้งค่าที่มีอยู่ของคุณและช่วยให้คุณสามารถขยายดีบักเกอร์ CLI ได้มากหรือน้อยตามที่คุณต้องการ หากคุณต้องการดูเนื้อหารีจิสเตอร์ในหน้าต่างข้างๆ ดีบักเกอร์ คุณก็สามารถทำได้ หากคุณต้องการที่จะออกไปข้างนอกและมีบางอย่างที่ดูเหมือน OllyDbg มากขึ้น คุณก็สามารถทำได้เช่นกัน
มุมมองในตัวมีไว้สำหรับ:
การตั้งค่าของผู้เขียนมีลักษณะดังนี้:
คำสั่งดีบักเกอร์ใดๆ สามารถแยกออกเป็นมุมมองและไฮไลต์ด้วย Pygments lexer ที่ระบุ:
ภาพหน้าจอเพิ่มเติมอยู่ที่นี่
Voltron รองรับ LLDB, GDB, VDB และ WinDbg/CDB (ผ่าน PyKD) และทำงานบน macOS, Linux และ Windows
การสนับสนุน WinDbg ยังค่อนข้างใหม่ โปรดเปิดปัญหาหากคุณมีปัญหา
รองรับสถาปัตยกรรมต่อไปนี้:
lldb | จีดีบี | วีดีบี | ลมบีจี | |
---|---|---|---|---|
x86 | ||||
x86_64 | ||||
แขน | ||||
อาร์ม64 | ||||
เพาเวอร์พีซี |
หมายเหตุ: เฉพาะอนุพันธ์ของ macOS และ Debian เท่านั้นที่ได้รับการสนับสนุนโดยสคริปต์การติดตั้งอย่างสมบูรณ์ หวังว่ามันจะไม่ล้มเหลวบน Linux distros อื่น ๆ แต่จะไม่พยายามติดตั้งการขึ้นต่อกันของแพ็คเกจ หากคุณกำลังใช้ distro อื่น ให้ดูที่ 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 ที่ไม่มีเชลล์ มีปัญหาในการติดตั้ง หรือต้องการติดตั้งด้วยตนเอง โปรดดูเอกสารประกอบการติดตั้งด้วยตนเอง
หากดีบักเกอร์ของคุณมีสคริปต์เริ่มต้น ( .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
จีดีบี:
source /path/to/voltron/entry.py
เริ่มดีบักเกอร์และเริ่มต้น Voltron ด้วยตนเองหากจำเป็น
ใน LLDB เวอร์ชันล่าสุด คุณไม่จำเป็นต้องเริ่มต้น Voltron ด้วยตนเอง:
$ lldb target_binary
ใน LLDB เวอร์ชันเก่าคุณต้องเรียก voltron init
หลังจากที่คุณโหลดอันที่ด้อยกว่า:
$ lldb target_binary
(lldb) voltron init
จีดีบี:
$ gdb target_binary
วีดีบี:
$ ./vdbbin target_binary
> script /path/to/voltron/entry.py
WinDbg/CDB รองรับการทำงานผ่าน Bash ด้วย Linux userland เท่านั้น ผู้เขียนทดสอบกับ Git Bash และ ConEmu สามารถโหลด PyKD และ Voltron ได้ในคำสั่งเดียวเมื่อเรียกใช้งานดีบักเกอร์:
$ cdb -c '.load C:pathtopykd.pyd ; !py --global C:pathtovoltronentry.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 ของดีบักเกอร์ โดยใช้กลไก "stop hook" ของดีบักเกอร์ ดังนั้นทุกครั้งที่คุณก้าวหรือดำเนินการต่อและถึงจุดพัก มุมมองจะอัปเดต
ดูวิกิบน github
ถาม: เหตุใดฉันจึงได้รับ ImportError
กำลังโหลด Voltron
ตอบ คุณอาจติดตั้ง Python หลายเวอร์ชันและติดตั้ง Voltron โดยใช้เวอร์ชันที่ไม่ถูกต้อง ดูคำแนะนำการติดตั้งโดยละเอียดเพิ่มเติม
ถาม GEF? เปดา? PwnDbg? gdbinit ของ fG?
A. ส่วนขยายที่ยอดเยี่ยมทั้งหมดสำหรับ GDB เครื่องมือเหล่านี้จัดเตรียมชุดคำสั่งเพิ่มเติมสำหรับงานการหาประโยชน์เป็นหลัก แต่แต่ละคำสั่งยังมีหน้าจอ "บริบท" พร้อมมุมมองของรีจิสเตอร์ สแตก โค้ด ฯลฯ เช่น โวลตรอน เครื่องมือเหล่านี้พิมพ์การแสดงบริบทในคอนโซลดีบักเกอร์ทุกครั้งที่หยุดดีบักเกอร์ Voltron ใช้แนวทางที่แตกต่างโดยการฝังเซิร์ฟเวอร์ RPC ไว้ในดีบักเกอร์ และเปิดใช้งานการแนบมุมมองจากเทอร์มินัลอื่นๆ (หรือแม้แต่เว็บเบราว์เซอร์ หรือขณะนี้ซิงโครไนซ์กับ Binary Ninja) ซึ่งช่วยให้ผู้ใช้สามารถสร้างอินเทอร์เฟซหลายหน้าต่างที่สะอาดขึ้น ดีบักเกอร์ของพวกเขา Voltron ใช้งานได้ดีควบคู่ไปกับเครื่องมือเหล่านี้ทั้งหมด คุณสามารถปิดการใช้งานการแสดงบริบทในส่วนขยาย GDB ที่คุณเลือกและเชื่อมต่อมุมมอง Voltron บางส่วนได้ ในขณะที่ยังคงได้รับประโยชน์ทั้งหมดจากคำสั่งที่มีประโยชน์ที่เพิ่มโดยเครื่องมือเหล่านี้
ดูตัวติดตามปัญหาบน GitHub สำหรับข้อมูลเพิ่มเติมหรือส่งปัญหา
หากคุณประสบปัญหา ImportError
กำลังโหลด Voltron โปรดตรวจสอบให้แน่ใจว่าคุณได้ปฏิบัติตามคำแนะนำในการติดตั้งสำหรับแพลตฟอร์มของคุณ
ใน LLDB เวอร์ชันเก่า คำสั่ง voltron init
จะต้องรันด้วยตนเองหลังจากโหลดเป้าหมายการดีบัก เนื่องจากต้องโหลดเป้าหมายก่อนที่จะสามารถติดตั้ง hooks ของ Voltron ได้ Voltron จะพยายามลงทะเบียนตัวจัดการเหตุการณ์โดยอัตโนมัติ และจะแจ้งให้ผู้ใช้ทราบหากจำเป็นต้องใช้ voltron init
ข้อมูลเพิ่มเติมเกี่ยวกับการสนับสนุน WinDbg/CDB ที่นี่
ผู้เขียนใช้ Voltron กับ LLDB เวอร์ชันล่าสุดบน macOS เป็นหลัก เราจะพยายามทดสอบทุกอย่างบนแพลตฟอร์มและสถาปัตยกรรมมากที่สุดเท่าที่จะเป็นไปได้ก่อนที่จะเผยแพร่ แต่ LLDB/macOS/x64 จะเป็นชุดค่าผสมที่ใช้บ่อยที่สุด หวังว่าโวลตรอนจะไม่ทำให้สัตว์เลี้ยงของคุณติดไฟ แต่เป็น YMMV
ดูไฟล์ใบอนุญาต
ถ้าคุณใช้สิ่งนี้และไม่เกลียดมัน ซื้อเบียร์ให้ฉันที่งานประชุมสักครั้ง ใบอนุญาตนี้ยังครอบคลุมถึงผู้ร่วมให้ข้อมูลคนอื่นๆ ด้วย - richo สมควรได้รับเบียร์สักสองสามแก้วสำหรับการมีส่วนร่วมของเขา
ขอขอบคุณอดีตนายจ้างของฉัน Assurance และ Azimuth Security ที่สละเวลาให้ฉันทำงานด้านนี้
อุปกรณ์ประกอบฉากสำหรับ Richo สำหรับการมีส่วนร่วมทั้งหมดของเขาให้กับ Voltron
gdbinit ของ fG! เป็นแรงบันดาลใจดั้งเดิมของโปรเจ็กต์นี้
ขอขอบคุณ Willi สำหรับการใช้งานการสนับสนุน VDB
ปัจจุบัน Voltron ใช้ Capstone สำหรับการถอดแยกชิ้นส่วน เช่นเดียวกับกลไกการแยกชิ้นส่วนภายในของโฮสต์ดีบักเกอร์ Capstone คือตัวถอดประกอบแบบโอเพ่นซอร์สที่มีสถาปัตยกรรมหลากหลายอันทรงพลัง ซึ่งใช้ในการสร้างวิศวกรรมย้อนกลับและเครื่องมือแก้ไขข้อบกพร่องรุ่นต่อไป ตรวจสอบออก
ขอขอบคุณปู่ทวดที่มีส่วนร่วมอย่างต่อเนื่อง