数码之家

标题: iPhone蓝牙广播随机地址的识别 [打印本页]

作者: fryefryefrye    时间: 2019-11-29 10:33
标题: iPhone蓝牙广播随机地址的识别
默认的IOS开启了连续服务功能,会用蓝牙4.0的低功耗不断的发送“广告”包。 本来想利用这个来制作一个接近开关,比如带着手机到门口,能自动解锁门。自动解锁电动车之类的。

但是这个广告包用的是一个随机蓝牙地址。而且其附带的厂商数据,是苹果自定义的,至今网上未有人能解析出来。

后来研究蓝牙规范,发现这个随机地址是可解析的,前提是你要有相应的Key。 这个key就是 IRK。

于是我复制粘贴,终于组装出了一个函数,来判断空中的“广告”包的蓝牙地址是否属于自己的手机。
项目开源,上传到了GitHub。

https://github.com/fryefryefrye/Decoding-Random-Bluetooth-Address

里面包含两个小项目:

No.1   获得你的iPhone 的 IRK
用Arduino环境,把get_irk项目烧进一块ESP32板子,这块板子就会打开一个蓝牙服务。 然后在iPhone上安装LightBlue软件,找到“ESP_BLE_SECURITY”服务,点击连接,就会有提示是否配对。确定后手机端连接成功,ESP32端就会打印出IRK。

No.2   低成本监听蓝牙广播包
用Arduino环境,把nrf_ble_add项目烧进一块nano板子,连接上一块nRF24L01,即可监听广播包,提取其中的随机MAC地址,然后与之前获得的IRK进行比较,就能判断是不是自己的手机。


作者: wxws    时间: 2019-11-29 12:14
挺牛呀
不过现在手机常开蓝牙 的人不太多吧
作者: fryefryefrye    时间: 2019-11-29 13:44
wxws 发表于 2019-11-29 12:14
挺牛呀
不过现在手机常开蓝牙 的人不太多吧

蓝牙4.0的低功耗模式,就算用个CR2032电池,都能连续广播半年以上。

我也搞不懂把蓝牙关掉能省多少电。

难道大多数人真的一个蓝牙设备都没有?
作者: qrut    时间: 2019-11-29 17:20
不错的创意,能研究到这个地步的都是高手,不过有的手机默认关闭蓝牙广播,只能搜索其它蓝牙设备,不能被其他蓝牙设备发现,点击选项后可以倒计时比如半分钟对外广播,结束自动关闭,这类手机会有局限性~
作者: fryefryefrye    时间: 2019-11-29 18:49
本帖最后由 fryefryefrye 于 2019-11-29 18:51 编辑
qrut 发表于 2019-11-29 17:20
不错的创意,能研究到这个地步的都是高手,不过有的手机默认关闭蓝牙广播,只能搜索其它蓝牙设备,不能被其 ...

iPhone只要开着蓝牙,登录ApppleID的话,默认就会不断的蓝牙广播,让你登录了同一个AppleID附近的苹果全家桶的其他设备检测到,然后会有很有方便的功能,比如共享剪贴板之类的。

安卓的话就简单了,装个软件,自己发广播就行了。只要不被后台杀掉,就会24小时发。

以上说的都是蓝牙4.0 低功耗模式,非常省电的。

你说的在设置里面关闭广播,不能被发现,是蓝牙的经典模式,4.0之前的,蓝牙耳机,蓝牙串口之类的用的。也没有随机MAC地址功能。只要打开发现模式,就是用的自己真正的MAC地址通信。
作者: qrut    时间: 2019-11-29 19:13
fryefryefrye 发表于 2019-11-29 18:49
iPhone只要开着蓝牙,登录ApppleID的话,默认就会不断的蓝牙广播,让你登录了同一个AppleID附近的苹果全家 ...

是的,确切的说是4.2之前的,5.0及以上版本蓝牙功耗很低,默认一直广播~
作者: mousebat04    时间: 2019-12-2 16:23
fryefryefrye 发表于 2019-11-29 18:49
iPhone只要开着蓝牙,登录ApppleID的话,默认就会不断的蓝牙广播,让你登录了同一个AppleID附近的苹果全家 ...

会玩ble协议的都是高手。
作者: jpdd521    时间: 2019-12-3 14:16
我用带CC2540的蓝牙手环刷了固件变成了CC2540的dongle,有没有啥用呢。。:lol:
作者: fryefryefrye    时间: 2019-12-3 20:48
jpdd521 发表于 2019-12-3 14:16
我用带CC2540的蓝牙手环刷了固件变成了CC2540的dongle,有没有啥用呢。。

看我的开源项目的第二个子项目,就是用一片2元钱的nRF24L01,就能接收蓝牙广播。

你自己刷的dongle不用搞那么复杂的解码MAC,直接比较一下就行了。
作者: anshilike    时间: 2020-4-24 02:25
我是将例程ble-notify改了下 手机读取rssi强度 返回给esp32开或关的指令 刚开始学BLE 多交流:lol:
作者: fryefryefrye    时间: 2020-4-24 16:48
anshilike 发表于 2020-4-24 02:25
我是将例程ble-notify改了下 手机读取rssi强度 返回给esp32开或关的指令 刚开始学BLE 多交流 ...

ESP32 成本高一点,但是可以获得RSSI,然后估计距离。

用nRF24L01成本低,但是没RSSI,只能获得 “有” 或者 “没有” 两个状态。
作者: 17688838786    时间: 2020-9-8 14:45
息屏就搜索不到了、是版本问题,还是手机本身的问题
作者: 慢师傅    时间: 2020-10-8 00:34
我和楼主一样,有各种好玩的想法,但就没有楼主的技术。:mad:
作者: cxbcf    时间: 2021-7-1 12:45
[attach]1210255[/attach]
作者: fryefryefrye    时间: 2021-7-1 18:18
cxbcf 发表于 2021-7-1 12:45

bug已经修复,但是github连不上去,先把固件放这儿。

作者: lyy-cy    时间: 2021-7-3 00:24
“安卓的话就简单了,装个软件,自己发广播就行了”

能具体说是哪个软件么?谢谢!!!
作者: fryefryefrye    时间: 2021-7-3 08:23
lyy-cy 发表于 2021-7-3 00:24
“安卓的话就简单了,装个软件,自己发广播就行了”

能具体说是哪个软件么?谢谢!!! ...

比如: nRF Connect
作者: lyy-cy    时间: 2021-7-3 12:15
fryefryefrye 发表于 2021-7-3 08:23
比如: nRF Connect

感谢楼主回复。:handshake:
作者: cxbcf    时间: 2021-7-6 12:26
fryefryefrye 发表于 2021-7-1 18:18
bug已经修复,但是github连不上去,先把固件放这儿。

用esphome_flash刷的时候提示
Using 'COM14' as serial port.
Connecting......
Detecting chip type... ESP32
Connecting......

Chip Info:
- Chip Family: ESP32
- Chip Model: ESP32D0WDQ6 (revision 1)
- Number of Cores: 2
- Max CPU Frequency: 240MHz
- Has Bluetooth: YES
- Has Embedded Flash: NO
- Has Factory-Calibrated ADC: YES
- MAC Address: 3C:61:05:14:DD:20
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Changed.
- Flash Size: 4MB
Unexpected error: Error while retrieving firmware file 'https://raw.githubusercontent.com/espressif/arduino-esp32/1.0.4/tools/sdk/bin/bootloader_dio_80m.bin': ('Connection aborted.', ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None))

作者: z01228    时间: 2021-7-15 11:32
fryefryefrye 发表于 2021-7-1 18:18
bug已经修复,但是github连不上去,先把固件放这儿。

网站上更新了吗?:shy:
作者: 九天之up    时间: 2021-8-12 23:42
学习一下
作者: oulianxian    时间: 2021-12-19 19:34
网站上更新了吗
作者: ckvlhf    时间: 2022-6-9 12:37
这个好,先收藏起来,万一哪天要用。
作者: fryefryefrye    时间: 2022-6-9 22:01
oulianxian 发表于 2021-12-19 19:34
网站上更新了吗

github上修复了。
作者: kindzhon    时间: 2022-6-10 10:04
创意不错。
但不能用在门上,如果你在家的时候那门一直是开着的。
作者: fryefryefrye    时间: 2022-6-10 10:14
kindzhon 发表于 2022-6-10 10:04
创意不错。
但不能用在门上,如果你在家的时候那门一直是开着的。 ...

的确有这个问题。我的解决方案如下:
1:接收器放在楼道下去半层的地方。为了尽量远离家门。
2:门口有个类似门铃的按钮,放在接近地面的位置,用脚踢一下,才是确认开门的命令,收到手机信号,只是一个许可。
3:到家手机只能放房间去,不能放客厅。放在客厅,接收器偶尔会收到。
4:室内有个蜂鸣器,如果室外接收器收到手机信号,蜂鸣器会轻微响几声,提示把手机收好。

虽然有以上问题,但是确实比每次掏钥匙开门方便多了。
而且我的门也是自动打开的,经常两手抱着快递回家,用脚踢一下,门就解锁,并且自动打开。
然后超声波距离传感器感应有人进门之后,再自动关闭。一键即可自动开门,自动关门,非常的方便。
作者: kindzhon    时间: 2022-6-10 11:32
fryefryefrye 发表于 2022-6-10 10:14
的确有这个问题。我的解决方案如下:
1:接收器放在楼道下去半层的地方。为了尽量远离家门。
2:门口有个 ...

不如用手机的NFC功能更爽。
作者: fryefryefrye    时间: 2022-6-10 15:22
kindzhon 发表于 2022-6-10 11:32
不如用手机的NFC功能更爽。

我的关键是不用掏东西。双手捧着快递也能正常开门。
作者: slwl    时间: 2022-7-30 23:00
需要烧录的固件




欢迎光临 数码之家 (https://www.mydigit.cn/) Powered by Discuz! X3.4