Jan 14 2020 更新
未知のBLE端末を、自前のオリジナルアプリから使う。っていうことをしたかったので、
BLEの仕様をハックするためにやったことの備忘録。
簡単にいうと、Androidでアプリの通信ログを取って、頑張って、どういう通信しているかを分析する。という感じになる。
準備
AndroidとMacを用意。
Androidの設定
Androidの開発者向けオプションを開く。
開発者向けオプションの出し方は、ググればすぐに出るので、それを参照。
例えば↓
[Android 4.2以降] 開発者向けオプションを表示させる方法@colorrabbit
開発者向けオプションから、スヌープログを有効化、また、USBデバッグを有効化する。
スヌープログを有効化した瞬間から、ログが吐き出される。
一度オフって、もう一度オンにすると、新しいログが吐き出されているっぽい。
Macの設定
まず、Terminalからadbコマンドを使えるようにする。
この記事を見て入れた。
adbをMacのターミナルで使えるようにする@furusin_oriver
※homebrewとかでも入れられるっぽい。
ちなみにADBは、PCに接続されたAndroidにTerminalからアクセスしちゃうぅ〜みたいなコマンド。
詳しい説明は、こことかにありそう。
忙しい人用に、冒頭だけ引用↓
Android Debug Bridge は adb と省略されます。 これは Android SDK の platform-tools に含まれるツールです。
このツールを用いると、現在利用可能なデバイス・エミュレータの列挙、シェルコマンドの発行、ファイルの転送などが行えます。
Eclipse から Android アプリをビルドしたときも、裏側で adb を用いてエミュレータまたは実際のデバイスに接続します。
次にWiresharkというログの解析アプリを入れる。
$ brew cask install wireshark
とすれば、Wireshark.appが自動でアプリケーションディレクトリに入っている。
ログを解析する
まず、AndroidをMacに繋ぐ。
$ adb devices
にデバイスが出れば接続できてることが確認できる。
接続できたら、早速ログファイルを抽出する。
$ adb bugreport report
でzipをダウンロードする。
コマンド実行後、少し待つと、report.zip
というフォルダが今いるディレクトリに落ちてくるので解凍する。
report
の部分はフォルダの名前指定なので、なんでも良い。
その中のbugreport-bluexxxx-XXXX.000000.000-2020-01-01-00-00-00.txt
的な奴を探す。
これにログがあるけど、Wiresharkでは読めない形式なので、変換する必要がある。
Googleがいい感じのスクリプトを配布しているので、それを使う。
btsnooz.py
をログの.txt
と同じディレクトリに作って、Python2で実行する。
自分は、何も考えずPythonで実行したら、環境がPython3だったので、エラー出て5秒ほどハマった。
実行コマンドはこんな感じでよしなに。
$ python btsnooz.py bugreport-bluexxxx-XXXX.000000.000-2020-01-01-00-00-00.txt > BTSNOOP.log
BTSNOOP.log
の部分は任意で改名して良い。
ようやく。
Wiresharkを起動し、先ほどのBTSNOOP.log
を開くと記述されているログを見ることができる。
Macならこんな感じでいきなり開ける気がする。
$ open -a wireshark BTSNOOP.log
一旦ここまで。