更新时间:2024-03-27 04:30作者:小乐
SCAT 是一种用Python 编写的信令收集和分析工具,可通过USB 解析来自高通和三星基带的诊断信息,并生成包含蜂窝控制平面消息的GSMTAP 数据包流。
安装需要电脑
目前只在Linux上进行了测试,而且大部分都是Ubuntu的各种衍生版本。 Python版本必须至少为python 3,并且需要安装以下外部模块:
pyUSB
py串口
要正确解码SCAT 生成的GSMTAP 数据包,需要Wireshark 2.6.0 或更高版本。对于旧版本的Wireshark,我们提供了Wireshark Lua插件来帮助扩展GSMTAP解码功能。 SCAT 使用的GSMTAP 定义基于libosmocore 0.11.0。
手机
蜂窝设备必须通过USB 公开诊断端口。这主要取决于所使用的设备,我们无法为所有设备提供通用的解决方案。使用关键字(您的设备名称)qpst 在线搜索,了解基于Qualcomm 的智能手机如何公开诊断端口。
三星:在拨号器中输入*#0808#,选择任意包含DM的USB模式条目;
韩文版:在拨号器中输入3197123580,密码为9964127764320821。
2018年之后的某些版本的固件将阻止使用上述代码访问隐藏菜单。目前还没有解决办法。
LG:在拨号器中输入277634#*#(TODO:USB 测试菜单的确切位置)
在某些LG 设备上,即使启用了USB 测试模式诊断端口,Linux 中也不会公开该端口。这是由于使用多个USB 设备配置引起的;建议更改此类设备中当前USB 配置的udev 规则。
索尼:需要root。获取具有root 权限的adb shell,然后输入命令setprop persist.usb.eng 1。
Nexus:需要root。获取具有root 权限的adb shell,然后输入命令setprop sys.usb.config diag,adb。
不适用于Pixel 设备!
Sailfish OS:(TODO:如何修改USB 模式设置)
虽然我们建议您直接使用USB 来访问诊断端口,但如果您的智能手机的诊断端口可以通过串行端口访问,那也是一个不错的选择。所有基于高通的智能手机的qcserial 内核模块都不包含有关诊断端口的信息,基于三星的智能手机也没有这样的模块。
通过USB 访问基带诊断:
$ scat.py -t qc -u -a 001:010 -i 2
-t qc 定义我们正在解析高通基带。对于三星基带,qc需要替换为sec,并且需要我们手动提供型号,如下图:
$ scat.py -t 秒-m e333 -u -a 001:006 -i 2
可用的型号类型如下:
-m cmc221s:CMC221S,用于早期三星LTE 调制解调器/智能手机;
-m e303:调制解调器芯片Exynos Modem 303;
-m e333:调制解调器芯片Exynos 调制解调器333
较新的Exynos 调制解调器可使用-m e333 选项YMMV。
尽管可以通过启发式方法来确定连接的设备,但建议您明确指定诊断节点的USB 设备地址和接口号。 -a 001:010 指定一个地址,其语法与lsusb 命令中的语法相同。 -i 2 指定诊断节点的接口号,该接口号也是设备特定的。
通过串行端口访问基带诊断:
$ scat.py -t qc -s /dev/ttyUSB0
将/dev/ttyUSB0 替换为您的诊断设备。
默认情况下,scat 将数据包发送到127.0.0.1,控制平面数据包作为gsmtap 发送到udp 端口4729,用户平面数据包作为ip 发送到udp 端口47290。
使用Ctrl+C 退出应用程序。
高级选项
可以使用-H 127.0.0.2 开关更改发送GSMTAP 数据包的目的地。例如,以下命令将所有数据包发送到127.0.0.2:
$ scat.py -t 秒-m e333 -u -a 001:006 -i 2 -H 127.0.0.2
使用以下命令可以使用Wireshark 轻松对其进行排序:
ifconfig ethUSB 127.0.0.2 网络掩码255.255.255.0 upsudo 路由添加-net 127.0.0.0 网络掩码255.255.255.0 gw 127.0.0.1
USB 总线地址可以使用其他命令的输出自动确定。以下示例适用于Samsung Galaxy S5 Mini:
设备名称/型号处理器基带必要参数是/否需要root
诺基亚8110 4G (TA-1048)Snapdragon 205 MSM8905X5-t qc是
谷歌Nexus 5 (LG-D821)Snapdragon 800 MSM8974MDM9x25-t qc是
谷歌Nexus 5X (LG-H791)Snapdragon 808 MSM8992X10-t qc是
Google Pixel 2 (G011A)Snapdragon 835 MSM8998X16-t qc是您还需要修改系统分区LG G Flex 2 (LG-H955)Snapdragon 810 MSM8994X10-t qc否
Sierra Wireless EM7455-X7 (MDM9635)-t QC-
索尼Xperia X (F5122)Snapdragon 650 MSM8956X8-t qc是
三星Galaxy S III LTE (SHW-M210K)Exynos 4412CMC221S-t sec -m cmc221s否
三星Galaxy S4 LTE (GT-I9505)Snapdragon APQ8064TQualcomm MDM9215-t qc否
三星Galaxy S5 Mini (SM-G800F)Exynos 3470Exynos 调制解调器303-t sec-m e303否
三星Galaxy S6 (SM-G920F)Exynos 7420Exynos 调制解调器333-t 秒-m e333否/是
三星Galaxy S6 Edge+ (SM-G928F)Exynos 7420Exynos 调制解调器333-t 秒-m e333否/是
三星Galaxy S8 (SM-G950F)Exynos 8895Exynos 调制解调器355-t 秒-m e333否/是
注意:以上列表不包括所有基于Qualcomm 的设备。
已知错误
在某些高通设备上,多次退出并启动应用程序后,初始化最终会挂起,没有任何消息。根本原因仍在调查中。解决方法:重启手机;
在某些Samsung 设备上,元数据信息(例如EARFCN)丢失或控制平面消息不显示。如果您遇到此类情况,请告知您的环境以寻求解决方案。
参考
Byingdo Hong、Shinjo Park、Hongil Kim、Dongkwan Kim、Hyunwook Hong、Hyunwoo Choi、Jean-Pierre Seifert、Sung-Ju Lee、Yongdae Kim。
窥视蜂窝围墙花园- 封闭网络的诊断方法- IEEE 移动计算汇刊(2018.2)
转载自FreeBuf.COM