基于eBPF的安卓CLI调试器——eDBG
简介
eDBG 是一款基于 eBPF 技术实现的调试工具,为强对抗场景下的安卓 native 逆向工作打造,提供调试器应有的基本功能,在调试时不产生任何附加到目标进程的行为,不使用传统的调试方案,调试器与被调试程序相互独立,仅各自与内核产生交互行为,难以被目标进程调试或干扰。
除此之外,eDBG 和被调试程序运行状态互不干扰,断点注册不基于运行时地址,即使一方意外退出或重启,另一方也依旧能正常工作。
eDBG 的使用方式与 gdb 的使用方式几乎相同,无需学习便可直接上手使用。
项目地址:https://github.com/ShinoLeah/eDBG
主要功能
主要支持的功能如下:
- 断点:基于 uprobes 功能实现,在断点处可暂停程序并且读取任意想要的上下文。
- 单步调试:支持步入或步过。
- 内存读写:在断点触发时可以读取任意地址内存,也可以自由写入任意有写权限的地址。
- 线程过滤:你可以仅调试一个或多个想要的线程。
- 符号解析、反汇编等其他调试器应该有的功能。
支持的 gdb 指令列表:break / continue / step / next / finish / until / examine / display / quit / list / info / thread
额外的,你可以使用 write
指令写入内存,set
指令为指定的地址标注你的自定义符号。
eDBG 也支持将你的进度保存到文件或读取工程文件,以便下一次调试。
详细的使用方式请移步:https://github.com/ShinoLeah/eDBG/blob/main/README.md
运行环境
- 目前仅支持 ARM64 架构的 Android 系统,需要 ROOT 权限,推荐搭配 KernelSU 使用
- 系统内核版本5.10+ (可执行
uname -r
查看)
功能演示
整体的界面设计和信息展示参考了 pwndbg,会在断点处自动分析当前代码和寄存器信息,当然你可以在选项里关掉这些显示。
进阶使用
eDBG 使用进阶:避免 uprobes 产生可被察觉的特征
其他
本项目主要受到 stackplz 启发,在实际逆向工作中我常常使用 stackplz 辅助 ida 进行动态调试,但常常被堆积如山的反调试手段或蜜罐打得鼻青脸肿…(菜菜),因此突发奇想将 eBPF 技术直接用于打造一个调试器,虽然比 ida 缺少了图形化界面和反编译(但是现在的 app 还有可以直接 F5 的吗),但是我认为功能也足够作为一个逆向辅助工具进行日常使用。
喜欢的话可以赏个小星星 QAQ → https://github.com/ShinoLeah/eDBG