在整車環(huán)境下,網(wǎng)絡(luò)隔離劃分出了多個網(wǎng)絡(luò)。多數(shù)的 ECU(注,本文中的 ECU 特指支持 TCP/IP 協(xié)議棧的 ECU) 不能夠與測試機直連,雖然通過內(nèi)網(wǎng)穿透技術(shù)可以實現(xiàn)訪問這些隔離的 ECU。在內(nèi)網(wǎng)穿透環(huán)境下測試由于轉(zhuǎn)發(fā)問題會出現(xiàn)異常連接的情況。例如,使用 Python 的 Scapy 模塊編寫 SOMEIP 腳本時無法建立連接。
Python 腳本比較靈活,支持的模塊也比較多,但 Python 上車確實是個問題。智駕上往往原生支持Python,但通常作為測試入口的車機,Python 卻不支持的。最近在漏洞挖掘中,在車機上對 Python 有迫切的需求,于是就又雙叒叕去搜索了一下 Android 上運行Python的方法,所有的方案指向—— Python IDE APP。那就得安裝一個 APP,但當(dāng)下新出的車機有的加了系統(tǒng)簽名驗證導(dǎo)致第三方應(yīng)用無法安裝。那先試試安裝APP這個方案。
一共嘗試了5種方案,最終選擇了方案④,使用獨立的Python虛擬環(huán)境。
方案①:安裝 Python IDE APP
Qpython、Pydroid 是Android上用的比較多的編輯器/IDE。在能夠安裝第三方APP的車機上,使用 adb 安裝上應(yīng)用。然后使用就比較尷尬了,圖形化界面在測試中是個弊端,把車機屏幕當(dāng)成顯示屏,外接鍵盤來測試?有的車機也不是識別鍵盤呀!
突然想起我手機上的 Termux 也是可以安裝 Python。但是 Termux 也是圖形的,也不是圖形化——主界面是命令行。怎么通過ADB 使用純命令行的 Termux 呢,嘗試第二種方案——ADB中使用Termux。
Termux是一款基于Android系統(tǒng)的終端模擬器應(yīng)用程序,可以在Android設(shè)備上運行命令行界面和Linux軟件包。它提供了一個完整的Linux環(huán)境,包括常用的命令行工具、編程語言和軟件包管理器等。
方案②:ADB中使用Termux
首先看看 Termux 用的 SHELL 是哪個,直接查看環(huán)境,SHELL 的路徑是 /data/data/com.termux/files/usr/bin/bash
~ $ echo $SHELL
/data/data/com.termux/files/usr/bin/bash
先拿手機試試,進(jìn)入ADB SHELL 切換到 Termux 的SHELL。好消息,命令行的Termux進(jìn)去了;壞消息,Python運行不了。
其實,已經(jīng)裝了 Python,運行不了的原因是缺少環(huán)境變量。缺啥補啥,這就去加個環(huán)境變量。添加環(huán)境變量 PATH 就能直接使用 python等命令了,指定依賴庫的位置 LD_LIBRARY_PATH 也不可或缺。
export LD_LIBRARY_PATH=/data/data/com.termux/files/usr/lib/
export PATH=$PATH:/data/data/com.termux/files/usr/bin
環(huán)境變量設(shè)置好了,果然進(jìn)來了。
那么問題來了,雖然能用Python,但這輛車上不能安裝第三方應(yīng)用。那擺在眼前的是怎么在不安裝 APK 的情況下使用Termux。都到這里了,證明ADB運行Python是可行的,那么繼續(xù)下一步——遷移Termux。
方案③:遷移Termux
查看 Termux 安裝后的文件結(jié)構(gòu)發(fā)現(xiàn),/data/data/com.termux/files/usr/
下不就是 POSIX 的文件系統(tǒng)結(jié)構(gòu)么。
.../data/com.termux $ tree -L 3 ├── cache │ └── apt │ ├── archives │ ├── pkgcache.bin │ └── srcpkgcache.bin ├── files │ ├── home │ │ └── test │ └── usr │ ├── bin │ ├── code │ ├── etc │ ├── include │ ├── lib │ ├── libexec │ ├── share │ ├── tmp │ └── var └── shared_prefs └── com.termux_preferences.xml
車機的架構(gòu)和手機架構(gòu)一樣,直接打包復(fù)制到車機上。
說干就干,復(fù)制到 /data/local/tmp/
下,設(shè)置好環(huán)境變量。
export LD_LIBRARY_PATH=/data/local/tmp/data/data/com.termux/files/usr/lib export PATH=$PATH:/data/local/tmp/data/data/com.termux/files/usr/bin
Python 啟動!
能用就是包有點大 700M,想想感覺可以精簡。
方案④:獨立的 Python
手機是AARCH64,車機也是AARCH64, 那么 Termux 的Python軟件包是不是能直接使用。直接去 Termux 的包管理網(wǎng)站下載 python_3.11.6-1_aarch64.deb。
deb 中有三個文件,其中 data.tar.gz 是主要的程序文件。
data.tar.gz 放到車機里面卻發(fā)現(xiàn)報錯,缺少依賴環(huán)境。
缺啥補啥,從Termux lib 中摳出來,有點未免太費勁了。都到這里了,還是嘗試添加一下依賴吧。把 libandroid-support.so 上傳到 /data/local/tmp/data/data/com.termux/files/usr/lib 竟然成了,不是連環(huán)的缺少依賴。
又試了試 pip,包里面沒有 pip。
補充了 pip,也能安裝模塊,但是不能使用,因為配置的 lib 路徑的文件,必須和 termux 的文件結(jié)構(gòu)一致才行。但獨立出來,路徑是固然要改的。于是想到修改pip下載模塊的默認(rèn)存儲路徑。配置需要寫入配置文件到根目錄,然而大部分車機的根目錄是不可寫的。
繼續(xù)修復(fù)Bug,那還不如直接用方案三中的直接復(fù)制過來Termux環(huán)境。老老實實用Termux的環(huán)境,占用的磁盤空間大就大點吧!
對了,還有一種方案就是使用虛擬環(huán)境 venv,直接使用 python -m venv venv 不出意料也報錯,修復(fù)報錯后,就大功告成了。打包好放在 https://github.com/delikely/Automotive-Security-Toolkit/tree/main/pydroid ,各位看官自取。
方案⑤:靜態(tài)編譯Python
話又說回來,不同的車機可能缺少的依賴不同,那存不存在靜態(tài)編譯的Python呢?這可能是最佳的方案,靜態(tài)編譯的 Python 和 pip,就像靜態(tài)編譯的 busybox 一樣,沒有依賴問題直接用。但是找了一圈又一圈,現(xiàn)成的壓根沒有,有沒有愿意嘗試靜態(tài)編譯 Python 的勇士呢?
-
Android
+關(guān)注
關(guān)注
12文章
3903瀏覽量
126608 -
車聯(lián)網(wǎng)
+關(guān)注
關(guān)注
76文章
2544瀏覽量
91385 -
python
+關(guān)注
關(guān)注
53文章
4753瀏覽量
84068
原文標(biāo)題:車聯(lián)網(wǎng)安全進(jìn)階之Trick——Android車機運行Python
文章出處:【微信號:談思實驗室,微信公眾號:談思實驗室】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論