dwgx@blog:~$dwgx
> cd ../posts

Flipper Zero 向けに BLE Spam アプリを書く

// created

flipper-custom-apps は Flipper Zero 向けに書いたカスタムアプリで、核となるのは X-BLE Spam だ。仕組みは単純で、公式の furi_hal_bt_extra_beacon_* で BLE アドバタイズパケットを送り、Apple・Samsung・Android・Windows のペアリング広告に偽装する。すると近くのスマホが自動でペアリングダイアログを出す。

デバイスプロファイルを 40 種類内蔵している。Apple 側は Proximity Pair(AirPods 各世代、Beats、AirTag)と Nearby Action(Vision Pro、AppleTV、HomePod、HomeKit)、ほかに Samsung Buds/Galaxy Watch の EasySetup、Android Fast Pair、Windows Swift Pair、さらに LoveSpouse も入れてある。[ALL] Rotate を追加して自動で巡回させ、ブロードキャストのたびに BLE MAC をランダムに変える。同じアドレスを使い続けないためだ。

UI はごく素朴で、左右でプロファイルを切り替え、OK で開始・停止、画面には Broadcasting BLE:OK の一行、エラー時は BLE:ERR を表示し、青/赤の LED で状態を区別する。終了時には Bluetooth の状態をきれいに復元する。そうしないと後で Flipper を使うときに不具合が出る。

手をかけたのは ESP32 との連携だ。Ghost ESP か Marauder ファームウェアを載せた ESP32 を GPIO UART で接続し、アプリがコマンドを転送して、二つの無線で同時に撃つ。二つのファームはコマンド形式が違うので、いっそ両方送っている(blespam -appleblespam -t apple)。どちらのファームがどちらを認識するかは向こう任せで、停止時は blespam -sstopscan を送る。UART は 115200 で、ESP32 を検出しなければ boost はスキップする。Flipper 単体での動作には影響しない。

構成は外部 FAP が一つだけ。application.famFlipperAppType.EXTERNAL として宣言し、ufbt でビルドする(ufbt build、または ufbt launch で直接デプロイ)。成果物を apps/Bluetooth/ に置けば動く。x_ble_spam.c がエントリポイント・UI・パケット構築で、esp_boost.c/h が ESP32 側の UART を担当する。

これはあくまで自分で Bluetooth プロトコルとデバイスフィンガープリントを研究するためのものだ。リポジトリはカスタムライセンスで、個人の学習に限り、商用と再配布は不可。