首页
社区
课程
招聘
binder-trace:基于内核采集的 Android Binder 调用观测工具
发表于: 2小时前 78

binder-trace:基于内核采集的 Android Binder 调用观测工具

2小时前
78

项目地址:04cK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6X3N6i4q4A6N6h3I4#2L8#2)9J5c8X3u0A6L8X3c8W2M7W2)9J5k6s2c8J5j5h3y4W2

最近整理了一个 Android Binder 调用观测工具 binder-trace。它不是在 Java/Native 层做 hook,而是通过内核模块采集 Binder transaction,在用户态提供 WebUI、TUI、JSONL 和 MCP 查询接口,适合排查系统服务调用、接口频率、payload 和 reply 关联关系。

Android 上很多跨进程行为最后都会落到 Binder。平时看 logcat、Frida hook 都能解决一部分问题,但如果想从 Binder transaction 这一层持续观察系统服务调用,常见需求会变成:

binder-trace 的目标就是把这类观察流程收敛成一个工具链:内核侧负责采集,用户态负责控制、解析、存储和展示。

需要一台已 root 的 Android 设备,并准备:

先确认设备信息:

把文件推到设备:

加载内核模块并确认功能:

如果设备已经加载过旧模块,可以先卸载:

这里要注意,rmmod 会等待已经进入 Binder hook 的线程退出。如果设备上存在长时间阻塞的 Binder read / looper 线程,卸载可能需要等一段时间。

日常查看推荐用 WebUI。先转发端口:

在设备侧启动:

电脑浏览器打开:

常见过滤方式:

--no-enable 用于只读取现有事件流,不主动修改内核捕获配置。WebUI 的过滤和分页在后端执行,浏览器只渲染当前窗口,不会因为前端窗口大小丢掉后端已捕获事件。

如果只是临时排查,TUI 更适合直接在终端里看:

也可以按目标缩小范围:

如果要接脚本或后续分析,可以输出 JSONL:

事件外层是统一消息信封,object 表示事件类型,data 是对应载荷。这样后面用 jq、Python 或其他工具处理会比较直接。

MCP 入口适合让 AI assistant 在线查询 Binder trace。先转发端口:

设备侧启动 MCP 服务:

桌面 MCP client 连接本机转发后的地址即可,核心是 Streamable HTTP,并指向 /mcp

默认 MCP 只读取实时事件流,不修改内核捕获配置。如果需要允许 AI 开关 Binder trace,需要显式加 --allow-control,也可以配合 --enable --uid 1000 这类参数启动。

adb shell getprop ro.product.cpu.abi
adb shell uname -r
adb shell su -c id
adb shell mkdir -p /data/local/tmp/binder-trace
adb push binder-trace /data/local/tmp/binder-trace/binder-trace
adb push bt-kmod.ko /data/local/tmp/binder-trace/bt-kmod.ko
adb shell chmod 755 /data/local/tmp/binder-trace/binder-trace
adb shell su -c 'insmod /data/local/tmp/binder-trace/bt-kmod.ko'
adb shell su -c 'lsmod | grep bt_kmod'
adb shell su -c '/data/local/tmp/binder-trace/binder-trace ipc feature'
adb shell su -c 'rmmod bt_kmod'

[招生]科锐逆向工程师培训(2026年7月3日实地,远程教学同时开班, 第56期)!

最后于 1小时前 被fuqiuluo73编辑 ,原因:
收藏
免费 1
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回