【胖猴小玩闹】智能门锁与BLE设备安全Part 2:对一款BLE灯泡的分

epeppanda
发布于 2021-4-15 12:08
浏览
0收藏

简介


作为该专题的第二篇文章,将以一款智能灯泡为例,对BLE设备的分析方法进行简单介绍,同时对上一篇文章中的BLE基础知识做一个回顾。

本篇选用LifeSmart智能灯泡为研究目标。LifeSmart公司有一款app可以对旗下的各种智能设备进行控制,本篇选用的BLE智能灯泡同样可以用该app调节灯泡的亮度和颜色等。备注:LifeSmart公司的各种产品可以在淘宝直接买到,其app也有公开的下载链接。

App的控制界面如图1.1所示【胖猴小玩闹】智能门锁与BLE设备安全Part 2:对一款BLE灯泡的分-鸿蒙开发者社区

图1.1 app控制界面

 

按照LifeSmart的使用逻辑,每个BLE灯泡都必须完成绑定之后,才能正常使用。我们本次的分析目的是,不经过绑定过程,而直接控制灯泡,如改变颜色或者亮度等。

 

分析过程


2.1 获取BLE通信内容的方法

 

要分析app如何对灯泡进行控制,最直观的方法就是观察一下手机app通过BLE给智能灯泡发送了什么数据。我们有三种常用方法用于获取这些BLE通信内容:

1)HCI Log。由Android系统提供,蓝牙的所有日志都包含内在,内容十分全面,但是需要完成一次蓝牙通信之后从手机中导出阅读。

2)app分析。通过逆向分析app,查看app打印的日志,或者Hook关键函数,也能够获取蓝牙通信的内容。

3)BLE嗅探。通过BLE嗅探工具,直接嗅探周围BLE通信的数据,但如果BLE通信有加密则无法嗅探有价值的内容。

在本篇的案例中,我们直接采用第二种方法,即app分析。因为该app并没有屏蔽日志输出,所以程序运行时会直接将日志打印出来,我们只要分析并阅读日志就可以完成绝大部分工作。

 

2.2 app日志分析

 

本篇的分析目标比较简单,其app日志直接打印出了每次BLE通信的内容,因此我们只要查看其日志,就可以分析手机与灯泡之间的通信内容。

App日志可以通过DDMS、ADB或其他工具查看,如AndroidKiller等,我们直接选择一种比较简单的方式,即通过AndroidKiller查看。AndroidKiller是一款免费的用于Android APK逆向分析的可视化工具,虽然已经很久不更新了,但依旧很好用。

调整灯泡亮度时,Android Killer打印出来的日志如图2.1所示【胖猴小玩闹】智能门锁与BLE设备安全Part 2:对一款BLE灯泡的分-鸿蒙开发者社区

图2.1 调整亮度时的app日志

 

多次通过app调整灯泡亮度后,将相关的日志逐条挑出,然后并列放在一起做对比分析,如图2.2所示。【胖猴小玩闹】智能门锁与BLE设备安全Part 2:对一款BLE灯泡的分-鸿蒙开发者社区

图2.2 app日志对比

 

图2.2中,可以看到App打印出了以下信息:

灯泡地址:类似于网卡的MAC地址,每个灯泡都有一个独一无二的地址;

Service UUID和Characteristic UUID:正如本专题第一章所述,BLE通信实际上是对Service和Characteristic的读写,而Service和Characteristic用其相应的 UUID标识;

消息内容:二进制形式的BLE通信内容,多次调整亮度之后,通过对比每次通信内容,可以发现有一个字节数值的大小与亮度百分比成正比。

 

结果实现

 

有了第二章的分析结果,本章将尝试在任意未绑定BLE灯泡的手机上,通过发送BLE消息的以控制灯泡亮度。

3.1 nRF Connect介绍

nRF Connect是一款由Nordic Semiconductor公司开发的用于调试BLE设备的免费app,分为iOS和Android两个版本。这里使用Android版本的nRF Connect进行后续工作。nRF Connect有三个常用功能:

A、扫描周围设备,并显示设备信息。如图3.1所示,【胖猴小玩闹】智能门锁与BLE设备安全Part 2:对一款BLE灯泡的分-鸿蒙开发者社区

图3.1 nRF Connect Scan界面

 

在Scanner界面下,点击右上角的SCAN按钮开始扫描。在本专题第一篇文章中,我们介绍了Master和Slave的各种状态,nRF Connect扫描时,Android手机作为Master,会接收周围各个Slave发出的广播包,这些广播包里包含了Slave的信息。点击扫描到的设备会展示nRF Connect从该设备的广播包里解析出来的信息,在详细信息页面中点击RAW按钮,会显示该设备广播包的原始二进制数据。

B、与BLE设备进行通信

在Scanner界面下,点击CONNECT按钮即可向设备发起连接,连接建立之后就可以进行通信了,如图3.2所示。【胖猴小玩闹】智能门锁与BLE设备安全Part 2:对一款BLE灯泡的分-鸿蒙开发者社区

图3.2 与BLE设备进行通信

 

读取Characteristic即为手机接收BLE设备的消息,写入Characteristic则代表向BLE设备发送消息。

C、作为Advertiser发送广播包

此外,nRF Connect还可以作为Slave,进入Advertiser状态,向周围不断地发送广播,如图3.3所示。【胖猴小玩闹】智能门锁与BLE设备安全Part 2:对一款BLE灯泡的分-鸿蒙开发者社区

图3.3 模拟Advertiser状态

在Advertiser状态下会持续发送广播包,广播包中包含了对于本设备的简单描述信息,nRF Connect可以模拟其中5个基本信息,如TX power、Manufacturer Data等。

 

3.2 控制灯泡亮度

 

结合日志的分析结果,可以使用nRF Connect完成灯泡亮度的控制,具体的操作步骤如下:

1)在nRF Connect中,通过设备的MAC地址,找到需要操作的灯泡,如图3.4所示;【胖猴小玩闹】智能门锁与BLE设备安全Part 2:对一款BLE灯泡的分-鸿蒙开发者社区

图3.4 在Scanner状态下找到灯泡

 

2)与灯泡建立BLE连接,并找到需要写入的Service和Characteristic的UUID,如图3.5所示;

【胖猴小玩闹】智能门锁与BLE设备安全Part 2:对一款BLE灯泡的分-鸿蒙开发者社区

图3.5 与灯泡建立BLE连接

 

3)以hex形式,向Characteristic写入控制灯泡亮度的通信数据,如图3.6所示。【胖猴小玩闹】智能门锁与BLE设备安全Part 2:对一款BLE灯泡的分-鸿蒙开发者社区

图3.6 向Characteristic写入数据

 

我们直接将灯泡亮度设置为0%,如图3.7所示,点击SEND之后,可以看到灯泡的亮度随之出现了变化【胖猴小玩闹】智能门锁与BLE设备安全Part 2:对一款BLE灯泡的分-鸿蒙开发者社区

图3.7 调整灯泡亮度为0

 

4. 总结

 

我们在这篇文章中,从app日志入手,分析了智能灯泡的BLE通信内容,随后使用nRF Connect直接与灯泡进行BLE通信,从而实现控制灯泡亮度的目的。上述分析表明,LifeSmart与BLE智能灯泡之间并没有严格的绑定关系,所谓的“绑定”步骤,仅仅是app本地登记一下需要控制的智能灯泡,方便了下次操作,但BLE智能灯泡本身并不知道自己被绑定给了谁。

本篇作为《胖猴小玩闹》专题的入门文章,分析就到此结束了。本系列后续文章中,我们会遇到更复杂的情况,如加壳、加密等等,届时会介绍更多的工具和方法,欢迎各位读者和我们一起探索。

分类
已于2021-4-15 12:08:57修改
收藏
回复
举报
回复
    相关推荐