位置:飞责科技网 > 手机 > 正文 >

【胖猴小玩闹】Part 5:果加智能门锁的全面分析(下)

2020年05月10日 12:35来源:未知手机版

letv客户端,倪安东资料,wowbot

1.简介

本篇为家庭版果加智能门锁全面分析的最后一篇,在此前的两篇中、,我们分析讨论了门锁固件和配套的app。家庭版果加智能门锁的app相对较容易分析,通过日志可以直接定位到java层代码,并进一步追溯到native层代码,在libBleCmd.so中,我们看到了所有BLE指令的生成代码以及相关的加密和解密函数。在解密函数中,我们找到了参与解密算法的几个常量,通过这几个常量,我们在门锁固件的大量代码中,定位到了进行解密运算的几个函数,详细分析这几个函数后,确定了BLE解密密钥存储的内存地址,接收到的BLE指令存放的内存地址等,并根据交叉引用的结果不断增加我们对固件程序的理解,展开了固件代码的分析讨论。

在这篇文章我们顺着这条主线继续深入分析,随着我们理解的内容不断增多,我们会发现更多有有意义的函数。最后,我们会展示一个家庭版果加智能门锁存在的严重问题,该问题已于2018年修复完毕,现在拿出来讨论一下应该还未出“小玩闹”的范畴。

2. 固件分析

继续我们上一篇的思路,回到上一篇结尾时遗留的sub_80000C8函数位置。此函数为整个固件中最复杂的函数,我们将其F5反汇编之后,整理一下代码,可以看到该函数函数只有入口,没有出口:

>图2-1 整理后的sub_80000C8函数

然后我们再搜索下sub_80000C8函数的交叉引用,如下图所示:

图2-2 sub_80000C8函数的交叉引用

继续向上溯源,可以找到下图所示位置:

图2-3 loc_80000C0标签的交叉引用

可以看到,sub_80000C8函数是系统复位中断之后执行的第二个函数。一般情况下,复位中断会执行两个函数,第一个函数为init函数,即图2-3的sub_800D704函数;而第二个函数为main函数,即图2-3的loc_80000C0标签处的代码。此外,单片机的main函数一般都是死循环,不存在执行完毕后退出的情况,这与我们在图2-3中看到的while死循环相对应。与我们常见的运行于操作系统之上的程序不同,比如说 ls 、 pwd 等常见的程序,他们完成各自的功能之后,就会退出,而单片机上电之后,MCU就要开始运行给他编写的程序,一直到单片机断电为止。

确定main函数之后,我们把目光重新聚焦在上一篇分析的sub_800EB20函数,当时我们把这个函数的功能概括为预处理,即完成消息头校验、crc校验、数据解密等工作的函数。那么在预处理之后,就应该是解析BLE数据、完成逻辑功能的代码。相关代码截图如下:

>图2-4 BLE命令解析相关代码

上图中,我们可以根据代码结构进行一些猜测:MEMORY[0x20000140]和MEMORY[0x20000169]应该是两个标志位,其中一个标志位标识收到了BLE指令;v115是预处理函数的返回值,返回值为0代表预处理成功,这与上一篇的分析是一致的;绿框部分的代码,即为真正解析BLE指令的代码。

然后我们再来看看sub_800F9EC函数,即图2-4绿框中的代码。将代码反汇编后,稍作整理,可以看到下图所示的特征:

>图2-5 BLE指令解析代码

再结合app的输出日志,如下图所示:

>图2-6 家庭版果加智能门锁app部分日志

可以确定图2-5 中,变量v3是保存了门锁发给手机的BLE指令类型,如图2-6中,0x2004类型代表开锁命令的返回数据。

下面我们仔细阅读一下图2-5中case 0xE004部分的代码,该分支是门锁对于BLE开锁指令的回复信息,将相关代码截图如下:

本文地址:http://www.ectippc.com/shouji/382764.html 转载请注明出处!

今日热点资讯
北京赛车时间表 秒速时时彩官网 华盈彩票网 北京赛车开奖走势图 秒速时时彩官网 安徽快3 秒速时时彩 秒速时时彩 秒速时时彩 秒速时时彩开奖