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