注意: 由於需要在同一臺電腦同時連接adb 抓取log,附件中所有腳本的 adb device serial number 需要更新爲對應的號。
示例如下:
ciellee@sh:~/Videos$ adb devices
List of devices attached
9c2d9ab5device ---------------> 車機
5T7HGD199A038896device ---------------> 手機
所有車機腳本adb 改爲 : adb -s 9c2d9ab5 shell
所有手機腳本adb 改爲 : adb -s 5T7HGD199A038896 shell
附件內容如下:
操作步驟如下:
一、 對數據解密,push 解密的so 庫文件到車機中
操作示例如下:
ciellee@sh:~/Videos$ adb root
adbd is already running as root
ciellee@sh:~/Videos$ adb remount
remount succeeded
ciellee@sh:~/Videos$ adb shell
msm8937_32go:/ # find ./system/ -name libmsdpmediasdk.so
./system/lib/libmsdpmediasdk.so
./system/lib64/libmsdpmediasdk.so
msm8937_32go:/ # exit
ciellee@sh:~/Videos$ adb push arm64-v8a/libmsdpmediasdk.so /system/lib64/
3103 KB/s (1768624 bytes in 0.556s)
ciellee@sh:~/Videos$ adb push armeabi-v7a/libmsdpmediasdk.so /system/lib/
2950 KB/s (1444272 bytes in 0.478s)
二、車機手機分別打開adb功能,運行腳本清除手機 和 車機內部現有的log,會自動重啓
運行 《1.清除華爲手機log並重啓.bat》 和 《2.清除車機log並重啓.bat》
三、車機手機分別打開adb功能,開始push tcpdump 可執行文件,並開始抓取tcpdump log
運行《3.push_手機tcpdump並開始抓 取tcpdump.bat》 和 《4.push_車機tcpdump並開始抓 取tcpdump.bat》
注意,運行這兩個腳本後會開始同步抓取tcpdump log,這兩個窗口保留,別關閉。
如下:
ciellee@sh:~/Videos$ adb -s 5T7HGD199A038896 shell "/data/tcpdump -i any -p -vv -s 0 -w /sdcard/phone_capture.pcap"
tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
Got 177 ----------> 看到這個數字在增長,說明正在抓取tcpdump
四、開始配置 sniffer 工具,抓取sniffer log
由於 hicar 投屏是動態選擇信道的,所以 建議在一個較爲乾淨的環境下(投屏及wifi 比較少的地方)。
在 sniffer 工具中,固定 149 信道,配置只過濾 車機 和 手機的 mac 地址。
開始抓取 sniffer log。
五、 此時開始投屏
在投屏時,可以看到有大量數據出來。
此時檢查一下:
5.1 確認信道是否是 149
如果沒有大量數據出來,說明可以投屏此時可以信道不是 149,
也可以通過 adb 來確認 wifi 信道 是否正確,文件 /data/misc/wifi/hostapd.conf , 參考本文第七章。
5.2 確認四次握手協議已經抓全(因爲可以會少抓 ,如果少抓了,無法解密log)
往前翻sniffer log, 看下有沒有看到 四個 EAPOL-key 的數據,這個是四次握手,如下圖:
如果前兩個中有一個確認不成功,就說明這次抓的不好,此時只要重新從 第四步配置 sniffer log 做就行了。
即,重新開啓 sniffer log,配置好後,重新投屏,然後再檢查上面的信道 及 握手協議 這兩項。
六、開始復現問題
在前面 tcpdump 和 wifi sniffer log 確認抓的沒問題後,此時可以開始復現問題了。
復現問題時,建議記錄下,出現問題對應的時間點,方便快速定位分析。
七、導出車機 wifi cfg 文件,查看wifi 密碼
ciellee@sh:~/Videos$ mkdir wifi_cfg
ciellee@sh:~/Videos$ adb pull /data/misc/wifi/ ./wifi_cfg/
pull: building file list...
skipping special file 'wlan0'
skipping special file 'p2p0'
skipping special file 'wlan0'
pull: /data/misc/wifi/hostapd.deny -> ./wifi_cfg/hostapd.deny
pull: /data/misc/wifi/hostapd.accept -> ./wifi_cfg/hostapd.accept
pull: /data/misc/wifi/hostapd.conf -> ./wifi_cfg/hostapd.conf
pull: /data/misc/wifi/hostapd.pid -> ./wifi_cfg/hostapd.pid
pull: /data/misc/wifi/entropy.bin -> ./wifi_cfg/entropy.bin
pull: /data/misc/wifi/p2p_supplicant.conf -> ./wifi_cfg/p2p_supplicant.conf
pull: /data/misc/wifi/wpa_supplicant.conf -> ./wifi_cfg/wpa_supplicant.conf
pull: /data/misc/wifi/WifiConfigStore.xml -> ./wifi_cfg/WifiConfigStore.xml
pull: /data/misc/wifi/softap.conf -> ./wifi_cfg/softap.conf
pull: /data/misc/wifi/WCNSS_qcom_cfg.ini -> ./wifi_cfg/WCNSS_qcom_cfg.ini
10 files pulled. 0 files skipped.
60 KB/s (52043 bytes in 0.834s)
ciellee@sh:~/Videos$
對應的wifi SSID 和 密碼在 hostapd.conf 文件中,如下:
# /data/misc/wifi/hostapd.conf
# SSID to be used in IEEE 802.11 management frames
ssid=HiCar-1120
wpa_passphrase=53881216
在該文件中同樣也可以確認wifi 信道是多少,如下說明是 153 信道 ,
在hicar 投屏比較多的地方信道較不確定,在hicar 投屏少的地方,一般是 149 開始:
# /data/misc/wifi/hostapd.conf
# Channel number (IEEE 802.11)
# (default: 0, i.e., not set)
# Please note that some drivers (e.g., madwifi) do not use this value from
# hostapd and the channel will need to be configuration separately with
# iwconfig.
channel=153
八、重現完畢後,開始導出log
8.1 停上 sniffer log 抓取,保存 sniffer log 文件。
8.2 停止 tcpdump log 抓取
調出之前抓取 tcpdump 的兩個窗口,ctrl + c ,n , 停止腳本,然後腳本會自動導出 tcpdump log 到本地來。
車機tcpdump log 名爲:car_capture.pcap
手機tcpdump log 名爲:phone_capture.pcap
ciellee@sh:~/Videos$ adb -s 260b9696 push car_tcpdump /system/bin/tcpdump
car_tcpdump: 1 file pushed. 12.0 MB/s (709464 bytes in 0.056s)
ciellee@sh:~/Videos$ db -s 260b9696 shell chmod 777 /system/bin/tcpdump
ciellee@sh:~/Videos$ echo ===========Start Capture car tcpdump ,ctrl+c to stop capture ===========
===========Start Capture car tcpdump ,ctrl+c to stop capture ===========
ciellee@sh:~/Videos$ adb -s 260b9696 shell "tcpdump -i any -p -vv -s 0 -w /sdcard/car_capture.pcap"
tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
^C終止批處理操作嗎(Y/N)? n
ciellee@sh:~/Videos$ echo ===========開始導出 tcpdump log 完畢===========
===========開始導出 tcpdump log 完畢===========
ciellee@sh:~/Videos$ adb -s 260b9696 pull /sdcard/car_capture.pcap .
/sdcard/car_capture.pcap: 1 file pulled. 3.6 MB/s (56232 bytes in 0.015s)
ciellee@sh:~/Videos$ echo ===========導出 tcpdump log 完畢===========
===========導出 tcpdump log 完畢===========
ciellee@sh:~/Videos$ pause
請按任意鍵繼續. . .
8.3 導出手機 和 車機的 android_log
運行《5.抓取手機log.bat》 和 《6.抓取車機log.bat》自動導出log
九、相關腳本內容
《3.push_手機tcpdump並開始抓取tcpdump.bat》
adb -s 5T7HGD199A038896 wait-for-device
adb -s 5T7HGD199A038896 root
adb -s 5T7HGD199A038896 wait-for-device
adb -s 5T7HGD199A038896 remount
adb -s 5T7HGD199A038896 push phone_tcpdump /data/tcpdump
adb -s 5T7HGD199A038896 shell chmod 777 /data/tcpdump
echo ===========Start Capture phone tcpdump ,ctrl+c to stop capture ===========
adb -s 5T7HGD199A038896 shell "/data/tcpdump -i any -p -vv -s 0 -w /sdcard/phone_capture.pcap"
echo ===========tcpdump capture done===========
adb -s 5T7HGD199A038896 pull /sdcard/phone_capture.pcap .
echo ===========tcpdup file pull done===========
pause
《4.push_車機tcpdump並開始抓取tcpdump.bat》
adb -s 66f80af6 wait-for-device
adb -s 66f80af6 root
adb -s 66f80af6 wait-for-device
adb -s 66f80af6 remount
adb -s 66f80af6 push car_tcpdump /system/bin/tcpdump
adb -s 66f80af6 shell chmod 777 /system/bin/tcpdump
echo ===========Start Capture car tcpdump ,ctrl+c to stop capture ===========
adb -s 66f80af6 shell "tcpdump -i any -p -vv -s 0 -w /sdcard/car_capture.pcap"
echo ===========¿ªÊŒµŒ³ö tcpdump log Íê±Ï===========
adb -s 66f80af6 pull /sdcard/car_capture.pcap .
echo ===========µŒ³ö tcpdump log Íê±Ï===========
pause
《5.抓取手機log.bat》
@echo on
adb -s 8UJ0119828000422 wait-for-device
adb -s 8UJ0119828000422 root
adb -s 8UJ0119828000422 wait-for-device
adb -s 8UJ0119828000422 remount
set ver_str=3.5
echo =====================GetLog version %ver_str% ================================
:: echo Current: %time% ŒŽ %time:~0,2%µã%time:~3,2%·Ö%time:~6,2%Ãë%time:~9,2%ÀåÃë@
echo ####Current: %date% %time%
set date_time="%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%"
set Folder="LogHub\GetApp_%ver_str%_%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%_phone"
echo ####start to get log to (%CD%\%Folder%)...
mkdir %Folder%
adb -s 8UJ0119828000422 pull /data/log/bt %Folder%/bt
adb -s 8UJ0119828000422 pull /data/log/android_logs %Folder%/android_logs
adb -s 8UJ0119828000422 pull /sdcard/phone_capture.pcap %Folder%/phone_capture.pcap
echo ===========tcpdup file pull done===========
:: adb -s 8UJ0119828000422 shell rm -rf /data/log/bt
:: adb -s 8UJ0119828000422 shell rm -rf /data/log/android_logs
pause
@echo on
《6.抓取車機log.bat》
@echo on
adb -s 66f80af6 wait-for-device
adb -s 66f80af6 root
adb -s 66f80af6 wait-for-device
adb -s 66f80af6 remount
set ver_str=3.5
echo =====================GetLog version %ver_str% ================================
:: echo Current: %time% ŒŽ %time:~0,2%µã%time:~3,2%·Ö%time:~6,2%Ãë%time:~9,2%ÀåÃë@
echo ####Current: %date% %time%
set date_time="%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%"
set Folder="LogHub\GetApp_%ver_str%_%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%_car"
echo ####start to get log to (%CD%\%Folder%)...
mkdir %Folder%
adb -s 66f80af6 pull /private/log %Folder%/android_logs/
adb -s 66f80af6 pull /data/brlink %Folder%/brlink/
adb -s 66f80af6 pull /sdcard/car_capture.pcap %Folder%/car_capture.pcap
mkdir -p %Folder%/wifi_cfg/
adb -s 66f80af6 pull /data/misc/wifi/ %Folder%/wifi_cfg/
adb -s 66f80af6 pull /data/misc/bluedroid/ %Folder%/conf/
adb -s 66f80af6 pull /data/misc/bluetooth/logs/ %Folder%/btlogs/
pause
@echo on