【Android】Bluetooth HCI スヌープ ログの取り方 【2018年12月 最新版】
経緯
あるところから、あるハードウェアのBluetooth通信解析(パケットキャプチャ)を頼まれて、悩んだことのメモです。
今回の検証端末はNexus5X Android 8.1.0
を使用しています
本題
WiresharkをDL
ここら辺から適当にDLしてくださいな〜。
Wireshark · Go Deep.
ADBコマンドを使えるようにする
Mac ユーザで brewコマンド、brew caskコマンドが使える人は以下のようにインストール出来ます。
brew cask install android-platform-tools
brew caskってのは簡単にいうとmacOS のアプリケーションをバイナリから良い感じにインストールして使えるようにしてくれるナイスツールです。
caskのインストールは以下を参照のこと。
github.com
Android端末設定
- 設定 > ビルド番号 を連打しまくって開発者オプションを出す
- 開発者オプションから、USBデバッグをON
- 開発者オプションから、Bluetooth HCIスヌープログをON
- いつも通りBluetooth通信をしてみるとその生ログがどんどん端末内のファイルに書き込まれる
Bluetooth HCIスヌープログをOFFにしないと端末の中に、Bluetooth通信のログがどんどん溜まってあっという間に、容量無くなるので注意!
ログを書き出す
ここが一番鬼門だった場所でやっと突破できた。
以前までのadb shell cat
などのコマンドでログの保存場所をみつけることができなくなったので、バグレポートの機能を使うことで同じことを実現できる。
端末とPCをUSBで繋いで
adb bugreport bugreportfolder
を叩くとbugreportfolder
というzipが生成されるので、解凍する。
そして以下のようなファイルが確認できるはず
バグレポートの中身
バグレポートのファイル名は以下のような感じになっているハズ
bugreport-bullhead-OPM4.171019.016.A1-2018-12-21-00-02-56.txt
んでこれから Bluetooth に関するログ部分を抽出する必要がある。
この抽出のためのPythonスクリプトをGoogleが用意しているのでありがたく使わせていただく。
tools/scripts/btsnooz.py - platform/system/bt - Git at Google
このスクリプトを使ってログを抽出する。
./btsnooz.py bugreport-bullhead-OPM4.171019.016.A1-2018-12-21-00-02-56.txt > BTSNOOP.log
そうすると生ログのみのファイルが生成される。
Wireshark で解析をする
Wiresharkのファイル > 開く から先ほど生成したBTSNOOP.log
を選択するとこんな感じでログファイルがみることができるようになる!
そしてこれを元にどんどん辿っていって通信の方法や、どんなやりとりをしているかを逐一追っていけば、Android端末と、その他のハードウェアがどういったやりとりをしているかが解析できるってわけです。