cysin 发表于 2021-2-23 21:44

本田车机破解分析记录

TL;DR
1.本文是一篇尚未完成的分析记录。
2.本文算是一个备忘,主要是为了以后需要时可以方便的查阅,无他。
3.发到这里只是想找一个相对稳定的地方保存一下,无他。
4.本文仅是针对本田车机破解所做的一些分析和记录,并无创新。
5.逆向和安全方面并非专业,也从未有深入研究,可能有不准确的地方。
6.https://github.com/cysin/honda_hacking_analysis是分析时做的一些记录和相关代码。7.https://cysin.github.io/honda_hacking_analysis/ 本田黑科技在线注册码生成器。
起因
在网上偶然看到https://forum.xda-developers.com/t/guide-how-to-enter-developer-mode-on-2017-honda-civic-and-now-root-install-apps.3621582/,大义是目前相当一部分本田车型的车机都是基于安卓开发的系统,可以通过一些默认操作进入开发者模式,改变usb传输方向,进而可以利用某些漏洞进行root提权,进而安装一些三方软件和对车机本身进行修改。


按照文中所述,确实可以进入开发者模式,只是在进行点击操作时要快,若太慢不会生效:


xda文中还提供了一个github仓库https://github.com/codeage/root-honda,除破解脚本之外还提供了一些apk(但是并没有提供源码)。另外,从这个github提供的信息获知,最早提供破解脚本的大概是https://github.com/jersacct/2016PilotOneClick,提权利用的是CVE-2016-5195(Dirty copy-on-write)漏洞,相关代码实现https://github.com/timwr/CVE-2016-5195。由于这些代码和不开源的软件包可能会对系统造成不可逆修改,未进行实机测试。

线索
去某宝搜了一下,不出所料,主要有两家**奇小助手和**黑科技(以下分别简称vincicar和autohack),百十块钱便可进行网页远程破解。应该是利用了浏览器的漏洞获取了userland exploit并进行kernel exploit进而安装apk。在安卓4.2的年代,webkit简直就是直接奔向exploit的康庄大道。
对这些商家提供的网页大体看了一下,通过关键字等很容易就定位到两家都是通过几年前hacking team事件泄漏的代码:
https://github.com/hackedteam/vector-exploit/tree/master/src/ht-webkit-Android4-src
对于这个漏洞的描述,代码中有几幅手写图例:
https://github.com/hackedteam/vector-exploit/tree/master/src/ht-webkit-Android4-src/docs
另外还有这里的分析:
https://security.tencent.com/index.php/blog/msg/87

分析
理论到实践是完全两个不同的过程,而对于目前已经商用的不错的案例来说肯定是值得借鉴和学习的。这里主要谈一下应用阶段。由于需要通过http进行分析,所以尽可能的模拟实机访问,防止掉入一些可能被设计的坑里。将车机连入热点,访问一个简单的php脚本,提取车机访问的header信息:


由于有泄漏的漏洞源码,所以分析起来容易很多。有以下几点:

1.入口页面会进行判断选择加载,只有目标机器才会加载正确的js文件,相关代码如下:
https://github.com/hackedteam/vector-exploit/blob/master/src/ht-webkit-Android4-src/src/go.js#L40


其中idvalue在不同浏览器特性下会有不同的值,决定了加载的js文件名。车机访问时:

所以可以强制idvalue='id'

2.script.js中:
https://github.com/hackedteam/vector-exploit/blob/master/src/ht-webkit-Android4-src/src/script.js#L2051


加载stage4.js时有一个trk参数,根据stage4_js.py:
https://github.com/hackedteam/vector-exploit/blob/master/src/ht-webkit-Android4-src/src/stage4_js.py#L14


trk决定了aes密钥,可以强制trk='-213173581276'。实际上autohack并没有使用aes加密,所以这一步对autohack来说就关系不大。

3.stage4.js中调用module.so时,根据具体实现不同,传入参数不同:
https://github.com/hackedteam/vector-exploit/blob/master/src/ht-webkit-Android4-src/src/stage4.js#L125
vincicar:


若trk传入不正确,则上图第一行32个字节为fake key,无法进行正确的aes解密。


autohack:


上图中key,agent,flags参数在首页:

看到这里key其实是最早输入的auth code,不像是一个常规密钥,基本可以判定要么没加密,要么密钥hard code在module.so里。另外,这些参数应该最终都是字符串类型,因为js作为一个弱类型和脚本(文本)语言,很难搞一些其他类型的变量(不怎么做js,不知此观点是否正确)。

4.通过分析js得知module.so的下载地址:


vincicar: https://a2carf.vincicar.com/module.so
autohack: http://www.autohack.cn/root/module.so


直接思路就是写一个可执行文件调用这两个so文件,看一下实际会发生什么。由于有hacking team的源码,比较容易理解,module.so的主要工作就是创建socket连接通过http下载所需文件,执行exploit和安装apk。但由于以上这些测试并未按照漏洞被设计的流程来走,所以必须保证所有前序工作尽可能按照作者意图实现。


首先确保传入的key是正确的。用Ghidra(https://ghidra-sre.org/)看一下这两个module.so,看看有没有什么幺蛾子。通过对比这两个文件对aes256_init的call graph,确定autohack并没有使用aes加密。

左为vincicar,右为autohack


为了确认key是正确的,写了一个简单的aes解密工具,用来测试key是否正确。代码在https://github.com/cysin/honda_hacking_analysis/tree/main/aes_decrypt


看起来没问题。通过上文图中js代码传入的参数来看,vincicar的参数多为url,都是字符串类型,应该没什么特别。这里不用理会用png图片做的伪装,用urlrewrite即可实现。但是autohack的参数有一个flags=‘2’,为了避免掉入陷阱,需要看一下。用ghidra打开,看一下am_start函数:

其中DAT_00019004应该是传入的struct,DAT_00019004+0x400是struct的第五个参数,也就是flags;access是判断是否存在su文件。所以这里是判断有没有su文件,有的话才继续进行后续下载和其他操作。但是这个flags如果等于1的话,则忽略检查,强制进行后续工作。所以flags并没有什么特殊含义。

通过ghidra看了一下基本确认没有啥太大问题的话,接下来模拟module.so的调用执行。


首先安装ndk,可通过https://developer.android.com/ndk/downloads下载或通过android studio安装。下载临时编写的动态库调用代码https://github.com/cysin/honda_hacking_analysis/tree/main/loader,执行build.sh即可进行编译:


因为是测试分析,只要有安卓环境能够运行即可(实机测试过于危险),所以这里用了一个arm开发板(nanopi m4),刷成android:


​连接PC,用adb将loader和对应的module.so传到开发板:


执行loader:


由于运行环境并非真实的本田车机,所以可能会遇到一些错误。所有执行输出及结果已上传至github,可以在这里查看:


vincicar: https://github.com/cysin/honda_hacking_analysis/tree/main/module/vincicar
autohack: https://github.com/cysin/honda_hacking_analysis/tree/main/module/autohack

x.log是module.so的日志输出,记录了下载了哪些东西。


由于所有的操作由module.so发起,所以只能结合x.log(看system调用)和其下载的脚本看个大概:


vincicar: crack为处理脚本,logo.png和getcrack均为exploit,logo2.png是一个重启脚本,logo4.png是一个zip包,包含busybox,su,下载器的apk等。其中crack是exploit提权之后做的一些处理,主要是解压logo4.png的zip包,重新mount文件系统为可写,拷贝busybox,su到系统目录,备份一些文件,更新白名单,删除友商已下载apk,安装下载器的apk等。


autohack:exploit.sh为处理脚本,主要思路基本差不多,重新mount文件系统,拷贝busybox,su等,另外还会再下载一个install.sh(http://47.75.14.109/root/install.php?key=0946993636)脚本,这样做主要是为了方便随时更新吧。install.sh主要是更新白名单,安装最终的apk等。


这里重点关注一下两个exploit的实现,通过用ghidra查看以及相关关键字,猜测vincicar和autohack分别用的是:

https://github.com/timwr/CVE-2013-6282
https://github.com/android-rooting-tools/android_run_root_shell

APK分析
上述两个module.so下载的文件中,已经包含了相应的APK文件:

vincicar:logo4.png为zip包,解开之后包含vincicar.apk

autohack:installer即为APK安装包


首先安装APK逆向的两个主要工具,https://github.com/skylot/jadx和https://ibotpeaches.github.io/Apktool/。jadx主要是用于反编译成阅读性更好的java,便于理解思路和寻找关键字,但是再recompile比较困难;apktool主要是反编译成smali,类似汇编的字节码,便于修改之后重新打包成可正常运行的apk文件。所以需要两个工具结合使用。


用jadx将两个apk导出为gradle工程:


vincicar:
习惯性看一下src/main/res/values/strings.xml:


只有短短几行,看来只是一个下载器,需要找到下载真正apk的地址。但是用grep甚至是正则去找可能的下载地址字符串,都没有结果。把module.so下载的一堆文件翻了个遍也没有结果。难道是用了字符拼接或者ascii码防止逆向?或者是把url加密保存在系统里?把jadx导出的文件基本看了个遍也没有任何线索(事后证明想多了,这只是jadx的坑)。唯有把这个apk装上,做一下网络的traffic monitor看一下到底访问了什么地址。
运行pip install mitmproxy,安装mitmproxy(代{过}{滤}理机器要开启相应端口或关闭防火墙),启动:


mitmproxy --listen-host 192.168.0.130 --listen-port 8080


将目标机器的网络代{过}{滤}理设置成192.168.0.130:8080,先用浏览器访问mitm.it,安装证书,否则无法监听https。然后安装vincicar.apk,并启动:


于是一目了然。vincicar是先访问https://carw.vincicar.com/vb/car/assistant_app_download?try_count=1&agent=official&param=empty获取apk下载地址,再进行下载。原来jadx并未完全正确反编译vincicar.apk,仔细看上图输出error count为2,所以找不到此下载地址(从apktool反编译的smali文件中是可以找到的)。


autohack:

从src/main/res/values-zh-rCN/strings.xml看出这个apk直接就是最终应用。从反编译的代码里可以找到一些url连接:


尝试浏览器访问http://www.autohack.cn/app/appstore.php?lang=zh,可以得到当前(20210216)最新版本的下载地址:http://www.autohack.cn/app/HondaHack-7.0.1-release.apk。


修改binary破解方法:

安装运行后发现一些功能无法使用,点击会有一些注册提示:


尝试破解,用最简单的方法。首先从src/main/res/values-zh-rCN/strings.xml找到‘需要专业版’:


其对应的name是'pro_function',从代码里找到包含pro_function的片段:


打开C1320tb.java,定位到pro_function:


从逻辑不难看出m5618a返回true,是已注册专业版,false则是未注册。但此时还无法判断m5618a是否就是唯一的检测函数,看一下代码里调用m5618a的地方:


有很多,看一下其中的代码逻辑,基本符合先前的预测,那就修改一下,让m5618a永远返回true,再测试一下。
用apktool反编译:


下面是找到修改的位置。参考C1320tb.java中包含有一些固定字符串:


可用'google.com'作为关键词搜索:


然后打开./cn/autohack/hondahack/tb.smali,通过函数顺序,可以定位到m5618a函数对应的smali代码:


由于是第一次接触smali,照葫芦画瓢,在函数一开始加入两行,给p0赋值0x01,然后返回p0。保存之后用apktool重新打包,并重新签名:


总的来说smali字节码的修改要比修改二进制可执行文件简单的多,可直接插入新的代码而不用考虑原有代码的结构。重新安装之前需要卸载原来安装的版本,因为签名变了。重新安装后:


(后记:此方法对于6.9.16版本是有效的,但apktool对于最新版7.0.1支持可能有问题,导致重新编译后的apk无法运行,可以用注册机的方法实现破解)


注册机方法:

点一个锁定功能会弹出注册窗口:


随便输入一个注册码:


根据注册时的错误提示,找到对应文本:


​然后找到对应文件:


​打开AsyncTaskC1224e.java,定位到regkey_error:


然后定位m5622c函数并打开相应的C1320tb.java文件:


可以看到m5622c基本包含了主要的注册码算法,所有代码都在这一个文件里,并不是很复杂。分析过程不再赘述,其主要思路是:
1.获取蓝牙MAC地址

2.添加‘PREFIX-’前缀

3.获取hash

4.转换成HEX

5.添加'google.com'前缀

6.获取hash

7.做一些运算后取高16位做判断


同时可以得到注册码的格式为:XXXX-XXXX,其中前4个XXXX是用来做判断的。一个用C++写的简单的注册机代码已经上传至github仓库:

https://github.com/cysin/honda_hacking_analysis/blob/main/apk/autohack_register/register.cpp


其中machine code与上图中提示的设备ID一致,注册码只有前四位有用。将注册码填入:


这里的APK破解,其实并不像想象中那样复杂,主要是:
1.jadx生成了质量极高且可读性极好的代码

2.APK并没有采用什么特殊的保护措施

3.代码实现也并未做特殊的逻辑处理

4.注册逻辑相对简单,没有联网处理
若是加入了一些packer,反跟踪和混淆等手段,再去反编译和破解可能就没那么容易了。


vincicar:

用jadx解压之后就没几个文件,应该是用了一些保护手段,用apkid看一下:


legu将主要字节码都保存在libshell-super.2019.so,用IDA看一下(ghidra的分析明显不如IDA更准确一些),基本确认了解密算法在sub_206D4:


sub_28960是根据tosversion的前16字节与固定密码'^o0o7Ql]M8Y5:+1m~nTcA&3a7|?GB1z@'做一些运算得到(可能的)密钥,sub_2AB7C则是具体的解密部分。解密之后再用NRV解压缩。由于时间关系,脱壳就没有继续研究。关于legu网上有一些不错的相关资源,看起来不算特别复杂:
https://blog.quarkslab.com/a-glimpse-into-tencents-legu-packer.html
https://github.com/quarkslab/legu_unpacker_2019

小结
1.如果只是在车机里安装导航等其他软件,那么root之后就可以了。
2.商业软件对车机系统的修改是不可逆的,并非如商家所说车机有一套完整的备份,可以随时恢复。车企没有必要也没有良心再花成本做一个完整的备份。

3.个人不会在车机上使用这些商业性质的破解,毕竟行车安全第一。

4.对车机功能的修改和破解,等以后有时间再做分析罢。实际上这反而是整个过程最简单的部分。

5.安全无小事。如文中所述,是hacking team的webkit漏洞的一个完整实战应用解析。很多时候无意打开一个网页,可能整个系统就无任何秘密可言。

ph1999 发表于 2021-2-25 13:24

看看就好,自身安全的东西不能乱调

crisphewfu 发表于 2023-7-30 23:10

挖一下,来求助的,本人19crv车机用了黑科技后在倒车影像使用过程重启了车机然后卡在本田标反复重启,不知楼主是否有重刷工具和底包,车机是小黄鱼另买的别人的所以就没法去4儿子店了,网上找了都说要拆焊bga芯片重写再焊,真太麻烦了,有方法的麻烦告知,谢谢了!另外楼主说的root都是要基于能在系统设置中把usb调试打开吧?

cysin 发表于 2021-2-23 22:29

不通过好像无法编辑。如何编辑排版和删除无用图片?

mdx005 发表于 2021-2-25 10:43

感谢大神的分享,好精彩的分析过程

sic5s 发表于 2021-2-25 10:53

本帖最后由 sic5s 于 2021-2-25 10:58 编辑

好像奥德赛DA屏无戏{:1_907:}

ibetawang 发表于 2021-2-25 10:59

后排围观,以前用过黑科技的破解版,联网就会被锁软件

optimismsj 发表于 2021-2-25 12:02

确实啊!主机安全第一位的!谢谢楼主!

伯牙 发表于 2021-2-25 13:25

楼主思路可以,现在玩电动车更爽,特别是造车新势力的车机,配置高多了,更好玩。

dongge666 发表于 2021-2-25 13:51

666感谢分享

苏苏JS 发表于 2021-2-25 14:11

我一直在用本田黑科技,感觉100块钱花的很值,一直在更新,破解不破解无所谓,获得它一直更新的服务才是价值
页: [1] 2 3 4 5 6 7 8
查看完整版本: 本田车机破解分析记录