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

Flipper BLE Spam を OFW に移植 + ESP32 外付けで距離を伸ばす

// created

ble-spam-esp32-boost は Flipper Zero の外部アプリ(.fap)で、BLE アドバタイズパケットを撒いて、近くのスマホや PC にペアリングダイアログ・通知・デバイス検出を発生させる。きっかけは Flipper を公式ファームウェア OFW 1.4.3 に戻したこと。Momentum の BLE Spam は Momentum 専用 API を大量に使っていて、公式ファームウェア下では丸ごと動かなくなったので、Momentum BLE Spam v6.6 を移植し、ついでにアドバタイズ距離を伸ばす ESP32 外付けを足した。

攻撃は 11 種類内蔵。Apple Continuity、Google FastPair、Samsung EasySetup、Microsoft SwiftPair、それに NameFlood と LoveSpouse。Flipper 単体で動き、本体の STM32WB の BLE 無線を使う。距離は 1〜3 メートル。

ESP32 デュアル無線

本体の出力は小さく、少し離れると信号が届かなくなる。そこでオプションの boost を作った。GPIO UART に Ghost ESP ファームウェアを焼いた ESP32 を外付けし、2 つの無線を同時に撃つと、距離が 10〜20 メートルまで伸びる。配線は難しくない。Flipper の TX(pin13)、RX(pin14)、GND、3V3 を ESP32 に向けてつなぐだけ、115200 baud。

検出は自動。アプリ起動時に USART チャンネルを掴み、info を投げて探る。通れば boost を有効化し、タイトルバーが “BLE Spam+ESP” に変わる。以降、攻撃を選ぶたびに対応する Ghost ESP コマンド blespam -apple / -google / -samsung / -ms / -random にマッピングして UART から送り、2 つのチップが同時に発火する。LoveSpouse の 2 つは対応する ESP コマンドがなく本体のみで動くので、ESP32 を挿していなくても動く。

移植でハマった点

OFW と Momentum の API 差分が作業の大半だった。印象に残った 2 つを記しておく。FontBatteryPercent は Momentum 専用のフォント enum で OFW にはないので、FontSecondary に差し替えた。variable_item_list_get() という getter も OFW は用意していないので、VariableItem* の参照を自分で保存して使い回すしかなかった。残りは SDK バージョンの整合。ufbt で 1.4.3 SDK 向けにビルドし、成果物 dist/ble_spam.fap を Flipper の apps/Bluetooth/ に放り込めば完了。

これは自分のデバイスで遊んだり、BLE アドバタイズプロトコルを研究するためのもの。周囲の人に干渉するので、嫌がらせには使わないこと。上流のフレームワークとプロトコル実装は Willy-JL、ECTO-1A、Spooks4576 の面々の功績で、自分がやったのは ESP32 boost と OFW 1.4.3 への移植。Momentum BLE Spam v6.6 ベース、GPL v3.0。リポジトリは https://github.com/dwgx/ble-spam-esp32-boost