付録:モバイル演習用アプリの準備ガイド

Part 5(モバイル)の演習では、MobSFによる静的解析や、必要に応じてFrida / objectionによる動的解析を行う。そのため、解析対象となる検証用アプリ(APK / IPA)を事前に用意する必要がある。

本付録は、読者が入手前に「追加backendが必要か」「どの演習に使えるか」を判断し、書籍が検証した同一成果物を取得できるようにするためのガイドである。

前提(必須)

  • 解析対象は許可された検証用アプリに限定する(第三者のアプリを無断で解析しない)。
  • 本番データ・実在ユーザー情報・実在の認証情報を投入しない(テスト用データに限定する)。
  • 解析はローカル環境または許可された検証環境で実施する。
  • 配布元のライセンス/利用規約において、検証・解析・改変の可否と範囲を確認する(不明な場合は利用しない)。
  • 本付録の候補は意図的に脆弱であり、古いruntimeやdependencyを含む。backendや端末をインターネット、共有LAN、業務ネットワークへ公開しない。

静的解析と動的解析の実行前提

静的解析(MobSF)

静的解析では、APKまたはIPAをMobSFへ投入する。アプリを起動しないため、通常はアプリ側backendを起動する必要がない。Android / iOSの実端末も必須ではない。

動的解析(Frida / objection、通信観察)

動的解析には、アプリを実行できる端末またはemulatorと、adbなどのplatform toolが必要である。Fridaを利用する場合は、root化Android端末、Jailbreak済みiOS端末、またはFrida Gadgetを組み込めるビルド環境など、計装の前提も必要になる。

認証、API通信、server側状態を使う機能は、APK / IPAだけでは完結しない場合がある。次の比較表でbackend欄が「必須」の候補は、成果物を取得する前に、legacy backendを安全に隔離して実行できるかを判断する。backendを用意できない場合でも静的解析はできるが、ログインやAPI通信を含む動的演習は完了できない。

候補別の用途と必要環境

候補(固定版) standalone / backend runtime・toolchainの前提 静的解析 動的解析 初学者向け判断
OWASP MASTG Android Java 1.1 standalone(固定版READMEにbackend要件なし) Android 4.4+、install時はadb。source build時だけAndroid Studio 3.5、Android SDK / NDK(upstreamの検証値) APK単体で可 Android端末 / emulatorで可 第一候補。まずこのAPKでMobSFと端末内観察を行う
OWASP MASTG Android Kotlin 1.0 API連携機能はRuby on Rails backend必須 Android 4.4+、adb。backendのupstream検証値はRuby 2.5.1 / Rails 5.1.4で、現在はlegacy APK単体で可 API演習はbackend必須 advanced。backendなしでは静的解析に限定する
OWASP MASTG iOS JWT 1.0 API連携機能は同じRuby on Rails backend必須 IPAのinstall / 再署名が可能なiOS検証環境。Frida利用時はJailbreak等も必要 IPA単体で可。ただし暗号化・署名状態を確認 backendと計装可能なiOS環境が必須 advanced。iOS環境を準備できる場合だけ選ぶ
InsecureBankv2 2.3.1 login / API通信にはAndroLab backend必須 Android端末 / emulatorとadb。backendはPython 2構文と未固定のlegacy Python dependencyを含む APK単体で可 serverを隔離実行できる場合のみ可 advanced。初学者の最初の対象にはしない

上表のruntime値は、各固定tagの公式README / sourceを2026-07-19に確認した結果である。古いtoolchainを現行hostへ直接導入することは推奨しない。backend演習が必要な場合は、破棄可能なVMまたはcontainer内に閉じ、loopback経由または専用の隔離networkだけで端末と接続する。

対象アプリの選定観点

  • 認証フロー、API通信、端末保存データのどれを観察するかを先に決める。
  • backendを用意しない場合は、端末内test caseまたは静的解析だけで目的を達成できる候補を選ぶ。
  • HTTPS通信を観察する場合は、検証端末へ証明書を安全に導入できることを確認する。
  • 機能が多すぎず、観察ポイントと終了条件を事前に定義できる候補を選ぶ。
  • 強い改ざん検知や解析妨害があり、前提条件なしでは観察が成立しない対象は後回しにする。

固定成果物の入手

本リポジトリはAPK / IPA / backend archiveを同梱またはmirrorしない。画面操作とCLIのどちらでも、次の同一release tagと同一filenameを選ぶ。

SHA-256は、GitHub release assetを2026-07-19に取得して本書側で計算した値である。publisher署名の代替ではないが、書籍が検証したbyte列との一致確認に使用できる。GitHub APIにpublisher提供digestがないため、HTTPSの固定release pageから取得した後に必ず照合する。

候補 固定release / commit 想定filename(size) 検証済みSHA-256
MASTG Android Java release 1.1 / cad113d64d49fa1db060bd638150be387293b140 MSTG-Android-Java.apk(11,570,963 bytes) fce864e59f05eb64e3d668783b757d66d4fe5022c8811a32af0b33e7d2f3cde5
MASTG Android Kotlin release 1.0 / 5553562719ee33a606a0fc5c49f49fdb8c351c51 MSTG-Android-Kotlin.apk(2,914,676 bytes) 86c059775aa09e4794defd40f81e69751a81019b1b1f285b30b8f7c5bb5e8b68
MASTG iOS JWT release 1.0 / 5553562719ee33a606a0fc5c49f49fdb8c351c51 MSTG-JWT.ipa(5,853,214 bytes) d25df71640dc4f5af3ae48c58f7cad1c7f6ba53a28334b5407f9a0a11291934c
InsecureBankv2 release 2.3.1 / 7f1ec328d8599b02e37be5be0958d67ac62137de InsecureBankv2.apk(3,462,429 bytes) b18af2a0e44d7634bbcdf93664d9c78a2695e050393fcfbb5e8b91f902d194a4
InsecureBankv2 backend release 2.3.1 / 7f1ec328d8599b02e37be5be0958d67ac62137de AndroLabServer.zip(8,864 bytes) 655cf6de8d664b49d64c2836ed370e6cf4559405e875620a4803ad69fa24d864

初学者向け:MASTG Android Java 1.1

画面ではrelease 1.1を開き、MSTG-Android-Java.apkを選ぶ。CLIでも同じtagとfilenameを指定する。

mkdir -p mobile-lab/mastg-1.1
gh release download 1.1 \
  --repo OWASP/MASTG-Hacking-Playground \
  --pattern 'MSTG-Android-Java.apk' \
  --dir mobile-lab/mastg-1.1
printf '%s  %s\n' \
  'fce864e59f05eb64e3d668783b757d66d4fe5022c8811a32af0b33e7d2f3cde5' \
  'mobile-lab/mastg-1.1/MSTG-Android-Java.apk' | sha256sum -c -

MobSFの静的解析にはこのAPKだけを使用できる。動的解析では、許可されたAndroid端末またはemulatorへadb installで導入する。固定版READMEはJava appにbackend要件を示していないため、最初の演習ではこの経路を推奨する。これはKotlin / iOSにだけbackend要件を明記した公式説明に基づく判断であり、すべてのtest caseがnetwork非依存だという意味ではない。

Advanced:MASTG Kotlin / iOS 1.0

画面ではrelease 1.0を開き、AndroidはMSTG-Android-Kotlin.apk、iOSはMSTG-JWT.ipaを選ぶ。CLIでも同じtagと2 filenameを指定する。

mkdir -p mobile-lab/mastg-1.0
gh release download 1.0 \
  --repo OWASP/MASTG-Hacking-Playground \
  --pattern 'MSTG-Android-Kotlin.apk' \
  --pattern 'MSTG-JWT.ipa' \
  --dir mobile-lab/mastg-1.0
printf '%s  %s\n' \
  '86c059775aa09e4794defd40f81e69751a81019b1b1f285b30b8f7c5bb5e8b68' \
  'mobile-lab/mastg-1.0/MSTG-Android-Kotlin.apk' | sha256sum -c -
printf '%s  %s\n' \
  'd25df71640dc4f5af3ae48c58f7cad1c7f6ba53a28334b5407f9a0a11291934c' \
  'mobile-lab/mastg-1.0/MSTG-JWT.ipa' | sha256sum -c -

静的解析は各成果物だけで行える。API通信を使う動的解析には、固定commit 5553562719ee33a606a0fc5c49f49fdb8c351c51 のServerside/rails-api-originalが必要である。upstreamが記録するRuby 2.5.1 / Rails 5.1.4はlegacyであるため、互換環境を隔離して用意できない場合は動的演習を中止する。

Advanced:InsecureBankv2 2.3.1

画面ではrelease 2.3.1を開き、InsecureBankv2.apkとAndroLabServer.zipを選ぶ。CLIでも同じtagと2 filenameを指定する。

mkdir -p mobile-lab/insecurebank-2.3.1
gh release download 2.3.1 \
  --repo dineshshetty/Android-InsecureBankv2 \
  --pattern 'InsecureBankv2.apk' \
  --pattern 'AndroLabServer.zip' \
  --dir mobile-lab/insecurebank-2.3.1
printf '%s  %s\n' \
  'b18af2a0e44d7634bbcdf93664d9c78a2695e050393fcfbb5e8b91f902d194a4' \
  'mobile-lab/insecurebank-2.3.1/InsecureBankv2.apk' | sha256sum -c -
printf '%s  %s\n' \
  '655cf6de8d664b49d64c2836ed370e6cf4559405e875620a4803ad69fa24d864' \
  'mobile-lab/insecurebank-2.3.1/AndroLabServer.zip' | sha256sum -c -

APKだけでMobSFの静的解析はできる。login / API通信を含む動的解析はAndroLab serverが必須である。固定版serverはPython 2構文を使用し、requirementsもversion固定されていない。現行hostへ直接導入せず、破棄可能な隔離環境で互換性と依存物を別途監査できる場合だけ起動する。

ソースからビルドする場合

release assetではなくsource buildを選ぶ場合も、branchの先端を直接使用しない。上表のcommitを取得してdetached HEADにし、git rev-parse HEADの一致を記録してから、固定版READMEのtoolchainに従う。

git clone https://github.com/OWASP/MASTG-Hacking-Playground.git
cd MASTG-Hacking-Playground
git checkout --detach cad113d64d49fa1db060bd638150be387293b140
test "$(git rev-parse HEAD)" = cad113d64d49fa1db060bd638150be387293b140

古いbuild pluginやdependencyの無審査更新は、演習の挙動と供給元境界を変える。buildが成立しない場合はその場でversionを上げず、別Issueで互換性、生成物hash、静的・動的演習の回帰を再検証する。

取得後の記録

  • release URL、tag、commit、filename、取得日時、SHA-256を学習ログへ残す。
  • Android / iOSのversion、端末またはemulator、MobSF / Fridaのversionを残す。
  • backendを使う場合は、runtime、dependency、bind先、隔離network、停止・破棄結果を残す。
  • hash不一致、filename変更、asset消失、runtime非互換があれば実行を止め、新しい成果物へ読み替えない。

進め方(最小)

  1. 初学者はMASTG Android Java 1.1を選び、固定成果物のSHA-256を照合する。
  2. 付録『演習環境クイックスタート』に従いMobSFを起動する。
  3. APKを投入し、静的解析結果から重点確認項目を抽出する。
  4. 動的解析へ進む場合は、端末・計装・backendの要否を比較表で再確認する。
  5. 結果を付録『学習ログテンプレート(Burp Academy / 演習)』の粒度で記録する。

一次情報(固定版)