更新時(shí)間:2024-03-27 04:30作者:小樂(lè)
SCAT 是一種用Python 編寫(xiě)的信令收集和分析工具,可通過(guò)USB 解析來(lái)自高通和三星基帶的診斷信息,并生成包含蜂窩控制平面消息的GSMTAP 數(shù)據(jù)包流。
安裝需要電腦
目前只在Linux上進(jìn)行了測(cè)試,而且大部分都是Ubuntu的各種衍生版本。 Python版本必須至少為python 3,并且需要安裝以下外部模塊:
pyUSB
py串口
要正確解碼SCAT 生成的GSMTAP 數(shù)據(jù)包,需要Wireshark 2.6.0 或更高版本。對(duì)于舊版本的Wireshark,我們提供了Wireshark Lua插件來(lái)幫助擴(kuò)展GSMTAP解碼功能。 SCAT 使用的GSMTAP 定義基于libosmocore 0.11.0。
手機(jī)
蜂窩設(shè)備必須通過(guò)USB 公開(kāi)診斷端口。這主要取決于所使用的設(shè)備,我們無(wú)法為所有設(shè)備提供通用的解決方案。使用關(guān)鍵字(您的設(shè)備名稱)qpst 在線搜索,了解基于Qualcomm 的智能手機(jī)如何公開(kāi)診斷端口。
三星:在撥號(hào)器中輸入*#0808#,選擇任意包含DM的USB模式條目;
韓文版:在撥號(hào)器中輸入3197123580,密碼為9964127764320821。
2018年之后的某些版本的固件將阻止使用上述代碼訪問(wèn)隱藏菜單。目前還沒(méi)有解決辦法。
LG:在撥號(hào)器中輸入277634#*#(TODO:USB 測(cè)試菜單的確切位置)
在某些LG 設(shè)備上,即使啟用了USB 測(cè)試模式診斷端口,Linux 中也不會(huì)公開(kāi)該端口。這是由于使用多個(gè)USB 設(shè)備配置引起的;建議更改此類設(shè)備中當(dāng)前USB 配置的udev 規(guī)則。
索尼:需要root。獲取具有root 權(quán)限的adb shell,然后輸入命令setprop persist.usb.eng 1。
Nexus:需要root。獲取具有root 權(quán)限的adb shell,然后輸入命令setprop sys.usb.config diag,adb。
不適用于Pixel 設(shè)備!
Sailfish OS:(TODO:如何修改USB 模式設(shè)置)
雖然我們建議您直接使用USB 來(lái)訪問(wèn)診斷端口,但如果您的智能手機(jī)的診斷端口可以通過(guò)串行端口訪問(wèn),那也是一個(gè)不錯(cuò)的選擇。所有基于高通的智能手機(jī)的qcserial 內(nèi)核模塊都不包含有關(guān)診斷端口的信息,基于三星的智能手機(jī)也沒(méi)有這樣的模塊。
通過(guò)USB 訪問(wèn)基帶診斷:
$ scat.py -t qc -u -a 001:010 -i 2
-t qc 定義我們正在解析高通基帶。對(duì)于三星基帶,qc需要替換為sec,并且需要我們手動(dòng)提供型號(hào),如下圖:
$ scat.py -t 秒-m e333 -u -a 001:006 -i 2
可用的型號(hào)類型如下:
-m cmc221s:CMC221S,用于早期三星LTE 調(diào)制解調(diào)器/智能手機(jī);
-m e303:調(diào)制解調(diào)器芯片Exynos Modem 303;
-m e333:調(diào)制解調(diào)器芯片Exynos 調(diào)制解調(diào)器333
較新的Exynos 調(diào)制解調(diào)器可使用-m e333 選項(xiàng)YMMV。
盡管可以通過(guò)啟發(fā)式方法來(lái)確定連接的設(shè)備,但建議您明確指定診斷節(jié)點(diǎn)的USB 設(shè)備地址和接口號(hào)。 -a 001:010 指定一個(gè)地址,其語(yǔ)法與lsusb 命令中的語(yǔ)法相同。 -i 2 指定診斷節(jié)點(diǎn)的接口號(hào),該接口號(hào)也是設(shè)備特定的。
通過(guò)串行端口訪問(wèn)基帶診斷:
$ scat.py -t qc -s /dev/ttyUSB0
將/dev/ttyUSB0 替換為您的診斷設(shè)備。
默認(rèn)情況下,scat 將數(shù)據(jù)包發(fā)送到127.0.0.1,控制平面數(shù)據(jù)包作為gsmtap 發(fā)送到udp 端口4729,用戶平面數(shù)據(jù)包作為ip 發(fā)送到udp 端口47290。
使用Ctrl+C 退出應(yīng)用程序。
高級(jí)選項(xiàng)
可以使用-H 127.0.0.2 開(kāi)關(guān)更改發(fā)送GSMTAP 數(shù)據(jù)包的目的地。例如,以下命令將所有數(shù)據(jù)包發(fā)送到127.0.0.2:
$ scat.py -t 秒-m e333 -u -a 001:006 -i 2 -H 127.0.0.2
使用以下命令可以使用Wireshark 輕松對(duì)其進(jìn)行排序:
ifconfig ethUSB 127.0.0.2 網(wǎng)絡(luò)掩碼255.255.255.0 upsudo 路由添加-net 127.0.0.0 網(wǎng)絡(luò)掩碼255.255.255.0 gw 127.0.0.1
USB 總線地址可以使用其他命令的輸出自動(dòng)確定。以下示例適用于Samsung Galaxy S5 Mini:
設(shè)備名稱/型號(hào)處理器基帶必要參數(shù)是/否需要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是您還需要修改系統(tǒng)分區(qū)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 調(diào)制解調(diào)器303-t sec-m e303否
三星Galaxy S6 (SM-G920F)Exynos 7420Exynos 調(diào)制解調(diào)器333-t 秒-m e333否/是
三星Galaxy S6 Edge+ (SM-G928F)Exynos 7420Exynos 調(diào)制解調(diào)器333-t 秒-m e333否/是
三星Galaxy S8 (SM-G950F)Exynos 8895Exynos 調(diào)制解調(diào)器355-t 秒-m e333否/是
注意:以上列表不包括所有基于Qualcomm 的設(shè)備。
已知錯(cuò)誤
在某些高通設(shè)備上,多次退出并啟動(dòng)應(yīng)用程序后,初始化最終會(huì)掛起,沒(méi)有任何消息。根本原因仍在調(diào)查中。解決方法:重啟手機(jī);
在某些Samsung 設(shè)備上,元數(shù)據(jù)信息(例如EARFCN)丟失或控制平面消息不顯示。如果您遇到此類情況,請(qǐng)告知您的環(huán)境以尋求解決方案。
參考
Byingdo Hong、Shinjo Park、Hongil Kim、Dongkwan Kim、Hyunwook Hong、Hyunwoo Choi、Jean-Pierre Seifert、Sung-Ju Lee、Yongdae Kim。
窺視蜂窩圍墻花園- 封閉網(wǎng)絡(luò)的診斷方法- IEEE 移動(dòng)計(jì)算匯刊(2018.2)
轉(zhuǎn)載自FreeBuf.COM