车联网安全进阶之Trick——Android车机运行Python

在整车环境下,网络隔离划分出了多个网络。多数的 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 的勇士呢?

PCB复合材料微小孔加工的方法解析
nRF24Z1无线语音开发板使用说明书
槟榔水分测定仪测试原理和注意事项
华为P20系列新色国内发布 创造时尚与科技融合的新美学经典
ATI Mobility Radeon 9700显示芯片
车联网安全进阶之Trick——Android车机运行Python
苹果寻求高通270亿美元赔偿 公司双方CEO将出庭
三星宣布将立足半导体持续发展汽车零部件业务
安全气囊电子系统测试原理及方案
苹果公司申请AR专利,使用深度映射相机和ML
pSLC 闪存介绍:高性能和耐久性的闪存解决方案
包装行业解决方案之高低温试验箱等环境试验箱
汽车芯片的国产替代之路:打破技术封锁是关键
安全配置平台使保护物联网设计变得更加容易
变电站倒闸操作的的执行细节和注意事项
国产旗舰重返1999元市场,国际品牌放低身段反击
评论:PC没落将加速市场融合
开关电源芯片TB6812的研发及特性详解
【存储数据恢复】华为OceanStor存储raid5数据恢复案例
传苹果AirPower或将永久不再出现?