0x0 前言
纯逆向新手,接触逆向两个月左右。
手头有一个小米手环4NFC版本,内置小爱同学,能够语音对话,进而控制智能家居,做一些操作如设置闹钟等。因对其实现原理好奇,并且想拓展其功能,遂逆向。百度只有Miband3之前的研究,到了Miband4的新功能,我应该还是第一个。
0x1 逆向前准备
首先,要想使用小米手环中的语音助手,手环必须和手机保持连接,并且小米运动APP要保持后台运行。很显然,小米手环并没有内置语音识别的功能,猜测其应该是将声音传感器的数据发送给手机,然后手机进行语音识别,自然语义处理之后再发送给手环。
而在安卓中,想要实现BLE(低功耗蓝牙)通讯,必须要调用
复制代码 隐藏代码
boolean android.bluetooth.BluetoothGatt.writeCharacteristic(BluetoothGattCharacteristic characteristic)
具体API可以参考Google的
我们就从这里开始入手。
0x2 开始逆向
我们使用Jadx打开小米运动APP,查看其源代码,发现大部分代码混淆得有点厉害,不过这不是问题。
我们直接使用代码搜索功能搜索“writeCharacteristic”,发现了我们想要的结果。