
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的更多信息,则可以访问我们的发布博客文章。