1. 程式人生 > >SCAT:信令收集和分析工具

SCAT:信令收集和分析工具

SCAT是一個由python編寫的信令收集和分析工具,它會通過USB解析Qualcomm和Samsung基帶的診斷資訊,並生成包含蜂窩控制平面訊息的GSMTAP資料包流。

安裝要求

PC

目前僅在Linux上測試過,且多數為Ubuntu的各種衍生版本。Python版本不得低於python 3,另外還需要安裝以下外部模組:

pyUSB

pySerial

要正確解碼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-moded設定)

使用

雖然我們建議大家直接使用USB來訪問診斷埠,但如果你的智慧手機的診斷埠可以通過串列埠訪問,那也是個不錯的選擇。所有基於Qualcomm的智慧手機的qcserial核心模組並沒有包含有關診斷埠的資訊,而基於三星的智慧手機也沒有這樣的模組。

通過USB訪問基帶診斷:

$ scat.py -t qc -u -a 001:010 -i 2

-t qc 定義我們正在解析Qualcomm基帶。對於Samsung基帶需要將qc替換為sec,且需要我們手動提供型號,如下所示:

$ scat.py -t sec -m e333 -u -a 001:006 -i 2

可用型號型別如下:

-m cmc221s:CMC221S,用於早期的三星LTE調變解調器/智慧手機;

-m e303:調變解調器晶片Exynos Modem 303;

-m e333:調變解調器晶片Exynos Modem 333

較新的Exynos調變解調器可與-m e333選項一起使用,YMMV。

-u 指定我們通過USB訪問的診斷裝置

雖然有啟發式演算法可以確定連線的裝置,但還是建議大家能明確指定診斷節點的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 sec -m e333 -u -a 001:006 -i 2 -H 127.0.0.2

使用以下命令,以便能夠使用Wireshark輕鬆對其進行排序:

ifconfig ethUSB 127.0.0.2 netmask 255.255.255.0 up
sudo route add -net 127.0.0.0 netmask 255.255.255.0 gw 127.0.0.1

可以使用其他命令的輸出自動確定USB匯流排地址。以下示例適用於三星Galaxy S5 Mini:

val=$(lsusb | awk '/Samsung/ {print substr($4, 1, length($4)-1)}')
    sudo ./scat.py -t sec -m e303 -u -a 001:$val -i 4 -H 127.0.0.2

已測試過的裝置

以下裝置已由作者和貢獻者進行測試:

裝置名稱/型號 處理器 基帶 必要引數 是/否需要root  
Nokia 8110 4G (TA-1048) Snapdragon 205 MSM8905 X5 -t qc Yes  
Google Nexus 5 (LG-D821) Snapdragon 800 MSM8974 MDM9x25 -t qc Yes  
Google Nexus 5X (LG-H791) Snapdragon 808 MSM8992 X10 -t qc Yes  
Google Pixel 2 (G011A) Snapdragon 835 MSM8998 X16 -t qc Yes 還需修改系統分割槽
LG G Flex 2 (LG-H955) Snapdragon 810 MSM8994 X10 -t qc No  
Sierra Wireless EM7455 - X7 (MDM9635) -t qc -  
Sony Xperia X (F5122) Snapdragon 650 MSM8956 X8 -t qc Yes  
Samsung Galaxy S III LTE (SHW-M210K) Exynos 4412 CMC221S -t sec -m cmc221s No  
Samsung Galaxy S4 LTE (GT-I9505) Snapdragon APQ8064T Qualcomm MDM9215 -t qc No  
Samsung Galaxy S5 Mini (SM-G800F) Exynos 3470 Exynos Modem 303 -t sec -m e303 No  
Samsung Galaxy S6 (SM-G920F) Exynos 7420 Exynos Modem 333 -t sec -m e333 No/Yes  
Samsung Galaxy S6 Edge+ (SM-G928F) Exynos 7420 Exynos Modem 333 -t sec -m e333 No/Yes  
Samsung Galaxy S8 (SM-G950F) Exynos 8895 Exynos Modem 355 -t sec -m e333 No/Yes  

注:以上列表並未列出所有基於Qualcomm的裝置。

已知錯誤

在某些Qualcomm裝置上,退出並多次啟動應用程式後初始化最終會掛起,並且不會顯示任何訊息。根本原因仍在調查中。解決方案:重啟智慧手機;

在某些三星裝置上,缺少EARFCN等元資料資訊或沒有出現控制平面訊息。如果遇到此類情況,請告知你的環境以獲取解決方案。

參考文獻

Byeongdo Hong,Shinjo Park,Hongil Kim,Dongkwan Kim,Hyunwook Hong,Hyunwoo Choi,Jean-Pierre Seifert,Sung-Ju Lee,Yongdae Kim。

窺視蜂窩圍牆花園 – 一種封閉式網路診斷方法 - IEEE Transactions on Mobile Computing(2018.2)