永不消逝的電波(三):低功耗藍牙(BLE)入門之如何調戲別人的小米手環


0×00 前言

藍牙(Bluetooth),一種無線技術標准,用來讓固定與移動設備,在短距離間交換數據,以形成個人局域網(PAN)。其使用短波特高頻(UHF)無線電波,經由2.4至2.485 GHz的ISM頻段來進行通信。1994年由電信商愛立信發展出這個技術。它最初的設計,是希望創建一個RS-232數據線的無線通訊替代版本。

藍牙技術目前由藍牙技術聯盟(SIG)來負責維護其技術標准,這個聯盟擁有超過20,000間公司成員,其成員的領域分布在電信、電腦、網絡與消費性電子產品上。

藍牙也是目前數碼產品中不可或缺的模塊。藍牙技術的出現讓我們在連接各種設備的時候不再被繁多的數據線所束縛,比如音響、電腦、鼠標、鍵盤,甚至是汽車。

0×01 藍牙版本更新

藍牙技術版本更新:1.1、1.2、2.0、2.1、3.0、4.0、4.1、4.2

藍牙1.1標准:為最早期版本,傳輸率約在748~810kb/s,因是早期設計,容易受到同頻率之產品所干擾下影響通訊質量。

藍牙1.2標准:同樣是只有 748~810kb/s 的傳輸率,但在加上了(改善 Software)抗干擾跳頻功能。

藍牙2.0標准:1.2 的改良提升版,傳輸率約在 1.8M/s~2.1M/s,開始支持雙工模式——即一面作語音通訊,同時亦可以傳輸檔案/高質素圖片。

藍牙2.1標准:2007年8月2日,藍牙技術聯盟正式批准了藍牙2.1版規范,即“藍牙2.1+EDR”,可供未來的設備自由使用。相對2.0版本主要是提高了待機時間2倍以上,技術標准沒有根本性變化。

藍牙3.0標准:2009年4月21日,藍牙技術聯盟頒布的新一代標准規范"Bluetooth Core Specification  Version 3.0 High Speed"(藍牙核心規范3.0版 ),核心是"Generic Alternate  MAC/PHY"(AMP)一種全新的交替射頻技術,允許藍牙協議棧針對任一任務動態地選擇正確射頻。3.0的數據傳輸率提高到了大約24Mbps(即可在需要的時候調用802.11 WI-FI用於實現高速數據傳輸)。3.0的傳輸速速率是2.0的八倍。

藍牙4.0標准:於2010年7月7日正式發布,是藍牙3.0+HS規范的補充,新版本的最大意義在於低功耗,同時加強不同OEM廠商之間的設備兼容性,並且降低延遲,理論最高傳輸速度依然為24Mbps(即3MB/s),有效覆蓋范圍擴大到100米(之前的版本為10米)。4.0是專門面向對成本和功耗都有較高要求的無線方案,可廣泛用於衛生保健、體育健身、家庭娛樂、安全保障等諸多領域。

....

正如上面所說,藍牙4.0是以低功耗技術為代表優勢的藍牙核心規格版本。

0×02 低功耗藍牙術語及概念:

藍牙設備所用波段是無需認可的2.4 GHz ISM(工業、科研和醫療)波段。跳頻收發器用於對抗干擾及信號衰減。

2.1 頻率和信道:

藍牙系統所使用的波段為2.4 GHz ISM波段。其頻率范圍是2400 – 2483.5 MHz

BlueTooth 有79個射頻信道,按0-78排序,並於2402 MHz開始,以1 MHz分隔:

channel 00 : 2.402000000 Ghz
channel 01 : 2.403000000 Ghz
…
channel 78 : 2.480000000 Ghz

BTLE有40個頻道:

channel 37 : 2.402000000 Ghz
channel 00 : 2.404000000 Ghz
channel 01 : 2.406000000 Ghz
channel 02 : 2.408000000 Ghz
channel 03 : 2.410000000 Ghz
channel 04 : 2.412000000 Ghz
channel 05 : 2.414000000 Ghz
channel 06 : 2.416000000 Ghz
channel 07 : 2.418000000 Ghz
channel 08 : 2.420000000 Ghz
channel 09 : 2.422000000 Ghz
channel 10 : 2.424000000 Ghz
channel 38 : 2.426000000 Ghz
channel 11 : 2.428000000 Ghz
channel 12 : 2.430000000 Ghz
channel 13 : 2.432000000 Ghz
channel 14 : 2.434000000 Ghz
channel 15 : 2.436000000 Ghz
channel 16 : 2.438000000 Ghz
channel 17 : 2.440000000 Ghz
channel 18 : 2.442000000 Ghz
channel 19 : 2.444000000 Ghz
channel 20 : 2.446000000 Ghz
channel 21 : 2.448000000 Ghz
channel 22 : 2.450000000 Ghz
channel 23 : 2.452000000 Ghz
channel 24 : 2.454000000 Ghz
channel 25 : 2.456000000 Ghz
channel 26 : 2.458000000 Ghz
channel 27 : 2.460000000 Ghz
channel 28 : 2.462000000 Ghz
channel 29 : 2.464000000 Ghz
channel 30 : 2.466000000 Ghz
channel 31 : 2.468000000 Ghz
channel 32 : 2.470000000 Ghz
channel 33 : 2.472000000 Ghz
channel 34 : 2.474000000 Ghz
channel 35 : 2.476000000 Ghz
channel 36 : 2.478000000 Ghz
channel 39 : 2.480000000 Ghz

2.2 藍牙規格:

規格名稱     規格類型     分配編碼     規格級別
警報類別ID     org.bluetooth.characteristic.alert_category_id     0x2A43     已采納
警報類別ID位掩碼     org.bluetooth.characteristic.alert_category_id_bit_mask     0x2A42     已采納
警報級別     org.bluetooth.characteristic.alert_level     0x2A06     已采納
警報通知控制點     org.bluetooth.characteristic.alert_notification_control_point     0x2A44     已采納
警報狀態     org.bluetooth.characteristic.alert_status     0x2A3F     已采納
Appearance     org.bluetooth.characteristic.gap.appearance     0x2A01     Adopted
電池電量     org.bluetooth.characteristic.battery_level     0x2A19     已采納
血壓功能     org.bluetooth.characteristic.blood_pressure_feature     0x2A49     已采納
血壓測量     org.bluetooth.characteristic.blood_pressure_measurement     0x2A35     已采納
人體傳感器定位     org.bluetooth.characteristic.body_sensor_location     0x2A38     已采納
引導鍵盤輸入報告     org.bluetooth.characteristic.boot_keyboard_input_report     0x2A22     已采納
引導鍵盤輸出報告     org.bluetooth.characteristic.boot_keyboard_output_report     0x2A32     已采納
引導鼠標輸入報告     org.bluetooth.characteristic.boot_mouse_input_report     0x2A33     已采納
CSC功能     org.bluetooth.characteristic.csc_feature     0x2A5C     已采納
CSC測量     org.bluetooth.characteristic.csc_measurement     0x2A5B     已采納
當前時間     org.bluetooth.characteristic.current_time     0x2A2B     已采納
自行車功率控制點     bluetooth.characteristic.cycling_power_control_point     0x2A66     已采納
自行車功率特征     org.bluteooth.characteristic.cycling_power_feature     0x2A65     已采納
自行車功率測量     org.blueeooth.cycling_power_measurement     0x2A63     已采納
自行車功率矢量     org.bluetooth.characteristic.cycling_power_vector     0x2A64     已采納
日期時間     org.bluetooth.characteristic.date_time     0x2A08     已采納
星期日期時間     org.bluetooth.characteristic.day_date_time     0x2A0A     已采納
星期     org.bluetooth.characteristic.day_of_week     0x2A09     已采納
Device Name     org.bluetooth.characteristic.gap.device_name     0x2A00     Adopted
日光節約時間偏移     org.bluetooth.characteristic.dst_offset     0x2A0D     已采納
准確時間256     org.bluetooth.characteristic.exact_time_256     0x2A0C     已采納
固件修訂字符串     org.bluetooth.characteristic.firmware_revision_string     0x2A26     已采納
血糖功能     org.bluetooth.characteristic.glucose_feature     0x2A51     已采納
血糖測量     org.bluetooth.characteristic.glucose_measurement     0x2A18     已采納
血糖測量環境     org.bluetooth.characteristic.glucose_measurement_context     0x2A34     已采納
硬件修訂字符串     org.bluetooth.characteristic.hardware_revision_string     0x2A27     已采納
心率控制點     org.bluetooth.characteristic.heart_rate_control_point     0x2A39     已采納
心率測量     org.bluetooth.characteristic.heart_rate_measurement     0x2A37     已采納
HID控制點     org.bluetooth.characteristic.hid_control_point     0x2A4C     已采納
HID信息     org.bluetooth.characteristic.hid_information     0x2A4A     已采納
IEEE 11073-20601監管認證數據表     org.bluetooth.characteristic.ieee_11073-20601_regulatory_certification_data_list     0x2A2A     已采納
中間體套囊壓力     org.bluetooth.characteristic.intermediate_blood_pressure     0x2A36     已采納
中間體溫度     org.bluetooth.characteristic.intermediate_temperature     0x2A1E     已采納
LN控制點     org.bluetooth.ln_control_point     0x2A6B     已采納
LN功能     org.bluetooth.characteristic.ln_feature     0x2A6A     已采納
當地時間信息     org.bluetooth.characteristic.local_time_information     0x2A0F     已采納
定位和速度     org.bluetooth.location_and_speed     0x2A67     已采納
制造商名稱字符串     org.bluetooth.characteristic.manufacturer_name_string     0x2A29     已采納
測量間隔     org.bluetooth.characteristic.measurement_interval     0x2A21     已采納
型號字符串     org.bluetooth.characteristic.model_number_string     0x2A24     已采納
導航     org.bluetooth.characteristic.navigation     0x2A68     已采納
新警報     org.bluetooth.characteristic.new_alert     0x2A46     已采納
Peripheral Preferred Connection Parameters     org.bluetooth.characteristic.gap.peripheral_preferred_connection_parameters     0x2A04     Adopted
Peripheral Privacy Flag     org.bluetooth.characteristic.gap.peripheral_privacy_flag     0x2A02     Adopted
PnP ID     org.bluetooth.characteristic.pnp_id     0x2A50     已采納
定位質量     org.bluetooth.position_quality     0x2A69     已采納
協議模式     org.bluetooth.characteristic.protocol_mode     0x2A4E     已采納
Reconnection Address     org.bluetooth.characteristic.gap.reconnection_address     0x2A03     Adopted
記錄存取控制點     org.bluetooth.characteristic.record_access_control_point     0x2A52     已采納
參考時間信息     org.bluetooth.characteristic.reference_time_information     0x2A14     已采納
報告     org.bluetooth.characteristic.report     0x2A4D     已采納
報告地圖     org.bluetooth.characteristic.report_map     0x2A4B     已采納
振鈴器控制點     org.bluetooth.characteristic.ringer_control_point     0x2A40     已采納
振鈴器設定     org.bluetooth.characteristic.ringer_setting     0x2A41     已采納
RSC功能     org.bluetooth.characteristic.rsc_feature     0x2A54     已采納
RSC測量     org.bluetooth.characteristic.rsc_measurement     0x2A53     已采納
SC控制點     org.bluetooth.characteristic.sc_control_point     0x2A55     已采納
掃描間隔窗口     org.bluetooth.characteristic.scan_interval_window     0x2A4F     已采納
掃描刷新     org.bluetooth.characteristic.scan_refresh     0x2A31     已采納
傳感器定位     org.bluetooth.characteristic.sensor_location     0x2A5D     已采納
序列號字符串     org.bluetooth.characteristic.serial_number_string     0x2A25     已采納
Service Changed     org.bluetooth.characteristic.gatt.service_changed     0x2A05     Adopted
軟件修訂字符串     org.bluetooth.characteristic.software_revision_string     0x2A28     已采納
獲支持的新警報類別     org.bluetooth.characteristic.supported_new_alert_category     0x2A47     已采納
獲支持的未讀警報類別     org.bluetooth.characteristic.supported_unread_alert_category     0x2A48     已采納
系統ID     org.bluetooth.characteristic.system_id     0x2A23     已采納
溫度測量     org.bluetooth.characteristic.temperature_measurement     0x2A1C     已采納
溫度類型     org.bluetooth.characteristic.temperature_type     0x2A1D     已采納
時間准確度     org.bluetooth.characteristic.time_accuracy     0x2A12     已采納
時間源     org.bluetooth.characteristic.time_source     0x2A13     已采納
時間更新控制點     org.bluetooth.characteristic.time_update_control_point     0x2A16     已采納
時間更新狀態     org.bluetooth.characteristic.time_update_state     0x2A17     已采納
日光節約時間的時間     org.bluetooth.characteristic.time_with_dst     0x2A11     已采納
時區     org.bluetooth.characteristic.time_zone     0x2A0E     已采納
射頻功率     org.bluetooth.characteristic.tx_power_level     0x2A07     已采納
未讀警報狀態     org.bluetooth.characteristic.unread_alert_status     0x2A45     已采納
記憶碼     UUID規格     UUID     參考規格
«設備名稱»     uuid16     0x2A00     藍牙核心規格第3卷C部分第12.1節
«外觀»     uuid16     0x2A01     藍牙核心規格第3卷C部分第12.2節
«外置設備隱私標志»     uuid16     0x2A02     藍牙核心規格第3卷C部分第12.3節
«重新連接地址»     uuid16     0x2A03     藍牙核心規格第3卷C部分第12.4節
«外置設備首選連接參數»     uuid16     0x2A04     藍牙核心規格第3卷C部分第12.5節
«服務更改»     uuid16     0x2A05     藍牙核心規格第3卷G部分第7.1節

2.3 藍牙UUID

UUID是“Universally Unique Identifier”的簡稱,通用唯一識別碼的意思。對於藍牙設備,每個服務都有通用、獨立、唯一的UUID與之對應。

例舉:

#藍牙串口服務
SerialPortServiceClass_UUID = '{00001101-0000-1000-8000-00805F9B34FB}'
LANAccessUsingPPPServiceClass_UUID = '{00001102-0000-1000-8000-00805F9B34FB}'

#撥號網絡服務
DialupNetworkingServiceClass_UUID = '{00001103-0000-1000-8000-00805F9B34FB}'

#信息同步服務
IrMCSyncServiceClass_UUID = '{00001104-0000-1000-8000-00805F9B34FB}'
SDP_OBEXObjectPushServiceClass_UUID = '{00001105-0000-1000-8000-00805F9B34FB}'

#文件傳輸服務
OBEXFileTransferServiceClass_UUID = '{00001106-0000-1000-8000-00805F9B34FB}'

分享幾個藍牙相關的文章、掃描器和App:

基於HACKRF的低功耗藍牙(BTLE)packet sniffer/scanner

項目地址:https://github.com/JiaoXianjun/BTLE

博客:http://sdr-x.github.io/BTLE-SNIFFER/

手機App(iphone)

BLE Scanner
LightBlue

0×03 調戲小米手環

小米手環的主要功能包括查看運動量,監測睡眠質量,智能鬧鍾喚醒等。可以通過手機應用實時查看運動量,監測走路和跑步的效果,還可以通過雲端識別更多的運動項目。

小米手環配備了低功耗藍牙芯片及加速傳感器,待機可達30天。(→_→ 這里真的不是廣告,雖然,看起來很像… 順便吐槽一下渣米手環,藍牙信號不穩定經常斷線…)

今年360HackPwn大會上,有小米手環破解的演示和講解(木有去現場只能自己動手玩了)。下面用到剛剛推薦的LightBlue這個App,打開App可以看到附件的藍牙設備信號:

連接上小米手環,我們可以看到這些參數:

UUID:FEE0

0xFF01
0xFF02
......
0xFF0F

UUID:FEE1

0xFEDD
0xFEDE
......
0xFFD2
0xFFd3

UUID:FEE7

0xFEC7
0xFEC8
0xFEC9

immediate Alert

Alert Level

在Alert Level中“Write new value”(寫入新值)1和2都行(震動級別:0不震動、1輕微&小幅震動、2強烈震動)可控制小米手環的震動。通過這種方法,可控制一定范圍內任何人的小米手環,使其不停震動…(聽起來,總感覺怪怪的→_→ )

0×04 演示視頻:

0×05 參考:

百科、文庫

http://developer.bluetooth.cn/libs/Cn/Overview/CoreArc/2013/1231/4.html

https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.alert_level.xml

Exploring Bluetooth & iBeacons – from software to radio signals and back


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM