Geekのためのマルチツール　Flipper Zero

# はじめに
本記事はGeekのためのマルチツールであるFlipper Zeroについて、記載しています。

以下は2023年9月18日、XでFlipper Zeroの公式アカウントによって投稿されたポストです。
ポストの通りですがついに日本でも[Joom](https://ja.wikipedia.org/wiki/Joom)経由でFlipper Zeroが購入可能になりました。:tada:

https://twitter.com/flipper_zero/status/1703717557880975740

このポストが投稿される前までは、日本からだと正規のルートでは購入できなかったため、このポストを知った時は心躍りました。

## Flipper Zero
**Flipper Zero**は無線プロトコル、アクセス制御システム、ハードウェアなどのデジタル要素をハッキングできるマルチツールです。

https://flipperzero.one/

たまごっちのように育成ゲームのような側面もあります。
信号を読み込んだりエミュレートすることで、ペットのイルカ:dolphin:が成長します。

イルカは色々なアニメーションが用意されています。

![Screenshot 2023-10-17 at 15.32.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/297700bc-1e8a-9ecf-3b59-42a0e51525b6.png)

本を読んでいるかと思えば...

![Screenshot 2023-10-10 at 08.06.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/ed1915a7-c01d-3eb4-e872-9a0b5f399829.png)

SENPAI !!!

![Screenshot 2023-10-10 at 08.07.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/3ae26c64-db7d-1a65-0ebf-006884970f6b.png)

### 機能
以下のような[**無線通信**](https://ja.wikipedia.org/wiki/%E7%84%A1%E7%B7%9A%E9%80%9A%E4%BF%A1)を用いたハッキングができます。

- Sub-1 GHz Transceiver
    - ガレージのドアやIOTセンサーなど1 GHz 未満の周波数帯域で動作するトランシーバー
- 125kHz RFID
    - 低周波数帯域で動作する[RFID](https://ja.wikipedia.org/wiki/RFID)タグなどデータを非接触で読み書きするシステム
- NFC
    - [近距離無線通信](https://ja.wikipedia.org/wiki/%E8%BF%91%E8%B7%9D%E9%9B%A2%E7%84%A1%E7%B7%9A%E9%80%9A%E4%BF%A1)と呼ばれ[RFID](https://ja.wikipedia.org/wiki/RFID)など個体識別技術の一種にも含まれる
- [Bluetooth](https://ja.wikipedia.org/wiki/Bluetooth)
    - デジタル機器用の近距離無線通信規格
- Infrared Transceiver
    - テレビやエアコンなど[赤外線](https://ja.wikipedia.org/wiki/%E8%B5%A4%E5%A4%96%E7%B7%9A)を使用したデータの送受信

### 仕様
Flipper Zeroで使用するデータは、**microSDカード**に保存されます。

従ってFlipper Zeroを使用するためには、事前にmicroSDカードの購入が必要です。
※製品には含まれていません。

公式ドキュメントの[MicroSD card setup](https://docs.flipper.net/basics/sd-card)を踏まえて、ファイルシステムはFAT12/16/32など[File Allocation Table](https://ja.wikipedia.org/wiki/File_Allocation_Table)及び[ExFAT](https://ja.wikipedia.org/wiki/ExFAT)をサポートします。

容量は最大256GBのSDカードと互換性があますが、4GBで十分です。

::: note
SanDiskやKingstonなどのブランドが推奨されています。
:::

### 技適マーク
技適について総務省のサイトを確認したところ、技術基準適合証明に関する以下の番号が確認できました。

工事設計認証番号：[210-175991](https://www.tele.soumu.go.jp/giteki/SearchServlet?pageID=jg01_01&PC=210&TC=N&PK=1&FN=220304N210&SN=%94F%8F%D8&LN=119&R1=*****&R2=*****)

**技術基準適合証明**とは、特定無線設備（小規模な無線局に使用するための無線設備）が電波法令の技術基準に適合していることを証明する制度[^1]です。

技適マークは、製品が梱包されていた箱から確認できます。

![写真 2023-10-09 15 49 09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/094ec371-8834-9285-6037-5d1cecd4100b.png)

また、Flipper Zeroの設定画面から「Rのマーク」も確認できます。
電波法に基づく技適マークは、Ｒに続く番号が付与されます。

![Screenshot 2023-10-19 at 20.49.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/8dd7df81-492a-e024-5182-89e2e4975c26.png)

::: note
技適マークは、電波法令で定めている技術基準に適合している無線機であることを証明するマークです。不明点については、総務省の[技適マークのＱ＆Ａ](https://www.tele.soumu.go.jp/j/adm/monitoring/summary/qa/giteki_mark/)をご参考にください。
:::

[^1]: [電波法 第三十八条の二の二](https://elaws.e-gov.go.jp/document?lawid=325AC0000000131)

## 購入方法
[Joom](https://ja.wikipedia.org/wiki/Joom)のMarketplaceからの購入方法について以下に記載します。

購入に必要な流れは以下の通りです。

1. アカウント登録
1. Marketplace購入

Marketplace購入後の商品到着にかかる時間については、日本からの発送だったため、思ったより時間はかかりませんでした。

余談ですが、Flipper Zeroはその人気の高さからビットコイン目的のフィッシングサイトにも利用されました。
興味がある場合は[「ハッカー向けたまごっち「Flipper Zero」のフィッシングサイト」](https://blog.criminalip.co.jp/posts/44007407/)の記事をご参照ください。

::: note
Amazonやメルカリでも出品されていますが、Joom経由の正規ルートで購入した方が、粗悪品を購入することなく安く入手できると思います。
:::

### アカウント登録
[JOOM GEEK](https://www.joom.com/geek/ja)にアクセスして画面上部の「ログイン」を押します。

![スクリーンショット 2023-10-14 11.50.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/eb743532-af2b-24a9-65bb-03ee728dc89d.png)

FacebookやGoogleアカウントが利用できます。
「ログイン方法をさらに表示」を押すと、メールアドレスなどを使用したアカウント登録もできます。

![スクリーンショット 2023-10-14 11.45.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/b6bcb815-b398-3bf5-2c4f-9f9a2ec8f075.png)

::: note
決済に関するクレジットカードの情報は、支払い時に入力します。
:::

### Marketplace購入
Flipper Zeroの公式サイトからの購入手順は、以下の通りです。

画面右上または中央の「BUY NOW」のボタンを押します。

![スクリーンショット 2023-10-08 14.43.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/40a72eab-dfc3-a54f-5764-93bed16a3a3b.png)

「JOOM GEEK」を押します。

![スクリーンショット 2023-10-08 14.43.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/03a5a898-ef19-be28-f04e-74984c7f969a.png)

Flipper Zeroのストアが表示されます。

![スクリーンショット 2023-10-08 14.43.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/a06d1406-da46-31ef-0bbf-c3f7f30af78f.png)

画面左上から支払い時の通貨を選択できます。

以下は、Flipper Zero本体とシリコンケースの2点を購入する場合の例です。
筆者は少しでも安く買うためにUSDを選択しました。

- USD
![スクリーンショット 2023-10-08 12.37.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/2609b999-fc11-e567-9736-c3f672f709ea.png)

- JPY
![スクリーンショット 2023-10-08 12.37.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/adb587dd-33c4-5368-70e1-04379a062fe5.png)

::: note
為替レートを考慮すると、支払い時の通貨の選択によって、実際に支払う金額に差が出ることが確認できます。
:::

## セットアップ
Flipper Zeroで遊ぶために最低限必要な作業は、公式ドキュメントの[First start](https://docs.flipper.net/basics/first-start)を踏まえて、以下の通りです。

- [x] 電源投入
- [x] Flipper Mobile Appのインストール
- [x] SDカードのフォーマット
- [x] ファームウェアのアップデート

![写真 2023-10-09 15 45 56.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/c42ec7db-7532-a0f8-4bea-f6be5a0f9598.jpeg)

ファームウェアのアップデートを行うためには、Flipperのモバイルアプリまたはデスクトップアプリケーション（qFlipper）のインストールが必要です。本記事ではモバイルアプリのiOSを使用します。

また、デスクトップアプリケーション（qFlipper）については、macOS、Windows、Linuxなど各種プラットフォームが用意されています。[Firmware Update](https://flipperzero.one/downloads)のページからダウンロードできます。

### 電源投入
開封して箱の中身を確認します。

![写真 2023-10-09 15 51 08.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/95ca6e67-c1b9-5357-d644-099b5cdc0c7b.jpeg)

箱の中には本体、充電に使用するケーブル（USB Type-C）、説明書、シールが付属されています。

![写真 2023-10-09 15 53 32.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/589e081c-b7fd-1545-71ce-7013cbcc086f.jpeg)

Flipper Zeroの本体を取り出します。

![写真 2023-10-09 15 54 27.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/8d0a5739-23ea-65af-00cd-98c4a2e23c66.jpeg)

以下はシリコンケースです。

![写真 2023-10-09 15 56 51.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/a193f125-b7d0-79cd-1d4c-1471e4eaf26b.jpeg)

シリコンケースを装着しました。ケースの裏側はカタカナでフリッパーと書かれています。

![写真 2023-10-09 15 57 35.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/ef3583ce-d663-c3ef-8c2c-c2d5c0f190db.jpeg)

BACKボタンを3秒間押し続けて、電源を投入します。

![写真 2023-10-09 15 59 41.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/5993a10c-fcb5-abf4-b84b-cb6e91c72bfc.jpeg)

Flipper Zeroが起動します。

![写真 2023-10-09 16 00 47.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/3f49b244-0498-2a5e-6e02-5c116e23fed4.jpeg)

メッセージを確認して、引き続きSDカードのセットアップを行います。

![写真 2023-10-09 16 10 21.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/c9a59394-99c1-e06e-b2f7-8f4986335538.jpeg)

### Flipper Mobile Appのインストール
iOSの場合はApp Storeから、Flipper Mobile Appのアプリをインストールします。

![写真 2023-10-09 16 11 13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/3d64849f-1794-03cb-0e1e-11efafb0e099.png)

Flipper Zeroの方は、Bluetoothの設定を「ON」に変更します。

![写真 2023-10-09 16 15 30.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/c97b24ae-ee11-8385-9e69-cc3a8123bc9e.jpeg)

Flipperのモバイルアプリ起動後、以下のような画面が表示されるので「Connect」を押します。

![写真 2023-10-09 16 12 47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/f99800bc-d515-d83a-1674-2166948c26ad.png)

Flipperのモバイルアプリを確認すると、Flipper Zeroのデバイスが認識されているので「Connect」を押します。

![写真 2023-10-09 16 15 54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/73a6b231-835a-defb-8834-ca6ea034a918.png)

Flipper Zeroのデバイスに接続されました。

![写真 2023-10-09 16 17 13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/ae6e043b-1131-728a-dcc3-b1e1a4afff24.png)

### SDカードのフォーマット
使用するのはSanDiskのSDカードです。

![写真 2023-10-09 18 40 24.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/cef049cd-d3a1-adc8-d9ea-1684a9aaadef.jpeg)

SDカード挿入後「OK」を押します。

![写真 2023-10-09 19 54 54.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/1aeb3395-d687-5d5f-a31a-6405c6d24867.jpeg)

「Format SD Card」を押します。

![写真 2023-10-09 19 57 34.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/cb2ee679-f021-10b7-b5e3-eb058691d23e.jpeg)

しばらくすると、フォーマットが完了するので「OK」を押します。

![写真 2023-10-09 19 59 07.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/7bcc659c-aeb4-888f-e404-0b4185179e38.jpeg)

### ファームウェアのアップデート
Flipperのモバイルアプリを起動後、以下のような画面が表示されている場合は「Update」を押します。

![写真 2023-10-09 20 04 49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/56a07fe3-9e17-3034-3a5a-b1eb7b67d93f.png)

 ファームウェアのアップデートが始まります。

![写真 2023-10-09 20 05 12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/83d446fb-ac2d-5681-e878-e2311d297f57.png)

アップデート終了後「OK」を押します。

![写真 2023-10-09 20 17 19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/adc119d5-2328-f564-3a3f-2efdeee89cbc.png)

## Demo
いくつかの機能を紹介します。

### Infrared Transceiver
テレビのリモコンを使用して赤外線を学習してみましょう。

メニュー画面から「Infrared」を押します。

![Screenshot 2023-10-17 at 21.10.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/6912a146-26b7-fbe8-e307-bc35bbb522de.png)

「Learn New Remote」を選択します。

![Screenshot 2023-10-17 at 21.11.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/137c6e4c-4525-9d9d-80a5-682a724faba3.png)

Flipper Zeroに対して、学習させたいリモコンのボタンを押します。

![Screenshot 2023-10-17 at 21.17.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/e579eb42-7983-7bcd-f42a-1aa507e85fd1.png)

以下のような画面が表示されれば成功です。「Save」を押して保存します。

![Screenshot 2023-10-17 at 21.21.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/eb6e8cf3-f3a1-f753-c618-8666f248bf7b.png)

1度学習させれば、Flipper Zeroを用いてテレビを操作できます。
なお、1つのボタンに対して1回の学習が必要です。

![kaden_rimokon_bannou.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/c2d0a75e-0e3f-b37d-ba6e-e7fd38aa83ab.png)

### Bad USB
Flipper ZeroをUSBデバイスとして認識させることでペイロード[^2]の実行が可能です。

本記事では、最初から登録されていたdemo用のペイロードを実行してみます。
Flipper ZeroとPC（macOS）がUSB接続された状態で、Flipper Zeroのメニュー画面から「Bad USB」を押します。

![Screenshot 2023-10-17 at 20.51.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/6fd2d694-ddc3-1017-b10f-0032f6af5f30.png)

「demo_macos」を押します。

![Screenshot 2023-10-17 at 20.39.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/8c558e40-3eba-5c44-693c-b2686cd80de4.png)

「Run」を押します。

![Screenshot 2023-10-17 at 20.42.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/931e0a91-b879-b16d-33ad-083839aff1cb.png)

以下のような画面が表示されます。

![Screenshot 2023-10-17 at 20.43.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/f43df828-1957-7621-b80a-4f8a546f9ebf.png)

PC（macOS）のターミナルを見ると、以下のような出力が確認できます。

```console
Your Terminal % cat > /dev/null << EOF
heredoc> Hello World!
heredoc> ============================================================
heredoc> 
heredoc>               _.-------.._                    -,
heredoc>           .-"'''"--..,,_/ /'-,               -,  ¥
heredoc>        .:"          /:/  /'¥  ¥     ,_...,  '. |  |
heredoc>       /       ,----/:/  /'¥ _¥~'_-"'     _;
heredoc>      '      / /'"""'¥ ¥ ¥.~'_-'      ,-"'/
heredoc>     |      | |  0    | | .-'      ,/'  /
heredoc>    |    ,..¥ ¥     ,.-"'       ,/'    /
heredoc>   ;    :    '/'""¥'           ,/--==,/-----,
heredoc>   |    '-...|        -.___-Z:_______J...---;
heredoc>   :         '                           _-'
heredoc>  _L_  _     ___  ___  ___  ___  ____--"'
heredoc> | __|| |   |_ _|| _ ¥| _ ¥| __|| _ ¥
heredoc> | _| | |__  | | |  _/|  _/| _| |   /
heredoc> |_|  |____||___||_|  |_|  |___||_|_¥
heredoc> 
heredoc> Flipper Zero BadUSB feature is compatible with USB Rubber Ducky script format
heredoc> More information about script syntax can be found here:
heredoc> https://github.com/flipperdevices/flipperzero-firmware/blob/dev/documentation/file_formats/BadUsbScriptFormat.md
heredoc> EOF
```

新規にスクリプトを作成する場合は、`.text`形式でペイロードを記述します。
スクリプト作成後、モバイルアプリまたはデスクトップアプリケーション（qFlipper）を使用して、`SD Card/badusb`配下にアップロードします。

以下はデスクトップアプリケーション（qFlipper）の画面です。

![スクリーンショット 2023-10-20 0.19.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/ba898634-f2f6-71f0-0145-534b683eb192.png)

::: note
Rubber Ducky スクリプトの構文については、[BadUsbScriptFormat.md](https://github.com/flipperdevices/flipperzero-firmware/blob/dev/documentation/file_formats/BadUsbScriptFormat.md)から確認できます。
:::

[^2]: Rubber Ducky スクリプト言語で書かれた一連のコマンド

## Flipper Lab
Flipper Labでは、コミュニティが開発したFlipper Zero用アプリケーションをインストールすることができます。

https://lab.flipper.net/apps

アプリケーションはGitHubで管理されているため、[flipper-application-catalog](https://github.com/flipperdevices/flipper-application-catalog)のリポジトリに対して貢献することもできます。

# おわりに
ハッカーとしてこんなにも心をくすぐられるガジェットは他にもないのではないでしょうか。

本記事では紹介しきれてませんが、Flipper Zeroは他にもGPIOピンを接続してハードウェアの制御、iButton、U2F (Universal 2nd Factor)の機能なども搭載しています。

遊ぶ際には、法に触れないようにしましょう。