本文转自LINUXDO一位大神的技术文章,蓝牙门锁解锁过程使用AI进行分析提问并引导AI生成相应的代码,最终完美实现目的,非常值得所有想要使用AI来提升能力的小伙伴们学习。
解决过程
第一步:抓包
对手机APP进行抓包(安卓手机我用抓包精灵,iPhone我用Stream),点击开锁我看到四个POST请求(抓包过程不在此介绍),分别是:
API接口 | 猜测功能用途 |
---|---|
/api/user/devices_and_keys |
获取与用户相关的设备和密钥信息 |
/history/push/record |
向服务器推送历史解锁记录 |
/push_record |
记录解锁事件 |
/update_device_battery |
更新设备电池状态 |
不得不说一句,接口命名很规矩,节省了我很多时间
/api/user/devices_and_keys请求返回内容如下(看到了设备密钥等信息):
分析接口发现开锁并不是使用网络请求开锁,并且结合安装APP时索取的各种权限(设备信息、网络、短信、蓝牙等等一堆强制权限)以及远离门锁时无法找到设备,不难猜想门锁极有可能是蓝牙解锁方式,使用蓝牙靠近门锁搜索,确实看到了与网络请求返回一致的device_name蓝牙设备[Slockxxxxxxxxx]
第二步:尝试抓包蓝牙
我使用了以下方式,确实抓到与门锁通信的记录了,但是!我看不懂
但是可以确定的是!手机和蓝牙设备进行了多次沟通~并且蓝牙请求每次传输的值是完全不同的
网上查询到类似的蓝牙解锁方案:BLE蓝牙的智能门锁应用案例-电子发烧友网 6
通过各种查询和研究抓包信息得知通信区块:读FFF4,写FFF3,读FFF4,写FFF3,读FFF5
我猜,写第二次FFF3的时候应该就是开锁
其中,读FFF4的操作,读取出来的值每次都是不同的!写FFF3时测试到只要进行写操作就自动断开蓝牙(因为没匹配正确的缘故)
接下来怎么办呢?咱也不懂蓝牙啊!
第三步:解包APP
第二天,我决定,解包apk看看有什么突破口没有!于是我去吾爱搜解包的方法
找到一个蛮适合小白的方案:
开整!很爽,一解就开
丢VSCode全局搜索devices_and_keys
找到文件如下:
简单的看了下~反编译的,不太懂,直接丢AI
第四步:AI 分析
既然知道是BLE通信,那我决定直接从BLE文件夹开始(按照感觉,dal处理网络请求,ble处理蓝牙通信解锁)
1. 首先我需要了解一下这个ble文件目录,看看这些文件分别是什么?
2. 得知目录作用继续追问
UnlockToolCallback.smali可能定义了解锁工具的回调接口,或类,处理结果,所以,先看看它做了什么!**
从AI分析结果看,这确实是处理解锁结果,比如判断设备电量,不是我想要的,但是前面提到的读FFF5操作,似乎就是对应设备电量获取的(但是在我手动进行蓝牙调试读取时FFF5返回为0000,不知道为什么,故我决定放弃对电量的考究)
但是这个结果不是我想要的,我想追溯解锁过程
3. 那就问问AI有什么文件进行了蓝牙通信
UnlockTool2.smali 可能存在主要逻辑!弄它!
好!这应该就是解锁主线了!
4. GATT连接及通信深入
设备连接:在
unlockTheDevice()
方法中,通过 GATT 连接到目标设备,使用bleGattCallback
处理连接和数据传输。
所以,看看bleGattCallback有什么!
好!越来越接近真相!
5. 印证前文 读FFF4,写FFF3,读FFF4,写FFF3,读FFF5
与之前蓝牙抓包中获取的信息一致!这就是我要的最终文件了!那按照猜想,写FFF3就是解锁, 接下来,从bleGattCallback的 onCharacteristicRead
入手,探索详细过程!
6. 探究蓝牙详细通信过程
从onCharacteristicRead中得到了详细的通信过程步骤!并且我看到了全文最重要的!加密操作:AesEncryption
当我继续提问AesEncryption
过程时,AI噶了
感觉是全文长度太长了,还是问的太多了?于是我就转战Claude了(因为代码全文很长,出于上下文考虑以及9月初感觉ChatGPT很呆 那时o1模型还没来,我先选择了克劳德,但克劳德额度太少了,后续还是ChatGPT辅助探索的)
7. 探索AES加密
在Claude问了一些,基本对AES和通信过程了解了,就不一一截图了!
至此!对加密通信过程了解完成!我开始转移到写程序复现!
8. 蓝牙通信调试过程,踩到了坑!
我开始引导ChatGPT使用Python写蓝牙调试程序,
以下是我的逐步引导提问内容:
- 对话1
1. python,在windows调用蓝牙,读取设备列表
- 对话2
1. 我想使用windows调试ble如何操作
- 对话3
1. 以下代码中,进行ble的通信过程是怎么样的 附代码:`BleGattCallback.smali`
2. 使用python模拟这个过程
3. 加密过程请使用AesEncryption中的开锁逻辑 附代码:`AesEncryption.smali`
(这个对话得到的结果不是很好,可能是上下文限制的缘故 很省略,且没有细节,故放弃)
- 对话4
1. 以下代码中,进行ble的通信过程是怎么样的,转换为python进行通信,使用import bluetooth,加密代码预留,稍后我来增加 附代码:`BleGattCallback.smali`
2. 好的,参照以下加密过程: 附代码:`AesEncryption.smali`
3. 开启门锁的蓝牙通信,帮我优化代码,打印详细日志,完善加密过程 附代码:`刚刚ChatGPT回复的代码,进行了简略的增删` 以及 `AesEncryption.smali`
至此 Python代码通信代码完成!
但是!调试发现一直各种报错,各种AI之后得知,使用电脑进行的通信协议不合适,咋不合适俺也不知道,没准备继续探究了!
9. 改写Python为HTML,直接手机端打开!
通过AI得知,安卓手机浏览器web页面也是可以调用蓝牙通信的!
所以直接将Python丢给了ChatGPT,引导他改成了HTML页面!
当时的录像:
撒花
等等!我的iPhone设备无法web调用蓝牙怎么办?我不能写个iOS的APP吧
上个周末,为了不带两个手机,我还顺便学习了ESP32开发板,连接WIFI之后,利用siri进行GET请求至开发板,开发板与门锁蓝牙通信解锁。(缺点:过程慢,需要五六秒;停电了怎么办;WIFI坏了怎么办;开发板坏了怎么办),算了,将就过吧
前天楼下散步,也不知道哪股风,突然让我灵光乍现!
好好好!!!那就!再来一局!
原文始发于微信公众号(AI技术笔记):极强AI入门学习实战案例:我用AI刻了把电子门锁-蓝牙BLE门锁解锁分析!
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论