使用 Frida 从 Android 手机创建 QMI 跟踪以对 LTE 语音进行逆向工程

这是 Alexander 'lynxis' Couzens 撰写的客座博客,介绍了 OpenIMSd 项目及相关研究。

  • 背景与需求:为研究基于 Qualcomm 手机的 LTE 语音栈工作原理,需研究 QMI 接口。QMI 是使用 TLV 的结构化接口,可通过多种传输方式通信,如 USB、共享内存等。研究原生 Android 的 QMI VoLTE 消息需捕获这些消息,曾用 osmo-qcdiag 但它仅支持特定方式。因 osmo-qcdiag 内核驱动支持有限,尝试在 SCAT 中添加 QMI 嗅探但未成功,还可通过编译自定义 Android 镜像或使用调试器来获取 QMI 消息,注意到 Frida 可用于捕获 iPhone 上的 QMI 消息,遂尝试在 OnePlus 6T(安卓系统且已 root)上使用 Frida 来捕获 QMI 消息。
  • 工作原理:Frida 有运行在安卓手机上的远程服务器和运行在笔记本上的客户端(Python 库实现),客户端通过 adb 指示服务器将 JavaScript 引擎注入进程,连接到 JavaScript 引擎并上传脚本,脚本包含提取 QMI 消息的回调和代码,Frida 将其传输到客户端,客户端将 QMI 封装为 GSMTAPv3。
  • 使用方法:需在安卓系统(OnePlus 6T)上使用 root 版 LineageOS,下载 frida 服务器并运行,准备并运行 qmi-frida-tracer,包含克隆仓库、创建虚拟环境安装 frida 等步骤,qmi-frida-tracer 嗅探进程的所有 QMI 消息并封装为 GSMTAPv3 传输到localhost:4729,还可通过 tcpdump 捕获 QMI 流量并解码消息,仍有部分可改进之处如模拟客户端 ID、Wireshark 支持 GSMTAPv3 解码等。
  • 示例捕获:给出了捕获的 QMI 消息示例,如关于信号信息和设置 IP 族的消息。
  • 更多信息:若想为 OpenIMSD 做贡献或关注其发展,可查看其主页[https://openimsd.com]、Matrix [#openimsd:postmarketos.org]、IRC #openimsd on OFTC。
阅读 10
0 条评论