起因
平时一直都是用的车机自带的高德地图导航,某天因为导航搜索出来的几条路线都显示拥堵,就尝试了下用手机的高德地图导航,路线其实也差不多(这不重要),重点是发现了手机导航比车机导航高级太多了,手机高德导航的车道级导航还有红绿灯读秒车机版的都没有,然后看了一下车机高德的版本才4.x,高德官网看最新版的都8.x了,于是有了给车机安装一个新版本的高德地图的想法。
打开工程模式
之前没研究车机,先上网搜了一番,网上资料还是挺多的。
按照网上说的打开车机的工程模式就可以用usb线连接电脑,直接adb安装就完事了。
打开工程模式方法的就是拨号界面输入一串号码,具体不同车机输入号码不一样,自行百度即可。
然后抽时间开始了第一次尝试。
打开工程模式没啥问题,在工程模式界面打开了usb调试,正常连上了电脑。
直接adb install 安装,结果报错。。。
那就换adb shell pm install 安装,这次是弹窗一个界面显示什么not auth app xxx之类的阻止安装。
想到了是车机对安装app有校验,多半是有检查签名。
想简单了第一次以失败告终。
解决车机app验证问题
又上网搜索,发现这个车机系统确实是验证了app签名,就是检查了签名的序列号。
那直接用指定的序列号证书签名就可以了。
开始行为:
先打开工程模式,导一个app出来看看证书。
然后用openssl 生成一个相同序列号的证书。
生成证书的大致流程如下:
#生成私钥
openssl genrsa -out private.key 2048
#生成v1证书
openssl req -new -key private.key -out csr.csr -subj "/emailAddress=auto_release@auto-pai.com/CN=SCM/OU=Software/O=WTCL/L=HaiDian/ST=Beijing/C=CN"
openssl x509 -req -in csr.csr -signkey private.key -out certificate.crt -days 18250 -set_serial 0xadf2a6e17d73b1e4
#将证书和私钥导出到 PKCS12 格式的密钥库文件
openssl pkcs12 -export -in certificate.crt -inkey private.key -out cert.p12 -name cert
#生成jks
keytool -importkeystore -srckeystore cert.p12 -srcstorepass 123456789 -srcstoretype PKCS12 -destkeystore cert.jks -deststoretype JKS -deststorepass 123456789-noprompt
#签名 apksigner sign --ks cert.jks --ks-key-alias "cert" --out signed.apk input.apk
然后到网上下了一个最新版的高德地图车机版(不要用官方的,包名会和车机自带的高德冲突)用生成的证书重新签名。
再连上车机adb shell pm install 安装,安装成功。
本以为到此就结束了,结果准备尝试下新安装的高德时发现桌面没有图标。。。
试了下am 命令直接启动高德,能正常启动没问题,说明已经安装上了,桌面没图标就是这个车机的桌面app又做了啥限制。
解决图标问题
再上网搜索,又找了解决方案,那就是安装一个三方桌面app,网上看到比较多的就是嘟嘟桌面和氢桌面。
另外一个发现,就是工程模式界面可以往下滑找到其他测试可以打开原始的Android 桌面,前面几次都没注意,原始的Android 桌面就和手机、平板 没啥区别了,但是也不能每次都拨号进工程模式再打开原始桌面使用app ,这样也太麻烦了。
于是还是现在安装一个三方桌面app , 安装上面安装高德的方法 尝试安装了嘟嘟桌面和氢桌面,发现安装后打开都卡在主页无法正常运行,想着应该是和车机系统不兼容导致的,安装到手机上试试结果发现也是一样的情况,那就不是车机系统的问题了,是app的问题。
然后逆了一下app(我这里选的嘟嘟桌面因为它没加壳省事另一个氢桌面加壳了) 发现是它里面有签名校验,所以重新签名后不能正常运行。但是我们又必须要重新签车机的签名,那没办法只能干掉嘟嘟桌面的签名校验了。
直接逆向分析找到签名校验的地方干掉,它的实现就是判断证书然后kill掉自己的进程,直接搜索关键字就可以找到这个签名校验的地方,大概搜索出来好几十条,全干掉了。
最后再次安装可以正常打开嘟嘟桌面,设置成车机默认桌面,里面可以显示安装的三方app的图标。
至此,所以问题都已解决,可以按自己需求安装使用三方app了。