プログラミング
M-VAVE FM-1 Pocket Synthesizerファームウェアのリバースエンジニアリング
Reverse Engineering of the M-VAVE FM-1 Pocket Synthesizer Firmware (github.com)
要約
このGitHubリポジトリは、M-Vave FM-1シンセサイザーのファームウェアのリバースエンジニアリングとアップデートプロトコルの研究結果を公開しています。分析により、シンセサイザーがJieLi AC791N/WL82チップセットとpi32v2 CPUを使用していることが特定され、そのFMエンジンはDexed/msfaから派生したものであることが示唆されています。リポジトリには、アーキテクチャ概要、OTAプロトコル、デバッグインターフェース、および関連ツールやスクリプトが含まれていますが、安全なリカバリパスはまだ確立されていません。
全文翻訳
FM-1ファームウェアのリバースエンジニアリング
M-Vave FM-1シンセサイザーのリバースエンジニアリングとアップデートプロトコルの研究。
パッケージ、SPL、およびSDKの出所から、ターゲットはJieLi AC791N/WL82であり、pi32v2 CPU、0x02000000にあるXIPフラッシュ、およびDexed/msfaから派生した6オペレーターFMエンジンを搭載していることが特定されました。
組み込まれたJL-BR22文字列は、信頼できるSoC識別ではなく、継承されたライブラリの命名規則です。
このメインブランチには、意図的に交換用ファームウェアやカスタムイメージビルダーは含まれていません。
以前の実験的実装は、with-custom-firmwareブランチに保存されています。
ここから開始してください。
アーキテクチャ概要:マッピングされたハードウェア、ブートチェーン、メモリレイアウト、および主要サブシステム。
OTAプロトコル:キャプチャされたUSB-MIDIフレーミング、セッションフロー、ローダーの動作、および未解決のゲート。
安全性の評価と未解決の質問:更新パスをリカバリ可能と見なす前に必要な証拠。
デバッグサーフェス監査:コンソール、ファクトリーモード、テストコマンド、およびリカバリエントリーポイントの静的検索。
デバイスOTAローダーとフィニッシュゲートトレース:抽出、制御フロー、フラッシュゲート、およびターミナルハンドシェイク。
Windowsアップデーター分析:逆コンパイルされたM-UPGRADEステートマシンとID解析。
Linuxプロトコルクライアント、ツールノート、およびオフラインテスト。
リポジトリレイアウト分析/:V13逆アセンブリ、バイト同一再アセンブリ、関数データベース、分類、OTAローダー分析、およびホストアップデーターの逆コンパイル。
docs/:ファームウェア特性評価、アーキテクチャ、サブシステム分解、関数インデックス、およびOTAの発見。
scripts/:逆アセンブリ、抽出、インデックス作成、および分類パイプライン。
tools/:USB-MIDIアップデートプロトコルクライアントとオフラインテスト。
ghidra/scripts/:チェックインされたpi32v2ヘッドレス分析スクリプト。
firmware-images/:不変のV13およびV14パッケージと展開された入力。
reference/:無視されたSDK、Ghidraインストール、およびscripts/setup_reference.shによって生成されたアップストリームソースミラー。
3rd-party/jl-misctoolsおよび3rd-party/jl-uboot-tool:ファームウェア解析およびブートツール参照に使用されるピン留めされたサブモジュール。
リポジトリは、独立して開発された2つのV13分析パイプラインを保持しています。
analysis/README.mdはそれらの役割を説明しています。
analysis/db.jsonおよびdocs/function-index.mdは現在の分類出力です。
analysis/function_db.jsonおよびanalysis/master_index.jsonは独立した相互検証と出所を提供します。
再現
リポジトリのルートからコマンドを実行します。
# 低レベル逆アセンブリと独立関数マップ
scripts/run_ghidra.sh
python3 scripts/build_funcdb.py
python3 scripts/resolve_strings.py
python3 scripts/match_libs.py
python3 scripts/build_master_index.py
python3 scripts/build_slices.py
# OTAローダー抽出、ベンダーマップ、および検証Ghidraスイープ
scripts/analyze_ota_loader.sh
scripts/run_ghidra_loader.sh
# 現在の強化された分類データベースとドキュメント
python3 scripts/build_db.py
scripts/disasm_toolchain_libs.sh
python3 scripts/match_libs.py
python3 scripts/mech_tag.py
python3 scripts/export_shards.py
python3 scripts/aggregate.py
# オフラインOTAプロトコルチェック
python3 -m unittest discover -s tools/tests -v
安全性ステータス
アップデートプロトコルは、実証されたリカバリメカニズムではありません。
現在の作業では、シングルバンクレイアウトに対するROMリカバリ、ロールバック、または安全な中断書き込み動作を確立していません。
analysis/device/debug-surfaces.mdのコンソール/ファクトリーモード監査では、代替のリカバリエントリーは見つかりませんでした。
アップデートまたはフラッシュユーティリティを使用する前に、TODO_aug2.mdをお読みください。
外部参照
USB_KEY | jielie:D+/D-の信号を使用してJieLi USBブートを呼び出すことに関するリバースエンジニアリングされたノート。これには、キー波形、確認、タイミング、およびUSBバスの注意点が含まれます。
JL SoCフォーラムスレッド:JieLi SoC、SDK、ツールチェーン、プログラマー、ブートアクティベーター、およびUSB/ISP/UARTキー実験に関する、長期間にわたるロシアのコミュニティディスカッション。
レポートはコミュニティの観察であり、議論されているチップファミリーにのみ適用される場合があります。
SMK-37 Proコミュニティノート:共有パッケージ、アップデート、およびハードウェアの慣習を特定するのに役立つ可能性のある、関連するM-Vave/JieLiキーボードに関する観察。
kagaimiq/jl-misctools (3rd-party/jl-misctools、../jl-misctoolsでもチェックアウト済み):JieLiファームウェアコンテナ、キーファイル、UIリソース、および古い形式用のユーティリティ。
kagaimiq/jl-uboot-tool (3rd-party/jl-uboot-tool):UBOOTデバイスの検出、RAMへのコードのロード、およびフラッシュの読み取り、書き込み、または消去用のPythonツール。
そのサポートテーブルにはWL82/AC791Nが不明とリストされているため、確立されたFM-1フラッシャーではありません。
Jieli-Tech/fw-AC79_AIoT_SDK (../fw-AC79_AIoT_SDK):AC791N/WL82のペリフェラルおよびMaskROM APIヘッダー、ブート/アップデート設定、ライブラリ、ビルドツール、およびストックファームウェアの動作を特定するために使用されるアプリケーション例を含む公式SDK。