iOSのリバースエンジニアリングの進め方/やり方/流れや方法/手法/工程/手順

iOSのリバースエンジニアリングは6つの工程で進みます。目的と法的根拠の確認から始まり、解析環境の準備、静的解析、動的解析、設計への抽象化、成果物の作成へと続きます。

AndroidやWebアプリとは技術的な難しさが異なるため、各工程で何を確かめるかを先に決めておくことが大切です。

▼全体ガイドの記事
・iOSのリバースエンジニアリングの完全ガイド

iOSのリバースエンジニアリングとは:他プラットフォームとの違い

iOSの解析障壁としてMach-O形式、FairPlay暗号化、シンボル情報の除去、SwiftUIを4枚のパネルで示した図。
解析前に確認したい技術要素が4つにまとまります。

iOSのリバースエンジニアリングとは、コンパイル済みのiOSアプリ(.ipaファイル)や実行バイナリを解析し、内部構造・通信仕様・業務ロジックを明らかにするプロセスです。

たとえば、セキュリティ診断(自社アプリの脆弱性発見)、仕様書の復元、通信プロトコルの調査などに使われます。

iOS固有のバイナリ形式と暗号化保護の仕組みがあるため、Android向けアプリやWebアプリとは大きく異なるアプローチが必要です。

Mach-OバイナリとAppleのARM64:解析難度が高い理由

iOSアプリの実行ファイルはMach-O(Mach Object)形式を採用しており、AppleシリコンおよびARMベースのデバイス上でARM64命令セットで動作します。

このバイナリはApp Storeからの配布時にAppleのFairPlayで暗号化されているため、解析の前に必ず復号(デクリプト)が必要です。さらに、コンパイル時にシンボル情報のほとんどがStrip(除去)されており、関数名や変数名が失われた状態でバイナリを読み解くことになります。

Androidでは、DEXバイナリにクラス構造が残っているため比較的復元しやすいのです。これに対してiOSのMach-Oは、構造を把握するだけでも高い専門知識が必要です。

Objective-CとSwiftの解析難易度の違い

iOSアプリの主要言語はObjective-CとSwiftの2種類ですが、解析のしやすさは大きく異なります。Objective-Cアプリは、Appleのランタイムメッセージング機構(objc_msgSend)によってメソッドが動的に呼び出されます。このため、クラス名・メソッド名・プロパティ名が文字列としてバイナリ中に残りやすい特性があります。

そのため、class-dumpやMach-O Viewといったツールで、メソッドのリストをほぼ完全に復元できる場合があります。一方、Swift製アプリはコンパイル時に型情報やシンボルが積極的に除去され、特にSwiftUI(宣言的UIフレームワーク)を使ったアプリでは、内部構造の把握が格段に難しくなります。

Swiftのnameマングリング(名前装飾)は一定のパターンを持つため、デマングルツールを使えば関数名を部分的に復元できますが、Objective-Cと比べると復元精度は低下します。このため、解析コストはObjective-Cアプリよりも2〜3倍程度多く見積もるケースが一般的です。

ポイント

iOSは、Mach-Oの構造やシンボル除去のため、他のプラットフォームより解析が難しくなります。対象の言語を最初に見極め、Swift製なら工数を多めに見積もるのが目安です。

iOSのリバースエンジニアリングの6工程:進め方と手順

iOSのリバースエンジニアリングを成功させるには、目的の明確化から成果物の納品まで、6つの工程を順番どおりに進めることが大切です。

序盤の判断ミスや手順の省略は後工程に響くため、6つの工程は前から順に、一つずつ確実に進めます。

  1. 工程1:対象の選定と、目的・法的根拠の明確化
  2. 工程2:iOS向けの解析環境とツールの準備
  3. 工程3:逆コンパイル、逆アセンブル、メソッドリストの復元
  4. 工程4:Frida、lldb、通信傍受による動的解析
  5. 工程5:実装から設計・仕様への抽象化
  6. 工程6:仕様書や新システム設計書の成果物化

工程1:対象選定・目的明確化(法的リスク評価を含む)

最初に、「何を解析するか」と「なぜ解析するか」を明確に定義します。iOSには特有の前提があり、App Storeで配布されているアプリは、Appleの利用規約(EULA)によってリバースエンジニアリングが禁じられています。そのため、正規ルートで第三者アプリを解析することは法的リスクを伴います。

合法的に解析できるのは、サイドロード(TestFlight経由や自社証明書による配布)された自社アプリか、開発中の未公開アプリに限られます。目的がセキュリティ診断(自社アプリの脆弱性発見)であれば、日本の著作権法第30条の4(非享受目的の複製等)を根拠に実施できます。この際、「解析専用端末を用意し、過程を記録・レポート化しておく」ことで、事後的に非享受目的であることを立証できます。

一方、競合他社のApp StoreアプリのAPIエンドポイントを解析する行為は、通信の秘密侵害や不正競争防止法に抵触するおそれがあります。そこで、法務部門との確認を必須とすることを強く推奨します。

工程2:解析環境・ツール準備(iOS特化ツール)

iOSのリバースエンジニアリング環境は、macOS環境を中心に構築します。環境の構築と解析には、次の順でツールを使います。

  1. 実行環境と復号:脱獄済み(Jailbreak済み)のiOSデバイスかシミュレーター環境を用意し、バイナリを復号する
  2. 逆アセンブル:Ghidra(NSA開発のオープンソース逆アセンブラ、無料)またはIDA Pro(業界標準、有償)でMach-Oバイナリを読む
  3. class-dump:Objective-Cのランタイム情報からヘッダファイルを生成し、クラス・メソッドの一覧を復元
  4. Frida:動的インストルメンテーションフレームワーク。アプリの実行中に関数のフッキング(呼び出し前後への処理挿入)ができる
  5. SSL Kill Switch:通常のSSL証明書検証をバイパスして通信内容を平文で取得し、APIエンドポイントの調査に使う

バイナリの復号には、dump(clutch、frida-ipa-dump等)を使います。

解析に使うツールは、脱獄済みのデバイスにCydiaまたはSileosリポジトリ経由でインストールすることで、本格的な解析環境が整います。

工程3:静的解析(逆コンパイル・逆アセンブル・メソッドリスト復元)

静的解析では、アプリを実行させずにバイナリファイルを直接調べます。最初の作業は、Mach-OファイルのSegmentとSection構造(__TEXT, __DATA, __LINKEDITなど)を確認することです。GhidraやIDA ProでMach-Oバイナリを読み込むと、ARM64命令の逆アセンブル結果が表示され、関数の分岐やデータ参照を確認できます。

Objective-Cアプリでは、class-dumpを使って全クラスのヘッダ情報(メソッド名・引数・戻り値の型)を一括で出力できます。そのため、どのクラスがどんな役割を担っているかを短時間で把握できます。

一方、Swift製アプリの場合は、swiftデマングラー(swift demangle コマンド)でマングルされた関数名を人間が読める形式に変換し、モジュール・クラス・メソッドの階層構造を再構築します。また、文字列検索(__TEXT.__cstringセクション)によってAPIのエンドポイントURLや定数値を抽出することも、有効な手法です。

工程4:動的解析(Frida・lldb・通信傍受)

動的解析は、アプリを実際に起動・操作しながら挙動を追跡する手法です。iOSの動的解析で最も強力なツールがFridaです。Fridaを使うと、特定のObjective-Cメソッド(例:loginWithUsername:password:)の呼び出し時に、引数・戻り値を自動でログ出力するスクリプトを注入できます。

これにより、認証フローやセッション管理の実装をランタイムレベルで確認できます。ネットワーク通信の解析には、MITMProxy(Man-in-the-Middle Proxy)とSSL Kill Switchを組み合わせる手法が一般的です。アプリが行うHTTPS通信を復号して平文で確認し、APIのエンドポイント・リクエストパラメータ・レスポンス構造を記録します。

証明書ピンニング(Certificate Pinning)が実装されている場合は、TrustKit Bypassや独自のFridaスクリプトでバイパスする必要があります。また、lldb(Appleのデバッガ)は、ブレークポイントの設定、レジスタ値の確認、メモリダンプに活用されます。

工程5:抽象化(Design Recovery:実装→設計→仕様レベルへ)

静的解析と動的解析で得られた情報を整理し、実装レベルの知識を設計レベル・仕様レベルへと段階的に抽象化します。これをDesign Recoveryと呼びます。具体的には、逆アセンブル結果から制御フローグラフ(どの条件分岐でどのコードが実行されるか)を作り、それを業務フローとして読み替えます。

たとえば、認証・カート処理・決済・通知の各機能モジュールを特定し、それぞれのデータフローとAPIの関係をドキュメント化します。iOSのMVVMやMVC設計パターンが適用されている場合は、ViewController・ViewModel・Model間の依存関係を逆算して、アプリ全体のアーキテクチャ図を作成できます。

この段階では、業務部門の担当者が解析担当者に業務ルールの背景を伝えることが不可欠です。コードは「どのように動くか(How)」を示しますが、「なぜその仕様なのか(Why)」は、開発当時の意思決定を知る業務担当者にしか分かりません。

工程6:成果物化(仕様書・新システム設計への落とし込み)

解析結果は成果物として整理しますが、その粒度は目的によって大きく異なります。「フローチャートのみ(概要把握用)」「業務仕様書(機能要件・非機能要件のレベル)」「詳細設計書(画面遷移・DB設計・API仕様を含む)」の3段階を目安に、ベンダーと合意しておくことが重要です。

粒度が曖昧なまま発注すると、受け取った成果物が「フローチャートだけだった」という認識のズレが起きやすくなります。

iOSのセキュリティ診断が目的であれば、OWASP Mobile Top 10(モバイルアプリの主要脆弱性リスト)に基づく診断レポートを成果物にするのが一般的です。発見した脆弱性は、リスクレベル(Critical/High/Medium/Low)と再現手順・対策方針を記載した報告書にまとめ、開発チームへ引き渡します。

ポイント

各工程の判断ミスは後工程に大きく影響するため、目的と法的根拠を決めてから解析に入ることが目安です。工程を省略せず、成果物の粒度も発注前に決めておくことが欠かせません。

iOS固有の注意点と難読化・暗号化への対処

iOSアプリのリバースエンジニアリングには、他のプラットフォームと比べて特有の障壁があります。これを事前に把握しておくと、プロジェクト計画に必要な工数を正しく見積もれます。

典型的な失敗パターン:Swift製アプリ・FairPlay暗号化・証明書ピンニング

最もよくある失敗は、「Swift製アプリの解析難易度をObjective-Cと同等に見積もる」ことです。特に、SwiftUIを採用したアプリでは、ビュー構造がコンパイル時に大幅に最適化・変換されるため、見た目のUIから内部ロジックを追跡することが困難です。

Swiftのジェネリクスやプロトコルエクステンションが多用されたコードベースでは、逆アセンブル後のコードが非常に難読になり、解析時間が当初見積もりの2〜3倍になるケースも珍しくありません。次に多い失敗は、App StoreからダウンロードしたipaファイルのFairPlay暗号化を解除せずに解析を試みることです。

暗号化されたバイナリは、GhidraやIDA Proで読み込んでも意味のあるコードが表示されません。そのため、デバイス上でメモリダンプを行い、復号済みバイナリを取得してから解析を始める必要があります。また、証明書ピンニングを実装したアプリでは、MITMによる通信傍受が失敗し続けるため、Fridaスクリプトによるバイパスが必要な点を見落とすことも、典型的な失敗です。

難読化・暗号化への対処:自社アプリ保護の観点から

第三者による解析を防ぎたい場合は、アプリ側での難読化・暗号化が有効です。代表的な手法には、クラス名・メソッド名の難読化(Ipa Guard、iXGuardなどのツールを使用)と、制御フローの平坦化(ノードを増やして制御フローグラフを複雑化)があります。さらに、文字列の暗号化では、APIキーや定数をバイナリ中に平文で埋め込まないようにします。

ただし、難読化が目指すのは解析を困難にすることで、解析を不可能にすることではありません。特に動的解析(Frida等によるランタイムフッキング)に対しては、難読化だけでは効果が限定的です。そのため、秘密情報はアプリバイナリに埋め込まず、サーバーサイドで管理するアーキテクチャ設計こそが根本的なセキュリティ対策となります。

ポイント

失敗しやすいのは、Swift製アプリの見積もりの甘さと証明書ピンニングの見落としです。難読化だけに頼らず、秘密情報はサーバー側で管理する設計を基本にすることが目安です。

Dirty Roomの解析チームから仕様書を作成し、法務・仲介担当者の確認を経てClean Roomの開発チームへ渡す流れ図。
仕様書がチーム間の受け渡し境界になります。

iOSのリバースエンジニアリングには、日本の著作権法とAppleの利用規約(EULA)という2つの法的枠組みが関係します。

どちらに違反しても法的な問題になるうえ、ビジネス上のリスクにもつながります。そのため、実施の前に法的根拠を整理しておくことが必要です。

クリーンルーム手法の実務:解析チームと開発チームの分離

著作権法上の「依拠性」(解析対象のコードを参考にして新コードを作成すること)を回避するために、クリーンルーム手法が有効です。この手法では、解析を行う「Dirty Room(解析チーム)」と、そこから得た仕様書だけを受け取って新たな実装を行う「Clean Room(開発チーム)」を完全に分離します。

開発チームは元のソースコードを一切見ずに開発するため、著作権侵害の依拠性が認定されにくくなります。歴史的な成功事例として、1980年代のフェニックス・テクノロジーズによるIBM BIOS互換開発があります。

解析チームが仕様書を作成し、開発チームが元ソースを一切見ずに互換BIOSを完成させたこの事例は、クリーンルーム手法の正当性を示す典型例として今も参照されています。現代のiOSプロジェクトでも、解析チームと開発チームの間に法務・仲介担当者を置き、仕様書が「機能・アルゴリズム」の記述にとどまり「表現(元コードへの依拠)」を含まないかを確認することが重要です。

非享受目的の立証:記録・証拠保全の実務

著作権法第30条の4は、「著作物に表現された思想又は感情の享受を目的としない利用」(非享受目的)を条件に、複製などを認めています。セキュリティ診断、脆弱性調査、仕様書の復元はこれに該当します。ただし、その立証には適切な記録が必要です。

具体的には、解析専用のコンピューターを用意して解析作業に使ったこと、解析の経過・目的・手順をレポートとして記録していることを示します。さらに、解析から得た知識を「機能の享受(つまり同じアプリを楽しむこと)」ではなく「脆弱性発見・仕様復元」に使ったことを示す文書も整備します。

ポイント

正規ルートの第三者アプリを解析する前に、法務部門と確認することが判断の目安です。解析の過程は記録に残し、非享受目的であることを示せるようにしておきます。

外注 vs 内製の判断軸:iOSリバースエンジニアリングの場合

iOSセキュリティ専門家の不在、第三者診断レポートの必要性、習得に時間を要するスキルを外注検討条件として示すチェックリスト。
専門性、監査要件、習得負荷が依頼判断の手掛かりです。

iOSのリバースエンジニアリングを内製で行うか外注するかは、社内のiOS解析スキルの有無、プロジェクトの緊急度、法的リスク管理体制によって判断します。

内製が現実的なのは、社内にiOSセキュリティエンジニアが在籍し、Frida・Ghidra等のツール経験があり、かつ一定の解析時間を確保できる場合に限られます。

外注を選ぶべきケースと費用感

社内にiOSセキュリティ専門家がいない場合は、外注を強く推奨します。Jailbreak環境の構築、FairPlayの復号、Fridaスクリプトの作成は、独学では習得に数ヶ月を要するスキルだからです。また、法的な観点から第三者による診断レポートが必要な場合(コンプライアンス要件、監査対応)も、外注が適切です。

iOS診断の費用相場は、自動ツールによる簡易診断で10〜30万円、手動による本格診断で50〜150万円程度が目安です。なお、iOSとAndroidの両方に対応して実施する場合は作業工数がほぼ倍増するため、50〜250万円の範囲で見積もることになります。

外注先選びのポイント:セキュリティ専門企業 vs 業務SIer

外注先の選定では、目的によって依頼すべき企業の種類が異なります。セキュリティ診断(脆弱性発見)が目的であれば、OWASP準拠の診断手法を持つセキュリティ専門企業が適切です。こうした企業は、脆弱性診断の経験が豊富で、診断レポートの品質も安定しています。

一方、仕様書の復元、業務ロジックの解読、モダナイゼーションへの活用が目的の場合は、iOSアプリ開発の実績を持つ業務SIerやDX支援企業が候補になります。そうした企業に依頼すると、単なる解析を超えて「新しいアプリへの移行計画まで一貫した支援」を受けられます。

クリーンルーム手法を自社プロセスとして確立しているかどうかも、ベンダー選定の重要な判断軸です。

ポイント

内製は、iOSセキュリティエンジニアが在籍し解析時間を確保できる場合に限られます。そうでなければ、外注を前提に費用と工数を組むのが目安です。

まとめ:iOSリバースエンジニアリングを成功させる3つのポイント

iOSのリバースエンジニアリングは、技術面の障壁(Mach-OのARM64形式、FairPlay暗号化、Swiftのシンボル除去)と、法的制約(EULAと著作権法)の両方を理解して進める必要があります。

第一に、「対象アプリの言語(Objective-C vs Swift)」を最初に見極めて、工数を見積もることです。Swiftアプリ、特にSwiftUI採用のものは、Objective-Cの2〜3倍の解析工数が必要と見ておくと安全です。

第二に、解析の前段階で法的根拠を整理し、非享受目的の証拠を記録する体制を整えることです。

第三に、成果物の粒度(フローチャート、業務仕様書、詳細設計書)を発注前に明確に合意しておけば、後工程での認識のズレを防げます。

専門知識が必要なiOSリバースエンジニアリングでは、実績のあるベンダーへの外注も有力な選択肢です。自社の状況に合わせて、適切な方針を選んでください。

会社紹介

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

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

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

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

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

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