mozyのかきおき

mozyの読書感想文や思考置き場

【Android】Bluetooth HCI スヌープ ログの取り方 【2018年12月 最新版】

f:id:mozy_ok:20181221003009j:plain

経緯

あるところから、あるハードウェアの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が生成されるので、解凍する。
そして以下のようなファイルが確認できるはず

f:id:mozy_ok:20181221000549p:plain
生成されたファイルたち

バグレポートの中身

バグレポートのファイル名は以下のような感じになっているハズ
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を選択するとこんな感じでログファイルがみることができるようになる!

f:id:mozy_ok:20181221002138p:plain
ログの中身だよ

そしてこれを元にどんどん辿っていって通信の方法や、どんなやりとりをしているかを逐一追っていけば、Android端末と、その他のハードウェアがどういったやりとりをしているかが解析できるってわけです。

参考

Verifying and Debugging  |  Android Open Source Project

qiita.com