如何優(yōu)雅的調(diào)戲小米手環(huán)

在公司調(diào)試藍(lán)牙4.0的適合弄到了同事小米的手環(huán),然后網(wǎng)上查到相關(guān)的資料,找到別人破解的控制手環(huán)震動(dòng)的接口,于是我就做了一點(diǎn)微小的工作,嘿嘿嘿。
<h3>一、藍(lán)牙4.0介紹</h3>

藍(lán)牙4.0應(yīng)用開發(fā)中比較常與開發(fā)者打交道的是GATT(The Generic Attribute Profile)協(xié)議,GATT協(xié)議確定了ble連接中的Server和Client進(jìn)行數(shù)據(jù)交互的過程和格式,它是ble通信的核心,也是ble應(yīng)用開發(fā)者必須了解的。舉個(gè)簡(jiǎn)單例子,小米手環(huán)中的各種數(shù)據(jù),例如行走距離、熱量消耗等都是通過GATT進(jìn)行傳輸

GATT協(xié)議實(shí)際跟HTTP協(xié)議比較像,在HTTP協(xié)議中,Client向Server請(qǐng)求一個(gè)特定的URL,然后Server收到請(qǐng)求后,根據(jù)這個(gè)URL以及相關(guān)的參數(shù)向Client發(fā)送對(duì)應(yīng)的數(shù)據(jù)。而在GATT中,與URL對(duì)應(yīng)的就是UUID,Client向Server請(qǐng)求特定的UUID,然后Server把這個(gè)UUID對(duì)應(yīng)的數(shù)據(jù)發(fā)送給Client。除了讀取數(shù)據(jù)之外,Client還可以向Server對(duì)應(yīng)的UUID寫入數(shù)據(jù),這個(gè)跟HTTP的post請(qǐng)求有點(diǎn)相似。

在GATT,數(shù)據(jù)是通過分層的方式進(jìn)行組織的,如下圖所示。

GATT Attribute

每一個(gè)Server可以有多個(gè)Service,每個(gè)Service下面可以有多個(gè)Characteristic,每一個(gè)Characteristic下面可以有多個(gè)Descripter。其中Service、Characteristic、Descripter都有自己的唯一UUID。Characteristic、Descripter都對(duì)應(yīng)著特定自己的數(shù)據(jù),Client可以向Server請(qǐng)求其對(duì)應(yīng)的數(shù)據(jù),并可以對(duì)其中的某些數(shù)據(jù)進(jìn)行寫操作。

其中值得注意的是每一個(gè)UUID對(duì)應(yīng)的數(shù)據(jù)的最大長(zhǎng)度被限制為512個(gè)字節(jié)。

**小米手環(huán)的名字對(duì)應(yīng)的UUID如下:**
Service:0000ffe0-0000-1000-8000-00805f9b34fb
Characteristic:0000ff02 -0000-1000-8000-00805f9b34fb </code>

<h3>二、調(diào)戲手環(huán)</h3>

**小米手環(huán)的震動(dòng)控制對(duì)應(yīng)的UUID如下:**
Service:00001802-0000-1000-8000-00805f9b34fb
Characteristic:00002a06-0000-1000-8000-00805f9b34fb
往該Characteristic中寫入1時(shí)會(huì)震動(dòng)兩次,寫入2時(shí)會(huì)震動(dòng)八次。</code>

知道了對(duì)應(yīng)的UUID,一切就比較好辦了。首先掃描設(shè)備,接下來連接設(shè)備,然后發(fā)現(xiàn)服務(wù),獲取到對(duì)應(yīng)的Characteristic,再往里面寫數(shù)據(jù),一氣呵成。


藍(lán)牙連接過程
藍(lán)牙連接過程

部分Android代碼如下:

        UUID shakeServiceUUID=UUID.fromString("00001802-0000-1000-8000-00805f9b34fb");
        UUID shakeCharaUUID=UUID.fromString("00002a06-0000-1000-8000-00805f9b34fb");
        BluetoothGattService shakeService=mBluetoothGatt.getService(shakeServiceUUID);
        BluetoothGattCharacteristic shakeChara=shakeService.getCharacteristic(shakeCharaUUID);
        //1震動(dòng)兩次,2震動(dòng)八次
        shakeChara.setValue(new byte[2]);
        mBluetoothGatt.writeCharacteristic(shakeChara);

參考資料:
safari
Xiaomi Mi Band BLE Protocol reverse-engineering and API
小米手環(huán)藍(lán)牙協(xié)議研究
藍(lán)牙學(xué)習(xí)之①:調(diào)戲小米手環(huán)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 低功耗藍(lán)牙(BLE)設(shè)備的通信基本協(xié)議是 GATT, 要操作 BLE 設(shè)備,第一步就是要連接設(shè)備,其實(shí)就是連接 B...
    風(fēng)雨byt閱讀 4,383評(píng)論 1 11
  • 藍(lán)牙 藍(lán)牙的波段為2400-2483.5MHz(包括防護(hù)頻帶)。這是全球范圍內(nèi)無需取得執(zhí)照(但定不是無管制的)的工...
    蘇永茂閱讀 6,604評(píng)論 0 11
  • 前言: 本文主要描述Android BLE的一些基礎(chǔ)知識(shí)及相關(guān)操作流程,不牽扯具體的業(yè)務(wù)實(shí)現(xiàn),其中提供了針對(duì)廣播包...
    幻影宇寰閱讀 5,598評(píng)論 6 19
  • Key Terms And Concepts 關(guān)鍵術(shù)語和概念 Here is a summary of key B...
    Jaesoon閱讀 2,571評(píng)論 0 5
  • 夜里 春雷暴動(dòng) 按捺已久的情感 化作雨水 肆意拍打凹凸不平的地面 踏荊棘之途 是為赴鋼筆之約 我依舊能清晰察覺 池...
    wiwi_ies閱讀 302評(píng)論 3 5

友情鏈接更多精彩內(nèi)容