akunopaka/smart-e-tape-measure-web-bluetooth
GitHub: akunopaka/smart-e-tape-measure-web-bluetooth
一个零依赖的 Web Bluetooth 工具,用于连接智能蓝牙卷尺、解码 BLE GATT 数据包并记录测量数据,以支持设备协议的逆向工程。
Stars: 0 | Forks: 0
# 📏 智能 Web Bluetooth 卷尺
将**智能 Bluetooth 卷尺**变成一个开放的数据源。这个
零依赖的 Web Bluetooth 和 Bluetooth Low Energy (BLE) 探索器可以
连接到数字测量卷尺,读取 GATT 通知,解码测量数据,
分离实时和已确认的数据包,并导出原始证据用于协议
逆向工程。
首个硬件目标是广播名称为 `ES-Tape` 的 **RENPHO RF-BMF01**。
目前已测试过一个物理设备;其他智能人体测量卷尺在
映射其服务 UUID 和数据包格式后可能也可以使用。硬件很少
会乖乖地表明身份,因此这个代码库负责处理这种尴尬的初次问候。👋📡
Pages** 中,选择
**Deploy from a branch**,选择 `main`,选择 `/(root)`,然后保存。在
将连接到卷尺的设备上打开生成的 HTTPS URL。
### 连接卷尺
1. 打开 Bluetooth。
2. 唤醒卷尺或稍微拉出一点。
3. 选择 **Select and connect tape**。
4. 在浏览器对话框中选择 `ES-Tape`。
5. 移动卷尺,并将 Web 上的值与其物理显示屏进行比较。
6. 按下卷尺的确认按钮并检查 **Confirmed transfers**。
不需要系统 Bluetooth 配对。浏览器选择器必须通过
点击打开,因为 Web Bluetooth 发现阶段需要用户手势。
## 🔬 首先使用 nRF Connect 进行验证
[nRF Connect for Mobile](https://www.nordicsemi.com/Products/Development-tools/nRF-Connect-for-mobile)
是在责怪浏览器之前进行独立检查的有用工具。浏览器理应得到
一次公正的审判。🧑⚖️
1. 启动 BLE 扫描,唤醒卷尺,并连接到 `ES-Tape`。
2. 打开 service `0783b03e-8535-b5a0-7140-a304d2495cb7`。
3. 在 characteristic 上启用通知
`0783b03e-8535-b5a0-7140-a304d2495cb8`。
4. 拉出卷尺并确认是否出现 20 字节的通知。
5. 按下卷尺按钮并寻找以 `SM` 结尾的数据串。
6. 不要向 `...5cba` 写入数据;其命令协议在此未作记录。
如果 nRF Connect 可以工作,但浏览器找不到卷尺,请检查浏览器
支持、站点权限、HTTPS/localhost 以及卷尺是否已唤醒。
## 🧭 逆向工程:A -> B -> C
### A. 👀 观察
在不预设设备功能的情况下进行扫描。记录其广播名称、
服务、characteristics、属性、描述符和未触碰的通知
字节。从只读开始;神秘的写入 characteristic 不需要你去问候它。
### B. 🧩 关联
每次只更改一个物理输入:拉出卷尺、保持已知长度、
切换单位或按下一个按钮。添加一个操作标记,记录物理
显示屏,并将其与确切的数据包和时间戳配对。
### C. ✅ 确认
重复相同的测试,尝试边界值,断开并重新连接,并将
事实分类为**已观察**、**已推断**和**未知**。只有在这之后才能将规则
编码到解析器中。第二个物理设备是验证某项发现是
协议规则还是仅仅是一个单独设备特性的最佳测试。
有关当前的证据和开放问题,请参阅 [docs/protocol.md](docs/protocol.md)。
## 📦 观察到的协议
| 角色 | UUID |
| --- | --- |
| Custom service | `0783b03e-8535-b5a0-7140-a304d2495cb7` |
| Notify characteristic | `0783b03e-8535-b5a0-7140-a304d2495cb8` |
| Write Without Response characteristic | `0783b03e-8535-b5a0-7140-a304d2495cba` |
观察到的测量帧:
```
*AAAAA;BBBBB;CCCCSU\n
```
示例:
```
*00530;00000;0000PM\n
```
当前的解码器将 `00530` 解释为 `53 mm` (`5.3 cm`)。第二和
第三个数字字段仍然未知,这比给它们
起一个自信但错误的名字要好得多。
## 🔐 捕获数据和隐私
捕获的数据会保留在当前源的 IndexedDB 中。JSON 和 CSV 导出可能
包含页面 URL、浏览器 user agent、浏览器提供的设备标识符、
时间戳和原始数据包。在发布前请检查导出内容。
**Delete captures** 会删除此站点存储的会话,并立即启动
一个新的空会话。清除浏览器站点数据也会将它们删除。
## 🛠️ 开发
该应用使用纯 HTML、CSS、JavaScript 和 IndexedDB。没有框架、
构建步骤、后端、账户、分析、云存储或需要
安装的运行时包。自动解码器检查是可选的开发者工具。
```
npm test
```
```
.
|-- index.html User interface
|-- app.js Web Bluetooth and capture flow
|-- protocol.js Packet decoder and BLE UUIDs
|-- storage.js IndexedDB storage and exports
|-- styles.css Responsive interface
|-- test/ Decoder checks
|-- docs/protocol.md Evidence and unknowns
`-- docs/github-publishing.md Repository description and topics
```
发现另一款支持 BLE 的卷尺了?太棒了。在
分享捕获内容之前,请阅读 [CONTRIBUTING.md](CONTRIBUTING.md)。🧪
## ⚖️ 独立研究声明
协议说明来自对 BLE 流量的黑盒观察和用于
互操作性研究的受控物理测量。此代码库不
包含提取的固件、专有应用程序源代码或复制的商品
图稿。
RENPHO 和其他名称或标志属于其各自的所有者。本项目
不附属于制造商,也不受其赞助或认可。关于
逆向工程的法律因司法管辖区而异;贡献者应自行
确保合规。
## 📄 许可证
[MIT](LICENSE)
代码库:[akunopaka/smart-e-tape-measure-web-bluetooth](https://github.com/akunopaka/smart-e-tape-measure-web-bluetooth)
Pages** 中,选择
**Deploy from a branch**,选择 `main`,选择 `/(root)`,然后保存。在
将连接到卷尺的设备上打开生成的 HTTPS URL。
### 连接卷尺
1. 打开 Bluetooth。
2. 唤醒卷尺或稍微拉出一点。
3. 选择 **Select and connect tape**。
4. 在浏览器对话框中选择 `ES-Tape`。
5. 移动卷尺,并将 Web 上的值与其物理显示屏进行比较。
6. 按下卷尺的确认按钮并检查 **Confirmed transfers**。
不需要系统 Bluetooth 配对。浏览器选择器必须通过
点击打开,因为 Web Bluetooth 发现阶段需要用户手势。
## 🔬 首先使用 nRF Connect 进行验证
[nRF Connect for Mobile](https://www.nordicsemi.com/Products/Development-tools/nRF-Connect-for-mobile)
是在责怪浏览器之前进行独立检查的有用工具。浏览器理应得到
一次公正的审判。🧑⚖️
1. 启动 BLE 扫描,唤醒卷尺,并连接到 `ES-Tape`。
2. 打开 service `0783b03e-8535-b5a0-7140-a304d2495cb7`。
3. 在 characteristic 上启用通知
`0783b03e-8535-b5a0-7140-a304d2495cb8`。
4. 拉出卷尺并确认是否出现 20 字节的通知。
5. 按下卷尺按钮并寻找以 `SM` 结尾的数据串。
6. 不要向 `...5cba` 写入数据;其命令协议在此未作记录。
如果 nRF Connect 可以工作,但浏览器找不到卷尺,请检查浏览器
支持、站点权限、HTTPS/localhost 以及卷尺是否已唤醒。
## 🧭 逆向工程:A -> B -> C
### A. 👀 观察
在不预设设备功能的情况下进行扫描。记录其广播名称、
服务、characteristics、属性、描述符和未触碰的通知
字节。从只读开始;神秘的写入 characteristic 不需要你去问候它。
### B. 🧩 关联
每次只更改一个物理输入:拉出卷尺、保持已知长度、
切换单位或按下一个按钮。添加一个操作标记,记录物理
显示屏,并将其与确切的数据包和时间戳配对。
### C. ✅ 确认
重复相同的测试,尝试边界值,断开并重新连接,并将
事实分类为**已观察**、**已推断**和**未知**。只有在这之后才能将规则
编码到解析器中。第二个物理设备是验证某项发现是
协议规则还是仅仅是一个单独设备特性的最佳测试。
有关当前的证据和开放问题,请参阅 [docs/protocol.md](docs/protocol.md)。
## 📦 观察到的协议
| 角色 | UUID |
| --- | --- |
| Custom service | `0783b03e-8535-b5a0-7140-a304d2495cb7` |
| Notify characteristic | `0783b03e-8535-b5a0-7140-a304d2495cb8` |
| Write Without Response characteristic | `0783b03e-8535-b5a0-7140-a304d2495cba` |
观察到的测量帧:
```
*AAAAA;BBBBB;CCCCSU\n
```
示例:
```
*00530;00000;0000PM\n
```
当前的解码器将 `00530` 解释为 `53 mm` (`5.3 cm`)。第二和
第三个数字字段仍然未知,这比给它们
起一个自信但错误的名字要好得多。
## 🔐 捕获数据和隐私
捕获的数据会保留在当前源的 IndexedDB 中。JSON 和 CSV 导出可能
包含页面 URL、浏览器 user agent、浏览器提供的设备标识符、
时间戳和原始数据包。在发布前请检查导出内容。
**Delete captures** 会删除此站点存储的会话,并立即启动
一个新的空会话。清除浏览器站点数据也会将它们删除。
## 🛠️ 开发
该应用使用纯 HTML、CSS、JavaScript 和 IndexedDB。没有框架、
构建步骤、后端、账户、分析、云存储或需要
安装的运行时包。自动解码器检查是可选的开发者工具。
```
npm test
```
```
.
|-- index.html User interface
|-- app.js Web Bluetooth and capture flow
|-- protocol.js Packet decoder and BLE UUIDs
|-- storage.js IndexedDB storage and exports
|-- styles.css Responsive interface
|-- test/ Decoder checks
|-- docs/protocol.md Evidence and unknowns
`-- docs/github-publishing.md Repository description and topics
```
发现另一款支持 BLE 的卷尺了?太棒了。在
分享捕获内容之前,请阅读 [CONTRIBUTING.md](CONTRIBUTING.md)。🧪
## ⚖️ 独立研究声明
协议说明来自对 BLE 流量的黑盒观察和用于
互操作性研究的受控物理测量。此代码库不
包含提取的固件、专有应用程序源代码或复制的商品
图稿。
RENPHO 和其他名称或标志属于其各自的所有者。本项目
不附属于制造商,也不受其赞助或认可。关于
逆向工程的法律因司法管辖区而异;贡献者应自行
确保合规。
## 📄 许可证
[MIT](LICENSE)
代码库:[akunopaka/smart-e-tape-measure-web-bluetooth](https://github.com/akunopaka/smart-e-tape-measure-web-bluetooth)标签:Web Bluetooth, 云资产清单, 命令控制, 多模态安全, 数据可视化, 数据采集, 智能硬件, 物联网, 自定义脚本, 蓝牙低功耗, 逆向工程