Flutterのリバースエンジニアリングの完全ガイド

Flutterのリバースエンジニアリングは、アプリの構造や動作を解析し、保守や移行に必要な仕様を把握する手法です。

どの目的でも、FlutterとDartの特性を理解せずに着手すると、多くの工数をかけても期待した成果が得られないおそれがあります。各テーマの詳細は、次の関連記事で確認できます。

Flutterのリバースエンジニアリングの概要

Flutterアプリのバイナリから把握できる4種類の情報を示す図
通信の情報から画面の動きまで、解析対象は複数の層に広がります。

Flutterのリバースエンジニアリングは、Dart言語とFlutterフレームワークで構築されたアプリのバイナリを解析し、内部ロジック、API仕様、データ構造などを復元する技術的なプロセスです。

完成品であるバイナリから元の設計や仕様を逆方向にたどって再構築するため、「リバース(逆方向)エンジニアリング」と呼ばれます。

Dart AOTバイナリの特性:他言語との根本的な違い

FlutterはDart言語を採用し、AOT(Ahead-of-Time)コンパイルによって各プラットフォーム向けのネイティブバイナリを生成します。AndroidではELF形式のlibapp.so、iOSではMach-O形式に埋め込まれた形でDartバイナリが出力され、その内部には「Dartスナップショット」という独自形式が含まれています。

この形式は標準的な逆コンパイルツールでは解析できず、IDA ProやGhidraのような業界標準ツールだけでは実用的な情報を引き出すことが困難です。そのため、Dartの解析に対応したblutterのような専用ツールが必要になります。

Kotlin(Android)やSwift(iOS)と比べたFlutterの最大の特徴は、iOSとAndroidのバイナリが同じDartコードベースから生成される点です。そのため、片方のバイナリを解析するだけで両OSのビジネスロジックを把握でき、セキュリティ診断では工数と費用の面で効率的です。仕様書復元でも、解析対象が実質的に半減します。

解析で分かること・分からないこと

解析で主に取得できるのは、APIエンドポイントのURL、リクエストとレスポンスのデータ構造、画面遷移のロジックです。このほか、認証フローの仕組みやデータ保存の方式なども把握できます。

blutterでDartのクラス構造、メソッドシグネチャ、文字列定数を抽出し、MITMProxyでAPI通信を観察すれば、これらの情報を体系的に集められます。

一方で、「なぜその業務ルールになっているか」というWhy(業務上の理由・経緯)は、バイナリには記録されていません。そのため、業務部門へのヒアリングなしには復元できません。この限界を理解してプロジェクトを設計することが、期待値のずれを防ぐうえで欠かせません。

Flutterで実施する目的とメリット

セキュリティ診断で確認する3つの情報を並べた図
認証情報の扱いと通信保護が、診断の確認対象になります。

Flutterのリバースエンジニアリングが活用される主な場面は、目的によって分かれます。目的ごとに、使用するツール、解析の深さ、必要な体制が異なります。

セキュリティ診断・脆弱性評価

Flutter製アプリが扱う個人情報、決済データ、認証情報の安全性を評価することは、サービス提供者にとって欠かせないセキュリティ対策です。

具体的には、バイナリ内に秘密鍵やAPIキーが平文で埋め込まれていないか、証明書ピンニングが適切に実装されているかを評価します。さらに、認証トークンの保管方法や、ルート化・脱獄端末でのアプリ動作制限の有無も確認します。

Flutter製アプリはDart AOTバイナリという難解な形式を持ちます。一方で、API通信がhttpパッケージやDioに集中するため、通信解析は比較的体系的に行えます。

仕様書復元・モダナイゼーション

開発会社との契約終了後にソースコードが失われたり、設計書が不完全な状態で引き渡されたりしたFlutterアプリがあります。そうしたアプリを、バイナリから仕様書を再構築してモダナイゼーション(システム刷新)に活用するケースが増えています。

Flutterアプリのモダナイゼーションでは、リバースエンジニアリングで得た仕様情報をもとに、現行機能が今も必要かを判断しながら、新システムの要件定義を進めます。

不要な機能(過去の遺物)まで移植すると、コストを無駄にしてしまいます。そのため、現行機能の業務上の必要性を整理する作業を、リバースエンジニアリングと並行して進めることが大切です。

ポイント

目的がセキュリティ診断か、仕様書復元か、互換性の確保かで、使うツールと解析の深さ、必要な体制が変わります。迷ったら、まず目的を一言で言い切り、そこからツールと解析の深さを決めます。

Flutterのリバースエンジニアリングの進め方

Flutter解析の静的解析から設計の再構成までを4段で示す図
静的・動的の両面で得た情報を、設計レベルへまとめます。

Flutterのリバースエンジニアリングは、工程を順に体系的に進めることで高品質な成果を得られます。各工程にはFlutter・Dart特有の考慮事項があるため、汎用的なモバイルアプリ解析の手順をそのまま当てはめることは難しいです。

静的解析と動的解析の組み合わせ

バイナリの構造は静的解析で把握し、実行時の通信や動作は動的解析で確かめます。作業は次の順で進めます。

  1. 静的解析:APKからlibapp.so(Dart AOTバイナリ)を取り出し、blutterでクラス構造、メソッドシグネチャ、文字列定数を抽出します。
  2. 動的解析:fridaを使ったDynamic Instrumentationが中心です。MITMProxyと組み合わせてAPI通信を傍受します。
  3. フック:Dioパッケージを使うアプリではDioのinterceptorレベル、httpパッケージを使うアプリではHttpClientレベルで行います。
  4. 設計の再構成:静的解析と動的解析から得た情報を統合して、Design Recovery(実装レベル→設計レベル→仕様レベルへの段階的抽象化)を行います。

GhidraやIDA Proはlibapp.soの全体構造の把握に使いますが、Dartのアプリロジックはblutterなしでは解読できません。難読化(–obfuscate)が適用されていると、シンボル名がランダム化されるため、解析難度が大幅に上がります。

証明書ピンニングが実装されている場合は、fridaでのピンニング回避が先決です。

成果物の品質基準と3段階の粒度

解析成果物は、目的に応じた粒度で設計することが大切です。フローチャート(処理フロー図)はシステムの概要把握に適しており、30〜80万円が目安です。

業務仕様書(画面・機能・データ入出力・業務ルール)は、新システム開発の要件定義に直接活用でき、80〜200万円が目安です。詳細設計書(DB設計・API仕様書・シーケンス図)は最も精度が高く、200〜500万円以上になります。

成果物の品質基準として「若手エンジニアが読んで保守できる水準」を明示することは、納品後のトラブルを防ぐうえで欠かせない指標です。工程の詳細は、関連記事「Flutterのリバースエンジニアリングの進め方・手順・手法を解説」で紹介しています。

ポイント

成果物の粒度は、新システムの要件定義に直接使えるかどうかで判断します。解析の途中で方向を見失ったときも、この基準に戻ると解析の方向を整理できます。

開発会社の選び方

Flutterのリバースエンジニアリングを外注する際のパートナー選びは、成果の品質を大きく左右します。

「モバイルアプリ開発の実績あり」と書かれているだけでは判断しきれないため、Flutter/Dart特有の解析能力があるかを具体的に確認する必要があります。

実績と技術力の確認ポイント

パートナー選定で最初に見たいのは、Flutter/Dart AOTバイナリ解析の具体的な実績です。たとえば、「blutterを使ったDart AOTスナップショット解析の経験があるか」「fridaでDart関数をフックした実績があるか」を聞きます。加えて、「証明書ピンニングへの対応方法を説明できるか」も確かめ、具体的に答えられるベンダーを優先してください。

ツールスタック(blutter・frida・Ghidra・IDA Pro等)の使い分けを明確に説明できるかどうかも、技術力を測る指標になります。セキュリティ専門企業とSIerでは、解析ツールの習熟度、レポートの形式、プロジェクトの進め方が大きく異なります。

目的別に見ると、セキュリティ診断やペネトレーションテストが目的なら、ホワイトハッカーが在籍するセキュリティ専門企業(例:GMOサイバーセキュリティ byイエラエ・MBSD・LAC等)を選びます。仕様書復元からモダナイゼーションへつなげるのが目的なら、解析から開発まで一気通貫で対応できるSIerを選ぶとよいでしょう。

プロジェクト管理体制とサポートの評価

プロジェクト管理体制では、成果物の品質基準が明文化されているかを確かめます。クリーンルーム手法が必要な案件では、解析チームと開発チームの分離や法務担当者の関与が、プロセスとして確立されているかを必ずチェックしてください。

契約では、スコープ変更や追加費用が発生したときのプロセスが明確になっているかも、判断基準の一つです。さらに、解析途中の方向性の確認、中間報告の頻度、担当者のレスポンスの速さなど、コミュニケーションの質もパートナー選定の要素として評価してください。

会社選びは、関連記事「Flutterのリバースエンジニアリングでおすすめの開発会社6選と選び方」で紹介しています。

ポイント

会社を比べるときは、まず目的に合う種類かを見ます。そのうえで、Flutter/Dart特有の解析実績と、スコープ変更時の進め方を具体的に聞けるかで絞り込みます。

費用相場

Flutterのリバースエンジニアリング費用は、目的、成果物の粒度、アプリの複雑さによって大きく変わります。費用の構造を事前に理解しておくと、見積もりを受け取ったときに判断しやすくなります。

規模別の費用目安

仕様書復元が目的の場合、小規模なFlutterアプリ(10画面以下・基本機能のみ)では、フローチャートレベルで30〜80万円、業務仕様書レベルで60〜150万円が目安です。中規模アプリ(10〜30画面・複数の外部API連携)では、業務仕様書レベルで80〜250万円、詳細設計書レベルで200〜500万円になります。

セキュリティ診断が目的の場合は、自動ツール診断のみで10〜30万円、手動診断(OWASP Mobile Top 10準拠)で50〜200万円が相場です。さらに、Dart AOTバイナリの解析難度から、汎用的なモバイルアプリ解析より1.5〜2倍程度の費用増加を見込む必要があります。

費用を左右する主な要因

費用を大きく左右する要因として、まず難読化の有無があります。–obfuscateオプションを使うと、+30〜50%の増額になります。証明書ピンニングを実装すると、+10〜30万円が加わります。

状態管理の複雑さ(Riverpod/Bloc等の複雑な実装)や、外部APIの連携数、iOS/Android両OS対応の要否も、費用を左右します。Flutterは、両OS対応でも解析工数の増加が10〜20%程度にとどまります。そのため、ネイティブ開発で両OSに対応する場合と比べて、費用効率が高いのが特徴です。

特急対応が必要な場合は、通常費用に対して20〜60%の割増料金が発生します。費用の考え方は、関連記事「Flutterのリバースエンジニアリングの費用相場・見積もりの考え方」で紹介しています。

ポイント

費用は、目的、成果物の粒度、アプリの複雑さで大きく変わります。見積もりを比べるときは、難読化の有無とピンニングの実装が含まれているかを確かめます。

発注・外注方法

Flutterのリバースエンジニアリングを外注する際、準備が不足したまま発注すると、手戻りや費用超過につながります。そのため、発注前の準備から契約、プロジェクトの推進まで、体系的に進めることが大切です。

発注先の種類と特徴

Flutterのリバースエンジニアリングの外注先は、大きく2種類に分けられます。セキュリティ専門企業は、ペネトレーションテストや脆弱性診断を主力とし、Flutter/Dartバイナリの深層解析能力とセキュリティレポートの品質に強みがあります。

一方、業務システムSIerは、仕様書復元やモダナイゼーションへの連携を主力とし、業務部門との協業や、解析後の新システム開発までを一貫して支える力があります。そのため、目的がセキュリティ診断ならセキュリティ専門企業を、仕様復元やシステム刷新ならSIerを選ぶのが原則です。

発注側は、セキュリティ診断の結果を踏まえてシステムを刷新する場合は、両方の能力を持つか、あるいは連携できる体制があるベンダーを選ぶのが理想的です。

発注前に準備すべきドキュメント

発注前の準備では、まず解析対象のAPK/IPAとFlutterのバージョン情報を揃えます。そのうえで、難読化の有無を確認できる資料と、設計書の断片や仕様メモなどの既存ドキュメントを集めることが第一歩です。

RFP(提案依頼書)には、バイナリサイズ、難読化の有無、使用ライブラリといったFlutter固有の情報を明記します。テスト環境の提供可否も、同じRFPに書いておきます。さらに、blutterの使用経験や証明書ピンニングへの対応方法など、ベンダーへの技術的な確認事項を盛り込みます。

NDA締結は必須で、バイナリを提供する前に完了させることが、情報管理上の基本ルールです。クリーンルーム手法が必要な場合は、契約書にその旨の条項を明記してください。外注の手順は、関連記事「Flutterのリバースエンジニアリングを外注する方法・発注の進め方」で紹介しています。

法的リスクは、実施目的と手続きによって大きく変わります。そのため、適法に実施するための知識を事前に身につけておくことが欠かせません。

平成30年の著作権法改正(第30条の4)により、著作物の表現を「享受」する目的でない情報解析、セキュリティ調査、仕様書復元などのリバースエンジニアリングは、原則として適法です。この規定を安全に使うには、非享受目的であったことを後から立証できる記録を残しておくことが重要です。

解析専用のPCを用意し、解析の目的と過程、使用ツール、得られた情報をレポートに残しておけば、後から「機能享受目的ではなかった」と立証できます。EULAにリバースエンジニアリング禁止条項がある場合でも、互換性確保に欠かせない解析は、独占禁止法の観点から禁止条項が無効になりうるケースがあります。

また、自社が開発したFlutterアプリ(著作権者として解析の権限がある)の仕様書復元の場合は、EULAの制約を受けずに解析できます。ただし、個々の案件での適法性判断は弁護士への確認が必須であり、自己判断だけで進めることは避けてください。

クリーンルーム手法は、解析チーム(Dirty Room)と開発チーム(Clean Room)を完全に分離する手法です。開発チームは、解析チームが作成した「純粋な機能仕様書のみ」を参照してシステムを構築します。この手法は、1980年代のフェニックス・テクノロジーズvs IBM BIOS事件で確立され、現在も著作権侵害リスクを最小化する最も確実な方法として広く採用されています。

解析チームと開発チームの間には、法務担当者(または仲介担当者)を配置します。そのうえで、仕様書に著作権保護対象の「表現」が混入していないかを精査するプロセスが欠かせません。

Flutterアプリの仕様を復元したあとに新システムを開発する場合は、クリーンルーム手法を実施できるかどうかを、ベンダー選定の必須要件として確認してください。

ポイント

非享受目的を記録で示せるかを基準にします。自社か第三者かで扱いが変わるため、個々の案件は弁護士に確認してから進めます。

Flutter特化の解析ツール紹介

Flutterのリバースエンジニアリングでは、汎用ツールとFlutter/Dart特化ツールを組み合わせて使います。各ツールの特性と使い分けを把握しておくことが、効果的な解析環境を整える前提になります。

blutter:Dart AOT解析の中核ツール

blutterは、Dart AOTバイナリを解析するオープンソースツールで、2023年以降に急速に注目されています。GhidraのプラグインとしてDartのクラス構造、メソッド名、文字列定数を復元し、GhidraやIDA Proでは解読できないDartスナップショット部分を補います。

ただし、Flutterのバージョンごとにバイナリ構造が変わるため、blutterの対応範囲を事前に確かめておく必要があります。最新版への対応が遅れることもあり、実務上の課題として認識しておくべき点です。fridaはアプリの実行時にDartの関数をフックし、引数・返り値・内部状態をリアルタイムで取得する強力なツールです。

MITMProxyはAPI通信傍受の標準ツールで、fridaとセットで使うのが一般的です。これと組み合わせれば、API通信を完全に傍受でき、証明書ピンニングを実装したアプリではfridaで無効化するスクリプトを記述・実行します。Ghidra(NSA開発・オープンソース)はバイナリ全体の把握やチーム協調解析に、IDA Pro(業界標準の商用ツール)は高精度の逆コンパイルに使います。

ツール選定の判断基準と組み合わせ

ツール選定では、まずblutter+Ghidraの組み合わせで静的解析を行い、fridaとMITMProxyで動的解析を行う二段構えが、実務の標準になっています。

GhidraはAPIのスクリプティングやチーム協調作業に優れ、無料のOSSなのでコスト面でも有利です。一方、IDA Proは逆コンパイルの品質が高く、ライブラリ認識にも優れていますが、マルチアーキテクチャのライセンスは最高価格帯(数百万円/ライセンス)になります。

解析対象アプリの規模、解析チームの人数、予算に応じてツールを選ぶことが大切です。一般的なセキュリティ診断レベルであれば、Ghidra+blutter+frida+MITMProxyの無料ツール中心の構成で対応できます。

よくある質問(FAQ)

Flutterのリバースエンジニアリングについて、よく寄せられる質問とその回答をまとめました。

Q. FlutterのリバースエンジニアリングはiOSやAndroidネイティブより難しいですか?

A. 一般的に難しいと言えます。Dart AOTスナップショットという独自のバイナリ形式は、標準的な逆コンパイルツールでは解析できず、blutterのような専用ツールが必要です。

ただし、iOSとAndroidの両OSのロジックは同一のコードベースから生成されるため、片方を解析すれば両方のロジックを把握できます。これは、Flutter特有の効率性といえる点です。

難読化(–obfuscate)が適用されていない場合は、blutterによってクラス名・メソッド名を復元でき、実務的に扱いやすい情報が得られます。

Q. 自社が開発したFlutterアプリのリバースエンジニアリングは問題ありませんか?

A. 自社が著作権を保有しているFlutterアプリであれば、リバースエンジニアリングは自社の権利行使であり、問題ありません。

委託開発会社が著作権を保有している場合は、委託開発契約の条件次第で、権利関係の確認が必要です。

また、第三者が開発したFlutterアプリを解析する場合は、著作権法30条の4(非享受目的)の要件を満たすか、または対象アプリの権利者から許可を取得することが必要です。個々の案件の適法性については、弁護士への相談をお勧めします。

Q. 難読化されたFlutterアプリは解析不可能ですか?

A. 難読化(–obfuscate)が適用されていても、解析が完全に不可能になるわけではありません。クラス名・メソッド名はランダム化されますが、APIエンドポイントのURL文字列・定数値・プログラムの実行フローは、ある程度把握できます。

また、fridaを使った動的解析(実行時のフック)では、難読化に関わらず実際の動作を観察できます。ただし、難読化ありの場合は解析工数が通常の1.3〜1.5倍に増加し、成果物の品質(識別子の意味の復元率)が低下する点を事前に理解しておく必要があります。

まとめ

Flutterのリバースエンジニアリングには、Dart AOTバイナリという独自の特性があるため、他のモバイルプラットフォームとは異なる専門的な進め方が必要です。

解析手法(blutter・frida・MITMProxyの組み合わせ)と、iOSとAndroidの両OSの効率的な解析が、プロジェクトを進めるうえでの鍵になります。さらに、法的リスクの管理(著作権法30条の4・クリーンルーム手法)と、パートナー選定・発注の設計も、プロジェクト成功の核心になります。

自社のFlutterアプリのリバースエンジニアリングを検討している方は、まず目的(セキュリティ診断・仕様書復元・互換性確保)を明確にし、それに合ったアプローチと予算計画を立てることから始めてください。

本記事で解説した内容は、以下の関連記事で詳しく確認できます。

会社紹介

株式会社riplaでは、お客様の事業・ユーザー・業務に最適化したオーダーメイド型システムを、構想策定・要件定義から開発・改善まで一気通貫で支援。事業会社でIT・DXを経験したプロフェッショナルによる高い要件定義力・システム設計力を活かし、事業成果の最大化に伴走します。

また、当社独自の開発テンプレート「Boxシリーズ」による標準機能の高速開発と、AI駆動開発の独自フレームワーク「GoDD」による独自機能のAI実装を組み合わせることで、低コスト・短期間で開発を実現いたします。

もし、システム開発やプロダクト開発に関するご要望がございましたら、お気軽にお問い合わせください。

・サービス概要資料のURLはこちら >>>
・お問合せページのURLはこちら >>>
・お役立ち資料のURLはこちら >>>

執筆者プロフィール
張田谷凌央
張田谷凌央

株式会社ripla 代表取締役CEOとして、システムパッケージ活用、システム開発、データ分析、生成AI活用、SaaS開発、アプリ開発、EC構築など、幅広い領域で企業のDX推進と事業成長を支援している。事業会社でIT・DXを経験したプロフェッショナルが集う株式会社riplaにおいて、お客様の事業・ユーザー・業務に最適化したオーダーメイド型システムを構想策定・要件定義から開発・改善まで一気通貫で支援し、単なるシステム納品にとどまらず、クライアントと同じ目線で事業成果の最大化に向けた伴走支援を行う。早稲田大学卒業後、ラクスル株式会社、LINEヤフー株式会社にて事業開発やDX推進などに従事した後、株式会社riplaを創業。