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