嘶吼RoarTalk2:对一款BLE灯泡的分析,【胖猴小玩闹】Part

_本文原题为:【胖猴小玩闹】Part2:对一款BLE灯泡的分析
1.简介
作为该专题的第二篇文章 , 将以一款智能灯泡为例 , 对BLE设备的分析方法进行简单介绍 , 同时对上一篇文章中的BLE基础知识做一个回顾 。
本篇选用LifeSmart智能灯泡为研究目标 。 LifeSmart公司有一款app可以对旗下的各种智能设备进行控制 , 本篇选用的BLE智能灯泡同样可以用该app调节灯泡的亮度和颜色等 。 备注:LifeSmart公司的各种产品可以在淘宝直接买到 , 其app也有公开的下载链接 。
App的控制界面如图1.1所示
嘶吼RoarTalk2:对一款BLE灯泡的分析,【胖猴小玩闹】Part
文章图片
图1.1App控制界面
按照LifeSmart的使用逻辑 , 每个BLE灯泡都必须完成绑定之后 , 才能正常使用 。 我们本次的分析目的是 , 不经过绑定过程 , 而直接控制灯泡 , 如改变颜色或者亮度等 。
2.分析过程
2.1获取BLE通信内容的方法
【嘶吼RoarTalk2:对一款BLE灯泡的分析,【胖猴小玩闹】Part】要分析app如何对灯泡进行控制 , 最直观的方法就是观察一下手机app通过BLE给智能灯泡发送了什么数据 。 我们有三种常用方法用于获取这些BLE通信内容:
1)HCILog 。 由Android系统提供 , 蓝牙的所有日志都包含内在 , 内容十分全面 , 但是需要完成一次蓝牙通信之后从手机中导出阅读 。
2)app分析 。 通过逆向分析app , 查看app打印的日志 , 或者Hook关键函数 , 也能够获取蓝牙通信的内容 。
3)BLE嗅探 。 通过BLE嗅探工具 , 直接嗅探周围BLE通信的数据 , 但如果BLE通信有加密则无法嗅探有价值的内容 。
在本篇的案例中 , 我们直接采用第二种方法 , 即app分析 。 因为该app并没有屏蔽日志输出 , 所以程序运行时会直接将日志打印出来 , 我们只要分析并阅读日志就可以完成绝大部分工作 。
2.2app日志分析
本篇的分析目标比较简单 , 其app日志直接打印出了每次BLE通信的内容 , 因此我们只要查看其日志 , 就可以分析手机与灯泡之间的通信内容 。
App日志可以通过DDMS、ADB或其他工具查看 , 如AndroidKiller等 , 我们直接选择一种比较简单的方式 , 即通过AndroidKiller查看 。 AndroidKiller是一款免费的用于AndroidAPK逆向分析的可视化工具 , 虽然已经很久不更新了 , 但依旧很好用 。
调整灯泡亮度时 , AndroidKiller打印出来的日志如图2.1所示
图2.1调整亮度时的App日志
嘶吼RoarTalk2:对一款BLE灯泡的分析,【胖猴小玩闹】Part
文章图片
多次通过app调整灯泡亮度后 , 将相关的日志逐条挑出 , 然后并列放在一起做对比分析 , 如图2.2所示 。
图2.2App日志总结
嘶吼RoarTalk2:对一款BLE灯泡的分析,【胖猴小玩闹】Part
文章图片
图2.2中 , 可以看到App打印出了以下信息:
灯泡地址:类似于网卡的MAC地址 , 每个灯泡都有一个独一无二的地址;
ServiceUUID和CharacteristicUUID:正如本专题第一章所述 , BLE通信实际上是对Service和Characteristic的读写 , 而Service和Characteristic用其相应的UUID标识;
消息内容:二进制形式的BLE通信内容 , 多次调整亮度之后 , 通过对比每次通信内容 , 可以发现有一个字节数值的大小与亮度百分比成正比 。
3.结果实现
有了第二章的分析结果 , 本章将尝试在任意未绑定BLE灯泡的手机上 , 通过发送BLE消息的以控制灯泡亮度 。
3.1nRFConnect介绍
nRFConnect是一款由NordicSemiconductor公司开发的用于调试BLE设备的免费app , 分为iOS和Android两个版本 。 这里使用Android版本的nRFConnect进行后续工作 。 nRFConnect有三个常用功能:
A、扫描周围设备 , 并显示设备信息 。 如图3.1所示 ,


推荐阅读