rev-ios-dump について
rev-ios-dump は、iOS のセキュリティ分析やリバースエンジニアリング向けのスキルです。Frida を使い、脱獄済みデバイスで実行中のアプリから復号済みバイナリを取得し、静的解析などに利用できます。
主な機能
- 01実行中プロセスから復号済みバイナリを取得
- 02復号済み IPA ファイルの生成
- 03アプリ内の暗号化フレームワークの取得
- 04ダンプ結果の復号状態を確認
活用シーン
- 01Mach-O を IDA、Ghidra、Hopper に読み込む
- 02Objective-C ヘッダーの抽出
- 03バイナリ内の機密文字列の検索
- 04Frida フックやシンボル解析用ファイルの準備
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ p4nda0s/ reverse-skills --skill rev-ios-dumpインストール後、Claude Code で/rev-ios-dumpを入力して読み込まれたか確認します。
詳細
rev-ios-dump - iOS アプリの復号(砸壳)
ジェイルブレイク済みデバイスから復号済みの iOS アプリケーションバイナリをダンプし、セキュリティ分析とリバースエンジニアリングに使用します。
概要
App Store で配布される iOS アプリは、Apple の FairPlay DRM で暗号化されています。静的解析(IDA/Ghidra/Hopper)を行うには、まず実行時にバイナリを復号する必要があります。これは一般に「砸壳」(シェルのダンプ)と呼ばれています。このスキルでは Frida を使って実行中のプロセスに計装し、メモリ上の復号済み Mach-O をダンプします。
前提条件
| 要件 | 詳細 |
|---|---|
| ジェイルブレイク済み iOS デバイス | SSH アクセスが有効になっていること |
| frida-server | デバイスにインストールされ、実行中であること |
| Python 3 | ホストマシンにインストールされていること |
| frida + frida-tools | pip3 install frida frida-tools |
| USB またはネットワークアクセス | デバイスへの SSH 接続 |
frida-server の実行を確認する
# Check frida-server on device via SSH
ssh mobile@<device_ip> "ps aux | grep frida-server"
# If not running, start it
ssh mobile@<device_ip> "/usr/sbin/frida-server -D &"
# Verify from host
frida-ls-devices
frida-ps -H <device_ip>
ツール:frida-ios-dump
リポジトリ:https://github.com/P4nda0s/frida-ios-dump
インストール
git clone https://github.com/P4nda0s/frida-ios-dump.git
cd frida-ios-dump
pip3 install -r requirements.txt
# Build the TypeScript agent (required before first run)
npm install --ignore-scripts
npx frida-compile dump.ts -o dist/dump.js
注:このバージョンでは TypeScript ベースの Frida エージェントを使用します。dump.py を実行する前に、dist/dump.js をコンパイルする必要があります。
手順
手順 1:対象アプリの Bundle ID を特定する
デバイス上で次のいずれかの方法を使用します。
# Method 1: List running apps via Frida
frida-ps -H <device_ip> -a
# Method 2: SSH into device and check
ssh mobile@<device_ip> "find /var/containers/Bundle/Application -name Info.plist -exec plutil -p {} \; 2>/dev/null | grep CFBundleIdentifier"
または、デバイス上の CocoaTop を使って実行中のプロセスとその Bundle ID を特定します。
手順 2:対象アプリが実行中であることを確認する
対象アプリはデバイス上で実行中である必要があります。frida-ios-dump は実行中のプロセスにアタッチして、復号済みメモリをダンプします。
手順 3:ダンプを実行する
cd frida-ios-dump
python3 dump.py -H <device_ip> -u mobile -P <password> <bundle_id>
パラメーター:
| フラグ | 説明 |
|---|---|
-H | デバイスの IP アドレス |
-u | SSH ユーザー名(通常は mobile) |
-P | SSH パスワード(ジェイルブレイク直後は通常 alpine) |
<bundle_id> | 対象アプリの Bundle ID(例:app.ish.iSH) |
例:
python3 dump.py -H 192.168.1.100 -u mobile -P alpine app.ish.iSH
手順 4:出力を確認する
ダンプが成功すると、カレントディレクトリに .ipa ファイルが生成されます。
ls -la *.ipa
# Unzip to inspect
unzip -o <app_name>.ipa -d dumped_app/
# Verify decryption — cryptid should be 0
otool -l dumped_app/Payload/<AppName>.app/<BinaryName> | grep -A4 LC_ENCRYPTION_INFO
cryptid 0 と表示されていれば、バイナリは正常に復号されています。
トラブルシューティング
| エラー | 原因 | 対処方法 |
|---|---|---|
Failed to spawn | アプリがインストールされていないか、Bundle ID が間違っている | frida-ps -H <ip> -a で Bundle ID を確認します |
Unable to connect to remote frida-server | frida-server が実行されていないか、ポートがブロックされている | デバイスで frida-server を起動し、ファイアウォールを確認します |
SSH connection refused | SSH が有効になっていないか、認証情報が間違っている | ssh mobile@<ip> で SSH アクセスを確認します |
Timeout waiting for process | アプリがクラッシュしたか、完全に起動していない | まずアプリを手動で起動してから、再試行します |
frida.ServerNotRunningError | frida-server のバージョンが一致していない | frida-server のバージョンをホスト側の frida のバージョンに合わせます |
出力に cryptid 1 と表示される | ダンプに失敗し、バイナリが暗号化されたままになっている | ダンプ中にアプリが実行中であることを確認し、再試行します |
Permission denied | SSH キーまたはパスワードに問題がある | -u と -P のフラグを確認するか、SSH キー認証を使用します |
バージョン不一致の修正
frida-server とホスト側の frida は、メジャーバージョンを一致させる必要があります。
# Check host version
frida --version
# Download matching frida-server from:
# https://github.com/frida/frida/releases
# Choose: frida-server-<version>-ios-arm64.xz
出力の使用方法
復号済み IPA を取得した後:
- 静的解析 — 復号済み Mach-O を IDA/Ghidra/Hopper に読み込みます
- クラスダンプ — ObjC ヘッダーを抽出します:
class-dump <binary> > headers.h - 文字列分析 — 機密性の高い文字列、URL、キーを検索します
- Frida フッキング — 動的解析には
rev-fridaスキルと併用します - シンボルの復元 — シンボルが削除されたバイナリの分析には
rev-symbolスキルと併用します
注意事項
- ダンプ処理中は、デバイスのロックを解除したままにし、アプリをフォアグラウンドに表示しておく必要があります。
- 複数のフレームワークを含むアプリの場合、frida-ios-dump はアプリバンドル内の暗号化されたフレームワークをすべてダンプします。
- 高度なジェイルブレイク検出機能を備えたアプリは、ダンプの完了前に終了することがあります。その場合は、まずジェイルブレイク検出の回避を検討してください。