M5Stack ESP32 デバイス上のハイテクいたずら用ファームウェア
ロゴ作成者: @unagironin
今年初めに発表されたように、M5Stick-NEMO はアーカイブされており、現在は積極的な開発は行われていません。このプロジェクトは私の個人的な目標をすべて上回っており、コミュニティが団結し、プロジェクトに興奮し、貢献し、インスピレーションを得ているのを見るのは素晴らしいことでした。
私の知る限り、このプロジェクトは、SD カード、無線モデム、大型 LED、RFID モジュールなどの外部ハードウェアを追加せずに、この種のトリックやいたずらに関して、M5Stick ファミリができる限界に達しました。バッテリー寿命も、これらの外部周辺機器を駆動するには最適とは言えません。多くの機能リクエストはこれらの外部デバイスのサポートを中心に展開されており、私にはこれらを追加するためのリソースも時間もありませんが、良いニュースは、他の人がその精神を引き継いで、正直に言って、より良い機能を提供していることです。非常に有望なプロジェクトの 1 つが CatHack です。
長い間、そしてすべての魚をありがとう!
NEMO は、Arduino IDE を使用した ESP32 開発についてさらに学ぶのに役立つ個人プロジェクトを開始しました。私は、自分自身への挑戦として、そしてこれらの攻撃をより深く理解するために、テクノロジー コミュニティで多くの注目を集めているいくつかの一般的なトレンドのいたずらを再現することにしました。
NEMO は、『ファインディング ニモ』に登場する小さくて賢くて頑固な魚にちなんで名付けられました。このプロジェクトは、特定の海洋生物に関連する別のハイテク機器とは対照的です。小さな開発キットと少しの好奇心があれば、できることがたくさんあることを証明したかったのです。私は、このプロジェクトで同様のデバイスの機能に取って代わるという妄想は持っていません。それはただの楽しみのためであり、私自身の教育のためです。
.github/workflow/compile.yml を DEAUTH 関数でコンパイルするように調整しました。
StickC Plus および Plus2 の SONG のサポートを追加しました
アクセスポイントの詳細を見る際に「攻撃メニュー」を追加
クローン ポータル (ターゲットと同じ SSID を持つ Evil ポータルを作成します)
認証解除攻撃 (このアクセス ポイントに接続されているデバイスに認証解除フレームをブロードキャストします)
Deauth+Clone (同じ SSID を持つ邪悪なポータルを作成し、その AP に認証解除フレームを送信します)
M5StickC デバイス使用時に SDCard をマウント/アンマウントする設定にオプションを追加しました
CARDPUTER を使用しない場合に SPI/SD を処理するための新しいファイルを作成しました
SDCARD は現在 M5StickC Plus2 に対応しています
アイデアは?
TV B-Gone ポート (MrArm の HAKRWATCH のおかげで) 多くの赤外線制御テレビ、プロジェクター、その他のデバイスを遮断します
AppleJuice iOS Bluetooth デバイスのペアリング スパム
SwiftPair (Windows) および Android の Bluetooth デバイス通知スパム
WiFi スパム - 面白い SSID、WiFi リックローリング、および 1 分あたり数百ものランダムな名前の SSID を作成するランダム モード
WiFi NEMO ポータル - 電子メール認証情報のソーシャル エンジニアリングを試みるキャプティブ ポータル - ユーザー名とパスワードを SD カードに保存します (サポートされているリーダーに挿入されている場合)
WiFi SSID スキャナー - 近くの 2.4 GHz SSID を表示し、それらに関する情報を取得し、NEMO ポータルで SSID のクローンを作成することもできます。
ユーザーが調整可能な 24 時間デジタル時計は M5 スティック RTC を搭載しているため、ディープ スリープや低バッテリー モードでも比較的安定した時間を保持します。
EEPROM による回転、明るさ、自動調光、NEMO ポータル SSID の設定
設定メニューのバッテリー残量とクレジット
主要なコントロールは 3 つあります。
ホーム - 現在のプロセスを停止し、NEMO のほぼどこからでもメニューに戻ります。
次へ - カーソルを次のメニュー オプションに移動します。ファンクションモードでは、通常、これによりプロセスが停止され、前のメニューに戻ります。
選択 - 現在選択されているメニュー オプションをアクティブにし、機能モードで薄暗くなった画面を起動します。
StickC と StickC-Plus
電源: 電源ボタンを 6 秒間長押しして、ユニットの電源をオフにします。
ホーム: 電源ボタン (USB ポートに最も近い) をタップします。
次へ: サイドボタンをタップします
選択: 本体前面の M5 ボタンをタップします。
カードピューター
ホーム: Esc/~/` キーまたは左矢印/, キーをタップします。
次へ/前へ: 下矢印/をタップします。キーと上矢印/;移動するためのキー
選択: OK/Enter キーまたは右矢印/? をタップします。鍵
NEMO ポータル モードでは、NEMO は、DNS、DHCP、および Web サーバーが有効化された「Nemo Free WiFi」(portal.h で構成可能) という名前のオープン WiFi ホットスポットを有効にします。
NEMO ポータルは、ログインするとインターネット アクセスが提供されると主張する偽のログイン ページを提供します。
これはソーシャル エンジニアリング攻撃であり、ページに入力されたユーザー名とパスワードが記録されます。
Wifi スキャンの詳細から、スキャン リストから既存の SSID のクローンを作成できます。 NEMO ポータルを終了すると、Evil Twin SSID がクリアされます
自分のデバイスからポータルに接続し、http://172.0.0.1/creds を参照することで、キャプチャされた資格情報を表示できます。
自分のデバイスからポータルに接続し、http://172.0.0.1/ssid を参照して、カスタム SSID を設定できます。
デバイスが設定用の EEPROM をサポートしている場合は、電源がオフになっている場合でも、入力したカスタム SSID がデフォルトとして保存されます。
デバイスに SD カード リーダーがあり、FAT ファイル システムでフォーマットされたカードが挿入されている場合、ユーザー名とパスワードは SD カードの nemo-portal-creds.txt に記録され、後で確認できるようになります。
SD カードのサポートは、M5Stack Cardputer プラットフォームでのみデフォルトで有効になります。 M5Stick デバイスで有効にすることができますが、SD カード リーダーを構築し、フロント パネルのピン ヘッダーに接続する必要があります。
NEMO ポータルは、教育またはデモンストレーションを目的とした、有効な範囲の作業を伴う専門的な業務でのみ使用されます。同意なく個人情報を保管、販売、使用することは法律違反です。 ?
これがNEMOを入手する最も簡単な方法です
M5Stick C Plus クイック スタートには、Linux、MacOS、Windows 用の M5Burner アプリへのリンクがあります。これは、UIFlow およびその他の公式ファームウェアをインストールするための公式ツールです。そこで NEMO の最新バイナリを提供します。
M5バーナーを起動する
左側のメニューから「StickC」(Cardputerの場合はStampS3)を選択します。
アプリ上部の検索を使用して「NEMO」を探します。私の公式ビルドは「4x0nn」によってアップロードされ、写真も追加されます。
「ダウンロード」をクリックします
「書き込み」をクリックします
Espressif スタート ガイドに従って ESP-IDF ツールをインストールします
esp-idf CMD ツールを開きます (Windows 上) - Mac または Linux では、esp-idf.py と esptool.py がシステム パスにある必要があります。
esptool.py --port COMPORT -b 115200 write_flash -z 0x0 M5Nemo-VERSION.bin
port は COM ポート (Windows の COM4、COM11 など) にすることができます。 Mac および Linux では通常、/dev/ttyUSB0、/dev/ttyACM0、または /dev/cu.usbserial-3 などの /dev にあります。
M5Nemo-VERSION.bin は、GitHub リリースからダウンロードしたバージョンである必要があります (入手可能な最新のものであることが望ましい)。
NEMO をカスタマイズしたい場合、またはプロジェクトに貢献したい場合は、ソースから NEMO を構築することに精通している必要があります。
Arduino IDEをインストールします。 Linux と Windows では Arduino 1.8 を、Windows では Arduino 2.2 を正常に使用しました。
Arduino IDE 用の M5Stack ボードをインストールします。 [ファイル] -> [設定] で、この URL を [ボード マネージャー URL] テキスト ボックスに貼り付けます。すでに URL が存在する場合は、URL の間にカンマを使用します。 https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/arduino/package_m5stack_index.json
M5Stack -> M5Stick-C-Plus が [ツール] -> [ボード] に表示されない場合は、[ツール] -> [ボード] -> [ボード マネージャー] を使用して M5Stack を検索します。これにより、Stick C Plus を含むほとんどの M5Stack ボードのサポートがインストールされます。
ボード メニューで正しいデバイス モデル (M5Stick-C、M5Stick-C-Plus、または M5Cardputer など) が選択されていることを確認します。
必要なライブラリをインストールします。 [スケッチ] -> [ライブラリを含める] -> [ライブラリ マネージャー] で、次のライブラリと必要な依存関係を検索してインストールします。
M5StickCPlus、M5StickC、または M5Cardputer
IRRemoteESP8266
プラットフォーム (STICK_C、STICK_C_PLUS、または CARDPUTER) の先頭近くにある適切な#define
行のコメントを解除します。
パーティションスキームを切り替えます。 Tools
] -> Partition Scheme
-> No OTA (Large APP)
] - このオプションにはHuge APP
というラベルが付いている場合があります。
構成
コードはクリーンにコンパイルされ、マスター ブランチまたはリリース タグからすぐに M5Stick C Plus で動作するはずです。
適切な#define
オプション 1 つだけをコメント解除しないと、コンパイラ エラーが発生します。
何らかの理由で画面がレベル 0 の非常に暗い状態からレベル 1 のほぼ完全に明るい状態に変化し、それ以上の明るさレベルが何も影響しない場合は、pct_brightness 変数を false に設定します。
プロジェクトをコンパイルしてアップロードする
Arduino CLIをインストールする
M5Stack インデックスを Arduino コアに追加
M5Stack ライブラリの追加
# m5stack ボードをインストールしますarduino-cli core install m5stack:esp32 --Additional-urls https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/arduino/package_m5stack_index.json --log-level warn --verbose# インストール必要なライブラリarduino-cli lib install M5Cardputer --log-level warn --verbose arduino-cli lib install IRRemoteESP8266 --log-level warn --verbose#sketcharduino-cli をコンパイル --fqbn m5stack:esp32:m5stack_cardputer -e --build-property build.partitions=huge_app --build-property Upload.maximum_size= 3145728 ./m5stick-nemo.ino
これにより、パーティション スケッチに基づいて複数のバイナリが作成されますesptool
使用して単一のバイナリをマージできます。
esptool をインストールします - pip install -U esptool
esptool.py --chip esp32s3 merge_bin --output Final.bin 0x0000 m5stick-nemo.ino.bootloader.bin 0x8000 m5stick-nemo.ino.partitions.bin 0x10000 m5stick-nemo.ino.bin
esptool
使用して、マージされたバイナリ ファームウェアをフラッシュできるようになりました
esptool.exe write_flash -z 0 Final.bin
Dockerをインストールする
./scripts/docker-build.sh
を実行します。
./scripts/flash.sh --device=
を実行します。
# これにより、構成されたプラットフォームに基づいて必要なすべてのライブラリを含むイメージが構築され、バイナリがコンパイル、出力、マージされます# デフォルトでは、en-us ロケールの M5Cardputer 用にコンパイルされます (./config/.env.M5Cardputer./)スクリプト/docker-build.sh # 別のビルド構成を選択したい場合は、それをパラメーターとして渡すことができます。さまざまな構成については、./configs/ を参照してください。/scripts/docker-build.sh ./config/.env.M5Cardputer# バイナリ ファイルは ./buildls に出力されます。/build# これにより、ビルド ステップからのビルド出力がフラッシュされます。前のステップのコンテナー イメージを再利用します。# デフォルトでは、これは en-us ロケールの M5Cardputer 用にコンパイルされます。 ./config/.env.M5Cardputer./scripts/flash.sh --device=/dev/ttyusb0 # 別のビルド構成を渡した場合は、必ずそれをフラッシュ スクリプトに渡してください。/scipts/flash.sh --device=/dev/ttyusb0 --build-config=./config/.env.M5Cardputer
いくつかの機能はデバッグ情報をシリアル モニターに出力します。この情報を収集するには、Arduino IDE または M5Burner のシリアル モニター機能を使用します。役に立つヒントがあるかもしれません。バグレポートを提出する場合、シリアルモニター出力を含めると役立つことがよくあります。
EEPROMをリセットします。 EEPROM 設定がサポートされているモデルでは、設定メニューの「設定のクリア」を使用するか、電源を入れるときに「次へ」ボタン (StickC モデルの場合はサイド キー、Cardputer の場合は Tab または ↓) を押したままにします。
TV-B-Gone の IR LED はスマートフォンのカメラを通して観察でき、淡い紫色の光線を発します。常にオンになっているように見える場合、または TV-B-Gone の操作中にまったく点滅しない場合は、何かが間違っています。バグを報告してください。 Bluetooth スパムまたはランダム Wi-Fi スパムを使用した後に TVBG が動作しないという既知の問題があります。
Wi-Fi スパムが機能していないと思われる場合は、いくつかの異なるデバイスから Wi-Fi リストを表示してみてください。 Linux ネットワーク管理者は、スマートフォンでは認識できないネットワークを認識できる場合があります。 Wi-Fi スパム問題を報告する場合は、このテストの結果を含めてください。
Apple は 2023 年の夏以降、多くの Bluetooth 機能にパッチを当てています。AppleJuice をテストする場合は、AppleTV デバイス タイプのいくつかを試してください。Apple がそのプラットフォームの弱い Bluetooth 信号をフィルタリングしていないため、これらのデバイス タイプはより信頼性が高くなる傾向があります。
バグは GitHub Issues 経由で報告してください。これらは、ソーシャル メディアの投稿や M5Burner エントリなどのコメントよりも追跡しやすいです。何かが機能しない場合は、次の情報を含めてください。
ファームウェアのバージョン
インストール方法 (M5Burner、自分でコンパイルした、esptool.py)
ハードウェア
具体的にどの機能とオプションが動作しないのか
機能していないと判断した方法と、どのようなテストを行ったか。該当する場合は、テストに使用したデバイス モデルとオペレーティング システム、およびシリアル モニターからのエラーや関連出力を含めます。
特定したバグを修正する方法を見つけた場合は、PR を歓迎します。
貢献は大歓迎です。
プロジェクトの GitHub の問題を参照してください。そこには機能の提案やバグが報告されており、それらに対処する PR をいただければ幸いです。
Pull Request を送信する場合は、develop ブランチをターゲットにしてください。これを行う最も簡単な方法は、すべてのブランチをフォークするか、単に独自のフォークに「開発」ブランチを作成し、GitHub を使用して開発ブランチを同期することです。
特定のハードウェア (LED や RTC など) がコード内でどのように定義およびゲートされているかに注意し、それらのパターンに従うようにしてください。また、内蔵ディスプレイに出力する場合は、FGCOLOR、BGCOLOR、TEXT_SIZE*、および DISP エイリアスの定義を使用します。
プル リクエストの一部として、Github をコントリビューター配列に自由に追加してください。
助けてほしいこと:
NEMO ポータル HTML だけでなく、メニューのローカリゼーション/翻訳が改善されました。
おそらく新しい .h ファイルが必要です
設定で構成可能であり、eeprom バイトを使用して設定を保存します
大量の SRAM を使用するのではなく、ローカリゼーション文字列がフラッシュ ストレージにのみ保存され、フラッシュ ストレージから直接参照されるように、実装でconst
を無駄に使用します。
赤外線
TV-B-Gone の新しい「領域」には、RGB LED ストリップ、エアコン、ファン、サウンド バーなどをオン/オフできる追加の IR コードが満載されています。
NEMO のコードベース内からフリッパー ゼロ IR コードを変換または使用する方法
AXP192 PMU を搭載していない Cardputer および StickC-Plus2 モデルのバッテリー レベルを読み取り、表示する方法を考え出します。 Cardputer ファクトリーのデモにあるバッテリー コードから始めるとよいでしょう。
TARGETED 特定のアクセス ポイントのみに対する認証解除。認証解除スパム PR は拒否されます。
私がおそらくマージしないもの:
バルク Wi-Fi 認証解除スパム
健康やフィットネスのトラッカー、スマート ウォッチなどを妨害する可能性のある Bluetooth スパム。