
LLEF (ออกเสียงɬɛF - "Hlyeff") เป็นปลั๊กอิน LLDB เพื่อให้สามารถใช้งานได้มากขึ้นสำหรับ RE และ VR ระดับต่ำ คล้ายกับ GEF แต่สำหรับ LLDB
มันใช้ Python API ของ LLDB เพื่อเพิ่มเอาต์พุตสถานะพิเศษและคำสั่งใหม่สองสามข้อเพื่อให้นักวิจัยด้านความปลอดภัยสามารถใช้ LLDB ได้ง่ายขึ้นเพื่อวิเคราะห์ซอฟต์แวร์เมื่อทำงานอยู่
คำแนะนำด้านล่างจะติดตั้ง LLEF เพื่อให้ใช้โดย LLDB โดยค่าเริ่มต้น
cd <repo>./install.sh~/.lldbinit ) หรือการติดตั้งด้วยตนเองLLDB ใช้ไวยากรณ์ AT&T Disassembly สำหรับ X86 Binaries โดยค่าเริ่มต้น ตัวติดตั้งมีตัวเลือกในการแทนที่สิ่งนี้
lldb-15 < optional binary to debug >คำสั่งต่าง ๆ สำหรับการตั้งค่าการบันทึกการโหลดและการแสดงรายการคำสั่งเฉพาะ LLEF:
(lldb) llefsettings --help
list list all settings
save Save settings to config file
reload Reload settings from config file (retain session values)
reset Reload settings from config file (purge session values)
set Set LLEF settings
การตั้งค่าจะถูกเก็บไว้ในไฟล์ .llef llef ที่อยู่ในโฮมไดเร็กตอรี่ของคุณจัดรูปแบบดังต่อไปนี้:
[LLEF]
<llefsettings> = <value>
| การตั้งค่า | พิมพ์ | คำอธิบาย |
|---|---|---|
| color_output | บูลีน | เปิด/ปิดการใช้งานเทอร์มินัลสี |
| register_coloring | บูลีน | เปิด/ปิดการใช้งานการลงทะเบียนสี |
| show_legend | บูลีน | เปิดใช้งาน/ปิดการใช้งาน |
| show_registers | บูลีน | เปิด/ปิดการใช้งานเอาต์พุตการลงทะเบียน |
| show_stack | บูลีน | เปิด/ปิดการใช้งานสแต็กเอาต์พุต |
| show_code | บูลีน | เปิด/ปิดการใช้งานเอาต์พุตรหัส |
| show_threads | บูลีน | เปิด/ปิดการใช้งานเอาต์พุตเธรด |
| show_trace | บูลีน | เปิด/ปิดการใช้งานเอาต์พุต |
| force_arch | สาย | Force Register Display Architecture (ทดลอง) |
| rebase_addresses | บูลีน | เปิด/ปิดการใช้งานการรีไซเคิลที่อยู่ |
| rebase_offset | int | ตั้งค่าการชดเชยการรีเบส (ค่าเริ่มต้น 0x100000) |
| show_all_registers | บูลีน | เปิด/ปิดการใช้งานการลงทะเบียนเพิ่มเติม |
อนุญาตให้ตั้งค่าสี llef gui:
(lldb) llefcolorsettings --help
list list all color settings
save Save settings to config file
reload Reload settings from config file (retain session values)
reset Reload settings from config file (purge session values)
set Set LLEF color settings
สีที่รองรับ: สีน้ำเงิน, เขียว, เหลือง, สีแดง, สีชมพู, สีฟ้า, สีเทา
| สี |
|---|
| register_color |
| modified_register_color |
| code_color |
| heap_color |
| stack_color |
| string_color |
| stack_address_color |
| function_name_color |
| คำแนะนำ _Color |
| HIGHLIGHT_INSTRUCTION_COLOR |
| line_color |
| rebased_address_color |
| section_header_color |
| ไฮไลต์ _index_color |
| index_color |
| dereferenced_value_color |
| dereferenced_register_color |
| frame_argument_name_color |
| read_memory_address_color |
ดูเนื้อหาหน่วยความจำด้วย:
(lldb) hexdump type address [--size SIZE] [--reverse]
เช่น
(lldb) hexdump byte 0x7fffffffecc8 --size 0x38
0x7fffffffecc8 3d 2f 75 73 72 2f 6c 6f 63 61 6c 2f 73 62 69 6e =/usr/local/sbin
0x7fffffffecd8 3a 2f 75 73 72 2f 6c 6f 63 61 6c 2f 62 69 6e 3a :/usr/local/bin:
0x7fffffffece8 2f 75 73 72 2f 73 62 69 6e 3a 2f 75 73 72 2f 62 /usr/sbin:/usr/b
0x7fffffffecf8 69 6e 3a 2f 73 62 69 6e in:/sbin
(lldb) hexdump word 0x7fffffffecc8 --reverse
0x7fffffffece6│+001e: 0x4654
0x7fffffffece4│+001c: 0x4361
0x7fffffffece2│+001a: 0x746f
0x7fffffffece0│+0018: 0x4e23
0x7fffffffecde│+0016: 0x3f73
0x7fffffffecdc│+0014: 0x6968
0x7fffffffecda│+0012: 0x742d
0x7fffffffecd8│+0010: 0x6564
0x7fffffffecd6│+000e: 0x6f63
0x7fffffffecd4│+000c: 0x6564
0x7fffffffecd2│+000a: 0x2d75
0x7fffffffecd0│+0008: 0x6f79
0x7fffffffecce│+0006: 0x2d64
0x7fffffffeccc│+0004: 0x6964
0x7fffffffecca│+0002: 0x2d79
0x7fffffffecc8│+0000: 0x6857
รีเฟรช llef gui ด้วย:
(lldb) context
รีเฟรชส่วนประกอบของ LLEF GUI ด้วย:
(lldb) context [{registers,stack,code,threads,trace,all} ...]
(lldb) pattern create 10
[+] Generating a pattern of 10 bytes (n=4)
aaaabaaaca
[+] Pattern saved in variable: $8
(lldb) pattern create 100 -n 2
[+] Generating a pattern of 100 bytes (n=2)
aabacadaea
[+] Pattern saved in variable: $9
(lldb) pattern search $rdx
[+] Found in $10 at index 45 (big endian)
(lldb) pattern search $8
[+] Found in $10 at index 0 (little endian)
(lldb) pattern search aaaabaaac
[+] Found in $8 at index 0 (little endian)
(lldb) pattern search 0x61616161626161616361
[+] Found in $8 at index 0 (little endian)
นี่คืออัตโนมัติและพิมพ์ข้อมูลที่นำไปใช้ทั้งหมดในปัจจุบัน ณ จุดพัก
สามารถกำหนดค่าได้ด้วยการตั้ง rebase_addresses การตั้งค่าที่อยู่ rebasing จะทำการค้นหาสำหรับที่อยู่รหัสแต่ละตัวที่แสดงในเอาต์พุตเพื่อแสดงที่อยู่ไบนารีและที่เกี่ยวข้องที่เกี่ยวข้อง ที่อยู่สัมพัทธ์นี้ถูกชดเชยด้วยค่าที่กำหนดในการตั้งค่า rebase_offset ซึ่งค่าเริ่มต้นไปยังที่อยู่ฐาน Ghidra ของ 0x100000 ผลลัพธ์คือผลลัพธ์ที่อยู่ที่สามารถคัดลอกและวางลงในคุณสมบัติ "ไปที่ที่อยู่" ได้อย่างง่ายดายโดยไม่ต้องทำคณิตศาสตร์เพื่อแปลงจากที่อยู่รันไทม์
ที่อยู่ที่รีดใหม่จะแสดงในวงเล็บหลังจากที่อยู่รันไทม์: 
LLDB มาพร้อมกับโมดูล Python ที่จำเป็นสำหรับ LLEF ในการทำงาน หากเปิดตัว LLDB ด้วย LLEF คุณจะพบกับข้อความ ModuleNotFoundError อาจเป็นไปได้ว่าคุณจะต้องเพิ่มโมดูล LLDB Python ด้วยตนเองบนเส้นทาง Python ของคุณด้วยตนเอง
ในการดำเนินการนี้เรียกใช้สิ่งต่อไปนี้เพื่อสร้างสถานที่ตั้งเว็บไซต์ของคุณ:
python3 -m site --user-site จากนั้นค้นหาตำแหน่งโมดูล LLDB Python โดยทั่วไปจะอยู่ในตำแหน่งเช่น /usr/lib/llvm-15/lib/python3.10/dist-packages แต่ขึ้นอยู่กับรุ่น Python ของคุณ
ในที่สุดแก้ไขและดำเนินการต่อไปนี้เพื่อเพิ่มพา ธ โมดูล LLDB ด้านบนลงในไฟล์ใหม่ lldb.pth ในตำแหน่งแพคเกจไซต์ที่ค้นพบด้านบน
echo " /usr/lib/llvm-15/lib/python3.10/dist-packages " > ~ /.local/lib/python3.10/site-packages/lldb.pth การแสดงผล LLEF ในแต่ละจุดพักได้รับการสังเกตว่าช้าในบางแพลตฟอร์ม สาเหตุที่แท้จริงของสิ่งนี้ได้ถูกโยงไปถึงการโทร GetMemoryRegions LLDB API โชคดีที่สิ่งนี้ใช้เพื่อระบุว่าค่าลงทะเบียนชี้ไปที่รหัสสแต็กหรือที่อยู่ฮีป
ในการปิดใช้งานการลงทะเบียนสีและอาจปรับปรุงประสิทธิภาพของ LLEF ได้อย่างมีนัยสำคัญปิดการใช้งานคุณสมบัติ register_coloring โดยใช้คำสั่ง llefsettings ต่อไปนี้
llefsettings set register_coloring False
เห็นได้ชัดว่าเรากำลังยืนอยู่บนไหล่ของยักษ์ที่นี่ - เราต้องการให้เครดิต Houngsy สำหรับ GEF โดยเฉพาะอย่างยิ่งซึ่งเครื่องมือนี้ได้รับแรงบันดาลใจ อย่างหนัก ! โปรดพิจารณาการเลียนแบบนี้เป็นคำเยินยอ?
หากคุณต้องการอ่านเพิ่มเติมเกี่ยวกับ LLEF คุณสามารถเยี่ยมชมโพสต์บล็อก Launch ของเรา