Bluetooth Packet Loggerでリバースエンジニアリング

はじめに

Appleはios Developper向けにいくつかの開発者ツールを提供しています。

今回はその中のPacket Loggerというツールを使ってリバースエンジニアリングを行います。
iOSDevelopperのアカウントとios13以上の端末が必要になります。(ios13からスマホのログを取れるようになったらしいので)

今回リバースエンジニアリングを行うデバイスはSwitchBotです。部屋の電気をのON、 OFFを切り替える商品なのでシンプルな値の書き込みで操作できると思い買ってみました!

リバースエンジニアリングの環境構築

1. AdditionalToolのダウンロード

以下のリンクからAdditional Toolをインストールします。MacにインストールされているXcodeのversionと対になるものを選んでください。

https://developer.apple.com/download/more/

2.Bluetooth developer logging profileのインストール

Mac側で必要なものはPacketLoggerだけなのですが、iPhone側にもプロファイルをインストールしてあげる必要があります。

https://developer.apple.com/bug-reporting/profiles-and-logs/

iPhoneで直接インストールしても良いですし、MacでインストールしてAirDropで今日するでも良いんですが端末内にインストールをしてプロファイルにBluetooth Logging for iOSが追加されていることを確認します

3.端末とMacを接続しログが吐き出されることを確認する

iPhone側にはBluetoothのマークが出ているはずです、出ていなければプロファイルがうまくインストールできていないので手順2をやり直してみてください。

iPhoneを操作するとPacketLoggerのログがもりもり流れていきます。このログの中にiPhoneからのBluetooth周りのコマンド全てが流れているので中身を解析することでリバースエンジニアリングを行うことができます。

ログがあまり出ない場合は右上のFilterのつまみをいじると出力されるログの量が変わります。

リバースエンジニアリング

やっと今回の記事の本題です。SwitchBotの公式が出しているアプリがあるのでダウンロードします。

PacketLoggerはiPhoneのBluetooth通信全てをログとして表示させることができるのでアプリもログ表示の例外ではありません

では全てのBluetoothデバイスをリバースエンジニアリングできるかというとそれはまた別で、通信を暗号化しているアプリ場合の解析は困難です。

https://apps.apple.com/jp/app/switchbot/id1087374760

Whiteの値解析

公式アプリをしばらく動かしログの中身を解析していくと以下のようなログを読み取ることができました。

これがSwitchBotに対してWriteした値です。[0x57, 0x01]という値を書き込んでいることがわかりました。SwitchBotのアプリには1つのボタンをtapする以外の操作がなかったのでPeripheralに対して書き込める値はおそらくこれだけです。

LightBlue解析した値を検証

Bluetooth検証に便利なアプリLightBlueを使って解析した値をSwitchBotに書き込みます。

https://apps.apple.com/jp/app/lightblue/id557428110

スキャン一覧デバイスが出ている画面ではアンテナ画像の下にある数値はRSSIなので数値の大きさでiPhoneの近くにあるデバイスを見つけることができます。-の数値なので-30くらいが近いです。

WoHandにTapするとConnectするので次にWriteするServiceUUIDを選択するんですがSwitchBotの保持しているServiceのうちWrite可能なものはcba20002-224d-11e6-9fb8-0002a5d5c51bだけだったのでこちらに書き込みを行います。

解析した値でSwitchbotを動かすことができました!