
LLEF (diucapkan ɬɛF - "Hlyeff") adalah plugin LLDB untuk membuatnya lebih bermanfaat untuk RE dan VR tingkat rendah. Mirip dengan GEF, tetapi untuk LLDB.
Ini menggunakan API Python LLDB untuk menambahkan output status tambahan dan beberapa perintah baru, sehingga peneliti keamanan dapat lebih mudah menggunakan LLDB untuk menganalisis perangkat lunak saat berjalan.
Instruksi di bawah ini akan menginstal LLEF sehingga digunakan oleh LLDB secara default.
cd <repo>./install.sh~/.lldbinit ) atau instalasi manual.LLDB menggunakan sintaks AT&T Disassembly untuk biner x86 secara default. Penginstal menyediakan opsi untuk mengesampingkan ini.
lldb-15 < optional binary to debug >Berbagai perintah untuk mengatur, menyimpan, memuat dan mendaftar perintah spesifik 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
Pengaturan disimpan dalam file .llef yang terletak di direktori home Anda diformat sebagai berikut:
[LLEF]
<llefsettings> = <value>
| Pengaturan | Jenis | Keterangan |
|---|---|---|
| color_output | Boolean | Aktifkan/Nonaktifkan Output Terminal Warna |
| register_coloring | Boolean | Aktifkan/Nonaktifkan Pewarnaan Register |
| show_legend | Boolean | Aktifkan/Nonaktifkan Output Legenda |
| show_registers | Boolean | Aktifkan/Nonaktifkan Output Register |
| show_stack | Boolean | Mengaktifkan/menonaktifkan output tumpukan |
| show_code | Boolean | Aktifkan/Nonaktifkan Output Kode |
| show_threads | Boolean | Mengaktifkan/menonaktifkan output utas |
| show_trace | Boolean | Aktifkan/Nonaktifkan Output Jejak |
| force_arch | Rangkaian | Arsitektur tampilan Daftar Paksa (Eksperimental) |
| rebase_addresses | Boolean | Aktifkan/Nonaktifkan Alamat Rebase Output |
| Rebase_offset | Int | Atur Rebase Offset (default 0x100000) |
| show_all_registers | Boolean | Mengaktifkan/menonaktifkan output register yang diperluas |
Memungkinkan pengaturan warna 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
Warna yang didukung: biru, hijau, kuning, merah, merah muda, cyan, abu -abu
| Warna |
|---|
| register_color |
| MODIFIED_REGISTER_COLOR |
| code_color |
| heap_color |
| STACK_COLOR |
| string_color |
| stack_address_color |
| function_name_color |
| Instruksion_color |
| Sorotan_instruction_color |
| line_color |
| Rebased_address_color |
| section_header_color |
| Sorotan_index_color |
| index_color |
| Dereferenced_value_color |
| Dereferenced_register_color |
| frame_argument_name_color |
| read_memory_address_color |
Lihat Isi Memori dengan:
(lldb) hexdump type address [--size SIZE] [--reverse]
misalnya
(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
Segarkan llef gui dengan:
(lldb) context
Komponen penyegaran llef gui dengan:
(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)
Ini otomatis dan mencetak semua informasi yang saat ini diimplementasikan pada titik istirahat.
Dapat dikonfigurasi dengan pengaturan rebase_addresses Fitur Rebasing alamat melakukan pencarian untuk setiap alamat kode yang disajikan dalam output untuk menampilkan alamat biner dan relatif terkait. Alamat relatif ini diimbangi dengan nilai yang ditentukan dalam pengaturan rebase_offset mana yang default ke alamat basis GHIDRA 0x100000 . Hasilnya adalah output alamat yang dapat dengan mudah disalin dan ditempelkan ke fitur "Go to Address" IDE tanpa harus melakukan matematika untuk dikonversi dari alamat runtime.
Alamat yang dibuka kembali ditampilkan dalam tanda kurung setelah alamat runtime: 
LLDB dilengkapi dengan modul Python yang diperlukan untuk dijalankan LLEF. Jika saat meluncurkan LLDB dengan LLEF Anda menemukan pesan ModuleNotFoundError , kemungkinan Anda perlu secara manual menambahkan modul Python LLDB di jalur Python Anda.
Untuk melakukan ini jalankan yang berikut untuk membuat lokasi paket situs Anda:
python3 -m site --user-site Kemudian temukan lokasi modul LLDB Python. Ini biasanya di lokasi seperti /usr/lib/llvm-15/lib/python3.10/dist-packages tetapi tergantung pada versi python Anda.
Akhirnya, ubah dan jalankan yang berikut untuk menambahkan jalur modul LLDB di atas ke file baru lldb.pth di lokasi paket situs yang ditemukan di atas.
echo " /usr/lib/llvm-15/lib/python3.10/dist-packages " > ~ /.local/lib/python3.10/site-packages/lldb.pth Render output LLEF di setiap breakpoint telah diamati lambat pada beberapa platform. Akar penyebab ini telah ditelusuri ke panggilan API LLDB GetMemoryRegions yang mendasarinya. Untungnya, ini hanya digunakan untuk mengidentifikasi apakah nilai register menunjuk ke kode, tumpukan atau alamat tumpukan.
Untuk menonaktifkan pewarnaan register, dan berpotensi meningkatkan kinerja LLEF secara signifikan, menonaktifkan fitur register_coloring menggunakan perintah llefsettings berikut.
llefsettings set register_coloring False
Kami jelas berdiri di pundak raksasa di sini - kami ingin menghargai Hugsy untuk GEF khususnya, dari mana alat ini menarik inspirasi besar ! Harap pertimbangkan imitasi ini sebagai sanjungan?
Jika Anda ingin membaca lebih banyak tentang LLEF, Anda dapat mengunjungi posting blog peluncuran kami.