mcpField
R
re-mobile-forensics

re-mobile-forensics

github.com/dslsdzcセキュリティ20649 回インストール2 週間前に更新
リポジトリ

re-mobile-forensics について

Android と iOS のバックアップやアプリデータを抽出・解析する、モバイルフォレンジック向けスキルです。削除データの復元やタイムライン作成に加え、許可範囲、証拠保全、抽出上の制約も扱います。

主な機能

  1. 01Android・iOS バックアップ抽出
  2. 02アプリサンドボックス内データの特定
  3. 03SQLite 削除レコードの復元
  4. 04ファイルカービングとタイムライン作成
  5. 05証拠のハッシュ検証と報告

活用シーン

  1. 01オフライン端末の既存バックアップ解析
  2. 02単一アプリからのデータ抽出
  3. 03削除レコードの可能性評価と検証
  4. 04タイムラインと証拠の整理

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/dslsdzc/rev-skills --skill re-mobile-forensics

インストール後、Claude Code で/re-mobile-forensicsを入力して読み込まれたか確認します。

同梱ファイルreferences/decision-tree.mdreferences/gotchas.md

詳細

移动设备取证

何时使用 / 何时不用

  • 用:设备备份/镜像的数据提取、应用数据取证、删除恢复、时间线重建
  • 用:应用数据落盘路径解析(数据库/偏好/缓存)——App 结构理解配合 [[re-mobile]]
  • 用:时间点对比取证(备份前后数据变化/已删除记录比对)
  • 用:轻量定向提取(单应用单表数据——直接 run-as/单应用备份,不必全量)
  • 用:删除数据可恢复性评估(先判定再动手,避免无效耗时)
  • 用:设备已离线/损坏时(备份文件仍可解析——备份解析不依赖设备在线)
  • 不用:App 逆向分析([[re-mobile]]);通用文件系统分析([[re-disk-forensics]]);运行中进程动态提取([[re-frida]])
  • 不用:云备份/云同步数据(Google/iCloud 云侧不在本技能,取证范围需另行授权)
  • 不用:无授权设备(红线:仅授权设备;设备隔离与保全原则见 [[gotchas]])

工具准备

adb(Android 设备接口)
  • Linux: apt install adb / dnf install android-tools;macOS: brew install android-platform-tools;Windows: 官方平台工具
  • 验证: adb --version;adb devices 需设备开启 USB 调试并授权(屏幕弹窗确认)
libimobiledevice(iOS 设备接口)
  • Linux: apt install libimobiledevice-utils;macOS: brew install libimobiledevice;Windows: 官方构建
  • 验证: idevice_id -l(列出设备)
备份解析工具
  • Android: abe(Android Backup Extractor,Java jar,GitHub nelenkov/android-backup-extractor:java -jar abe.jar unpack backup.ab backup.tar)或等价 python 脚本;验证: java -jar abe.jar --help(需 Java,安装见 [[re-java]])
  • iOS: idevicebackup2 + manifest 解析(见步骤 2)
  • sqlite3(数据库读取——Linux: apt install sqlite3;macOS: brew install sqlite3;Windows: 官方构建);验证: sqlite3 --version
  • foremost(数据雕刻——Linux: apt install foremost;macOS: brew install foremost);验证: foremost -h
  • python3(解析脚本):安装见 [[re-python]] 工具准备

操作手順

順番に実行します。デバイスの操作は許可された範囲を遵守してください(レッドライン:許可されたデバイスのみ)。証拠保全の順序:隔離(ネットワーク切断/機内モード)→ デバイスの状態を記録(バージョン/ロック解除状態/暗号化/ネットワーク)→ 読み取り専用の抽出を優先 → 成果物を保管。各ステップの成果物を保管してください(パス + sha256。[[re-triage]] を参照)。リモート消去と保全の詳細は [[gotchas]] を参照してください。

  1. Android の抽出:

    adb backup -f backup.ab -all        # 全量备份(应用需允许备份)
    adb backup -f app.ab -apk -noobb com.target.app   # 单应用备份(按包名)
    adb shell run-as com.target.app ls data   # 应用沙箱(debuggable 应用)
    # root 设备:dd 镜像关键分区 / adb pull /data 直接提取
    
    • バックアップの実行可能性を事前確認:adb shell bmgr list transports(システムのバックアップサービスが利用可能か確認します。出力なし/エラーの場合 → adb backup は利用できないため、別の方法に切り替えます)
    • デバイスの状態を記録:バージョン(adb shell getprop ro.build.version.release)+ 暗号化/ロック解除状態(以降の解析手順に影響します)
    • adb backup の現状:Android 12 以降、公式に非推奨となっており、targetSDK 31 以降のアプリデータはエクスポートされません(targetSDK<31 または debuggable アプリのみ有効。Play ストアの新しいアプリではほぼ利用できません)——機能しない場合は root/イメージ抽出に切り替えます(判断基準は [[decision-tree]] を参照)
    • ab 形式:マジック値 ANDROID BACKUP + バージョン/フラグバイト(圧縮/暗号化ビット)+ 任意の AES-256-CBC 暗号化パラメーター + tar(deflate 圧縮の場合あり)ペイロード
    • バックアップの解析:ab ヘッダー → tar を展開(暗号化バックアップにはバックアップパスワードが必要です。パスワードがない場合は抽出不可と記録します)。成果物はまず file backup.ab でマジック値とサイズを確認します
    • 成果物の保管:専用ディレクトリに保管し、デバイス識別子/時刻を含む名前を付けます(複数デバイスの混同を防止)
    • 解析の組み合わせ例:abe unpack backup.ab backup.tar(暗号化バックアップのパスワードは末尾の位置引数として指定します:abe unpack backup.ab backup.tar <密码>、または環境変数 ABE_PASSWD を設定します)→ tar tf で内容を一覧表示 → sqlite3/plist で分析
    • アプリのサンドボックス:run-as(debuggable)/root 化済みデバイスから直接読み取ります。allowBackup=false のアプリは警告なしでバックアップが空になります(坑 2 を参照)
    • run-as によるバイナリの安全な取得:adb exec-out run-as com.target.app cat files/x.db > x.db(exec-out はターミナルのエスケープ処理を行いません)
    • root イメージの注意点:まずパーティションテーブルを確認(adb shell ls /dev/block/by-name/ または cat /proc/partitions)してから、対象パーティションを dd します。イメージ成果物は大きいため、先にディスク容量を確認してください
    • ハードウェア Keystore の鍵はバックアップからエクスポートできません(デバイスのハードウェアに紐付けられているため、制約として記録します)
    • データベースの抽出 → sqlite3([[re-disk-forensics]] の SQLite ページ構造の手法)
  2. iOS の抽出:

    idevicebackup2 backup ./backup_dir
    # 备份结构:Manifest.plist(元数据)+ Manifest.db(文件索引)+ 按 fileID 分目录的文件
    
    • バックアップの構造:Manifest.db(SQLite のファイルインデックス:domain/相対パス → fileID。iOS 10 以降。以前のバージョンでは Manifest.mbdb)、Manifest.plist(バックアップのメタデータ:IsEncrypted/BackupKeyBag/ManifestKey/デバイス情報)、Info.plist(デバイス情報)、Status.plist(バックアップの状態)、fileID 形式のファイル名(fileID = SHA1(domain + "-" + relativePath)。パスから派生し、内容とは無関係です。解析上の注意点は [[gotchas]] を参照)
    • 初回接続時にはデバイス側で信頼が必要です(設定 > 一般 > デバイス管理/このコンピュータを信頼)——信頼されていない場合、idevice_id は出力しません
    • 暗号化バックアップの判定:Manifest.plist の IsEncrypted キーを読み取ります(暗号化バックアップでも Manifest.plist は引き続き平文で読み取り可能で、鍵素材の BackupKeyBag/ManifestKey もその中にあります)。暗号化されるのは Manifest.db と各ファイルの内容です——復号にはバックアップパスワードが必要です(パスワードがない場合は抽出不可と記録します)
    • Keychain データは keychain-backup.plist にあり、同様にバックアップパスワードによる復号が必要です(鍵はパスワードから派生します。ツールによって差が大きいため、使用するツールのドキュメントに従ってください)
    • アプリデータのパス:Library/Preferences(plist の設定)、Documents(ユーザーデータ)、Caches(キャッシュ)、Library/Application Support(データベースがよく保存される場所)——App の構造については [[re-mobile]] を参照
    • 抽出の優先順位:データベース > 設定 > キャッシュ(キャッシュには削除済みデータが残っている場合があります)
    • バックアップの完全性を確認:Manifest.db のインデックスに従って各項目を照合します——各 domain/相対パスに対応する fileID のファイルが実際に存在することを確認し、インデックスとファイルが一致しない場合は記録します
    • バックアップとライブ抽出の選択:バックアップを優先します(デバイスに触れず、証拠の完全性を保ちやすいため)。最新の状態が必要な場合はライブ抽出を行い、操作時刻を記録します
    • 既存のローカルバックアップがある場合は、既定のディレクトリを直接解析します:~/Library/Application Support/MobileSync/Backup(デバイスごとに独立したサブディレクトリがあります。UDID を照合してデバイスの混同を防いでください)
  3. 削除データの復元とタイムライン:

    • SQLite の削除レコード:freelist ページ/WAL の未 checkpoint ページ/未割り当てページの残存データ——まず journal_mode(WAL/delete/journal)を確認してから復元方法を選びます。方法は [[re-disk-forensics]] のデータベースファイル形式を参照してください
    • データカービング:foremost で未割り当て領域からファイルシグネチャに基づいて復元します(画像/圧縮ファイル/データベースページ)。一般的なシグネチャ(jpg/png/zip)は既定でカバーされます。カスタムタイプには設定ファイル(-c)を使用します。復元データはマジック値/可読性で検証します([[re-triage]] の初期調査を参照)
    • 暗号化デバイスの注意点:Android FBE/ディスク全体の暗号化では、未割り当てページは暗号文であるため、カービングは無効です——バックアップ/イメージ内の復号済みファイルの経路を優先してください(坑 8 を参照)
    • タイムラインの再構築:ファイルのタイムスタンプ + データベースレコードの時刻(まず UTC に正規化し、デバイスのタイムゾーンを記録します——坑 4)+ Status.plist のバックアップ時点(裏付け)
    • 復元データの相互検証:同一レコードが複数のデータベース(例:チャットデータベース + インデックスデータベース)に存在する場合は相互に照合し、信頼性を高めます
    • 成果物:タイムライン表(時刻/操作/ソース)+ 復元データ(アプリ/データタイプ別に整理)。タイムラインの証拠レベルは [[decision-tree]] を参照してください
  4. 証拠の統合と提出:

    • まとめ:タイムライン表 + 抽出物一覧(データの種類ごとのソース/抽出方法/信頼度)+ 方法の記録
    • 結論は [[re-analyze/analysis-contract]] のレビュー形式で提出します(結論/証拠/確信度)。削除データの復元には「部分復元」の限定を付けます

クロスドメイン連携

  • [[re-forensics]] ゲートウェイ:本スキルの所属先
  • [[re-disk-forensics]]:SQLite の構造/WAL/削除データの復元方法
  • [[re-mobile]]:App の構造理解(サンドボックスのパス/データ構造)
  • [[re-frida]]:実行中の動的抽出(本スキルは静的/バックアップ側を扱い、相互補完します)
  • [[re-triage]]:成果物の初期調査(タイプ/magic/ハッシュ)
  • [[re-mem-forensics]]:デバイスのメモリダンプ分析との連携(root 化済みデバイスではメモリを dump できます)
  • [[re-analyze/analysis-contract]]:結論の提出形式

常见坑与陷阱

  • 加密备份无密钥:现象——备份无法解析;原因——AES 加密;对策——无密码则标注不可提取,不硬破解(授权边界)
  • ADB backup 权限限制:现象——备份为空;原因——应用未声明 allowBackup 或 targetSDK≥31(Android 12+);对策——换 root/镜像提取,标注路径局限
  • iOS 哈希路径混淆:现象——文件找不到;原因——备份文件按 fileID(路径派生的 SHA1,不是内容哈希)分两级目录组织(fileID 前两位/完整 fileID),不是原名;对策——先解析 Manifest.db 的 domain/相对路径 ↔ fileID 映射再定位文件
  • 时间线时区:现象——时间错位;原因——设备时区与取证时区不一致;对策——统一 UTC 记录,标注设备时区
  • 沙箱边界:现象——拿不到目标数据;原因——无 root/未越狱;对策——按可提取范围交付(限定结论),不越授权
  • 设备联网被远端擦除:现象——提取中数据消失/变化;原因——设备联网触发远端抹除/同步覆盖;对策——先隔离(飞行模式/断网),后接电源防自动关机
  • 备份中途损坏:现象——备份文件不完整/解析报错;原因——操作中断(线缆/锁屏/空间不足);对策——重试前确认空间与连接稳定,产物 sha256 存档;损坏备份按未分配数据走雕刻
  • 完整性校验缺失:现象——提取数据被篡改/不完整不知情;原因——未做校验;对策——产物 sha256 存档,镜像类产物校验分区摘要(无摘要则标注无法校验)
  • FBE/全盘加密:现象——雕刻恢复出来是密文;原因——设备开启文件级/全盘加密(现代 Android 默认);对策——优先走备份/镜像内已解密文件路径,标注加密局限
  • 锁屏/授权状态:现象——adb devices 显示 unauthorized/offline;原因——锁屏未解锁/USB 调试授权过期;对策——先解锁(授权范围内)再连接,记录授权状态
  • adb 多设备歧义:现象——命令报错/操作错设备;原因——多设备连接未指定序列号;对策——adb devices 确认序列号,命令加 -s <serial>
  • 删除恢复误判:现象——恢复出的「已删除」记录实际是应用保留的冗余副本;原因——应用多处保存;对策——以「备份内不存在 + 镜像内存在」为删除判据(交叉验证)
  • 备份密码遗忘:现象——有密码备份但密码丢失;原因——密码未随备份记录;对策——提取时立即记录密码来源(授权范围内),不可恢复时标注
  • 备份格式版本差异:现象——解析工具报格式错;原因——新旧 Android/iOS 备份格式差异;对策——用与系统版本匹配的工具链,标注版本
  • 场景分支与提取路径选择见 [[decision-tree]];边界与反例见 [[gotchas]]

コメント