13

逆向分析——诊断仪、UDS协议、OBD接口

 3 years ago
source link: https://xiaix.me/ni-xiang-fen-xi-zhen-duan-yi-udsxie-yi-obdjie-kou/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

逆向分析——诊断仪、UDS协议、OBD接口

发表于 2020-02-08   |   标签   |  

汽车出了故障一般是如何诊断定位问题?不妨摸摸驾驶/副驾驶挡板下,是不是发现了一个奇怪的接口; 修车店又是怎么知道不同车的诊断指令的

UDS协议即ISO14229,是Unified Diagnostic Services,统一诊断服务,是诊断服务的规范化标准,比如读取故障码应该向ecu发什么指令,读数据流又是发什么指令。

OBD是关注车辆售后实时排放的理念形成的行业规范,而UDS是诊断服务的统一化规范,只是应用层的规范。

分为两部分,一部分是安卓端的apk软件(这次逆向的主要目标),另一部分是蓝牙obd发包器

工作原理 apk软件通过蓝牙连接发包器 发送CAN,UDS消息给OBD接口实现诊断功能

真车采集can数据包

树莓派+canbus shield模拟车子的obd can消息,主要是为了方便调试

分析apk安装后,新增那些进程和service(还有一个UI界面的进程,无视)

下载荣威的诊断套件后,多了一个roewe的压缩包,打开内容为一堆so文件

ida打开so搜索字符串函数表等关键字,省略代码走读流程,发现目标libROEWE_SYSP.so和函数

为了验证分析的结果,在模拟环境中 验证

UDS 27算法消息,710为诊断仪消息,718为树莓派模拟OBD接口

通过Frida在后台hook

函数入参参数a3就是obd发送的挑战码,返回值就是挑战码计算的认证令牌

QED验证完毕,该函数就是诊断仪计算27算法的安全认证

把ida的伪代码改造成C代码,实现计算挑战码/令牌


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK