
llef(發音為ɬɛf - “ hlyeff”)是LLDB插件,可使其更適合低級RE和VR。類似於GEF,但對於LLDB。
它使用LLDB的Python API添加了額外的狀態輸出和一些新命令,以便安全研究人員可以更輕鬆地使用LLDB在運行時分析軟件。
下面的說明將安裝llef,以便默認情況下LLDB使用它。
cd <repo>./install.sh~/.lldbinit )或手動安裝。LLDB默認情況下使用X86二進製文件的AT&T拆卸語法。安裝程序提供了覆蓋此問題的選項。
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]
<llefsettings> = <value>
| 環境 | 類型 | 描述 |
|---|---|---|
| color_output | 布爾 | 啟用/禁用顏色終端輸出 |
| register_coloring | 布爾 | 啟用/禁用寄存器著色 |
| show_legend | 布爾 | 啟用/禁用傳奇輸出 |
| show_registers | 布爾 | 啟用/禁用寄存器輸出 |
| show_stack | 布爾 | 啟用/禁用堆棧輸出 |
| show_code | 布爾 | 啟用/禁用代碼輸出 |
| show_threads | 布爾 | 啟用/禁用線程輸出 |
| show_trace | 布爾 | 啟用/禁用跟踪輸出 |
| force_arch | 細繩 | 力寄存器顯示體系結構(實驗) |
| rebase_addresses | 布爾 | 啟用/禁用地址重新輸出 |
| rebase_offset | int | 設置rebase偏移(默認為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 |
| HAPE_COLOR |
| stack_color |
| String_color |
| stack_address_color |
| function_name_color |
| 指令_COLOR |
| 突出顯示_instruction_color |
| line_color |
| rebased_address_color |
| section_header_color |
| 突出顯示_INDEX_COLOR |
| index_color |
| derecreded_value_color |
| DERECERDECTED_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所定義的值,該值默認為0x100000的Ghidra基礎地址。結果是一個地址輸出,可以輕鬆地複制並粘貼到IDE“ to Address”功能中,而無需進行數學以從運行時地址轉換。
在運行時地址之後,重新的地址在括號中顯示: 
LLDB與LLEF運行所需的Python模塊捆綁在一起。如果在使用LLEF啟動LLDB時,您會遇到ModuleNotFoundError消息,則可能需要在Python路徑上手動添加LLDB 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輸出速度很慢。其根本原因已將其追溯到LLDB API呼叫的基礎GetMemoryRegions 。幸運的是,這僅用於識別寄存器值是否指向代碼,堆棧或堆地址。
要禁用寄存器著色,並可能顯著提高LLEF性能,請使用以下llefsettings命令禁用register_coloring功能。
llefsettings set register_coloring False
顯然,我們站在這裡的巨人肩上 - 我們想特別歸功於GEF,該工具從中汲取了沉重的靈感!請認為這種模仿是奉承?
如果您想閱讀有關LLEF的更多信息,則可以訪問我們的發布博客文章。