-
-
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期)!