2001Yのプロフォール画像

2001Y@Y20010920T

0 TL;DR

RootAPK改変DevTools 可能?ベスト手段ワンライナー例
不可MITM + scrcpy で推測mitmproxy -p 8080 / scrcpy
LSPatch / Objection patchapk / Frida Gadgetobjection patchapk --enable-webview-debugging
Magisk + LSPosed(+WebViewDebugHook) / Frida serverfrida -U -f <pkg> -l enable_webview.js --no-pause
可 (最強)smali 改変 + あらゆるフックapktool d → smali edit → apktool b

1 APK 改変とは?

項目詳細
定義APK を 展開 → ファイル追加/修正 → 再ビルド → 署名し直す 一連作業。オリジナル署名が失われる。
主ツールapktool, apksigner, LSPatch, Objection patchapk, Frida Gadget 手動埋込
メリット- Root 不要。- 任意コード(Frida Gadget, LSPosed DEX)を注入し自由度大。
デメリット- Play Protect 警告、本家アップデート停止。- アプリ側署名検証・Play Integrity 反応でクラッシュする恐れ。

2 判定フローチャート

   Root 可能?
     ├─ YES → 表4 (Magisk/Frida)
     └─ NO
          ├─ APK 改変できる? → 表3 (LSPatch/patchapk)
          └─ できない → 表5 (MITM + scrcpy)

3 Root なし + APK 改変あり

3‑A LSPatch (非Root LSPosed)

java -jar LSPatch.jar -m WebViewDebugHook.apk app_orig.apk -o patched.apk
apksigner sign --ks my.keystore patched.apk
adb install -r patched.apk

⇒ 起動後 chrome://inspect で WebView 出現。

3‑B Objection patchapk

objection patchapk --source app_orig.apk \
  --enable-webview-debugging --save patched.apk
adb install -r patched.apk
objection explore -g com.example.app

3‑C Frida Gadget 手動

apktool d app_orig.apk -o out
cp libfrida-gadget.so out/lib/arm64-v8a/
# AndroidManifest.xml に <meta-data android:name="frida-gadget" android:value="@string/libgadget"/>
apktool b out -o mod.apk
apksigner sign --ks my.keystore mod.apk
adb install -r mod.apk
frida -UG com.example.app -l enable_webview.js

4 Root あり + APK 無改変

4‑A Magisk + LSPosed + WebViewDebugHook

# Magisk app → Modules → "LSPosed"
# Settings → Zygisk = ON
# LSPosed Manager → Enable WebViewDebugHook (all apps)
reboot

→ 再起動後は全アプリが DevTools 対応。

4‑B Frida server 直挿し

adb push frida-server-android-14 /data/local/tmp/
adb shell "su -c 'chmod 755 /data/local/tmp/frida-server; /data/local/tmp/frida-server &'"

cat > enable_webview.js <<'EOF'
Java.perform(function() {
  var WebView = Java.use('android.webkit.WebView');
  WebView.setWebContentsDebuggingEnabled(true);
  console.log('[+] WebView debugging enabled');
});
EOF

frida -U -f com.target.app -l enable_webview.js --no-pause

4‑C ptrace インジェクター(上級)

adb shell su -c './Injector -n com.target.app -so /data/local/tmp/libHook.so &'
# libHook.so 内 JNI_OnLoad で setWebContentsDebuggingEnabled(true) を呼ぶ。

5 Root なし & APK 無改変(DevTools 不可)

DevTools は使えないが「通信・画面・UI 階層」から推測はできる。

5‑A 具体ワークフロー

観測対象推奨ツールコマンド例 / メモ
HTTPS を含む通信内容mitmproxy / Charlesmitmproxy -p 8080 + 端末 Wi‑Fi プロキシ設定。ルート CA を端末へインストールし TLS 復号。証明書ピンニングに遭遇したら Frida の SSL バイパススクリプトを併用。
画面 (描画) とレスポンス遅延scrcpy (リアルタイム) / adb shell screenrecord (動画)scrcpy --record file.mp4 --show-touches で操作&遅延タイムライン収録。レスポンス速度は mitmproxy ログのタイムスタンプと比較。
ビュー階層UIAutomator dumpadb shell uiautomator dump /sdcard/view.xmladb pull。WebView 要素は 1 ノードのみ=DOM 不可。
JavaScript 挙動推測上記 3 つの突合① mitmproxy のリクエスト/レスポンス (時刻, URL, Payload) ② scrcpy 動画のフレームタイム ③ UIAutomator のレイアウト変化 を時系列で並べる→ XHR → DOM 変化までの遅延 が読める。

例:検索フォームに入力 → XHR /api/search?q=foo (T+0 ms) → 画面リスト更新 (T+320 ms)。JS 処理/RecyclerDiff のボトルネックなどが逆算可能。

5‑B 実効性と限界

  • メリット:Root 権限不要、公式 APK のままでも実行可。通信経路が全て分かるため バックエンド依存 の不具合洗出しには十分。
  • 限界:DOM 構造そのものは見えず、クライアント JS のステート管理 までは把握できない。また証明書ピンニング強固なアプリではパケット観測が制限される。

Tips:Android 14 端末では developer options → enable screen record HEVC を ON にすると scrcpy の遅延が ~80 ms 改善。

6 Root あり + APK 改変あり Root あり + APK 改変あり

smali 改変で Activity#onCreate に直接

invoke-static { v0 }, Landroid/webkit/WebView;->setWebContentsDebuggingEnabled(Z)V

を埋め込むだけで恒久的に DevTools 可。LSPosed すら不要。

7 Play Integrity / Root 検出対策

カテゴリモジュール / 手法対象API・検出ロジック特徴 / 注意点
Root 隠蔽 (Zygisk)ShamikoSuFile, access("/sbin/su") など基本チェックZygisk 層で Magisk 痕跡を unmount。Magisk v28.0+ 公式対応継続。(xdaforums.com)
Zygisk‑AssistantMagisk / KernelSU 両対応の完全 root hideFOSS。設定 UI なし。zygisk‑assistant cfg で対象 app 指定。Android 5–14 対応。(xdaforums.com)
ZygiskNextZygisk 自体を置き換え一部銀行アプリが Zygisk を直接検出 ⇒ swap 実装で回避。要 Magisk 設定 Zygisk off。(xdaforums.com)
Play Integrity スプーフPlayIntegrityFix‑NEXT (PIF NEXT)deviceIntegrity / basicIntegrityA14 以降の API v3 対応。TrickyStore と併用で Play Store もカバー。(github.com)
Universal SafetyNet Fix fork旧 SafetyNet エミュレーションA12 以前向けレガシー。新端末では PIF 系推奨。(xdaforums.com)
アプリリスト/ブートローダ検出Hide My Applist (HMA)pm list packages, /data/app スキャンLSPosed モジュール。対象アプリ毎にホワイトリスト/ブラックリスト設定。(github.com, xdaforums.com)
BootLoaderSpoofergetprop ro.boot.flash.locked などLSPosed モジュールでブートローダ unlock 情報を偽装。(reddit.com)
Kernel Hooksusfs (KernelSU + TrickyStore)/proc/mounts パス伏せ / syscall hookReddit で“現行最強”と話題。要 KernelSU 対応カスタムカーネル。(reddit.com)
Property Spoof CLIih8snro.build.* 系の build.prop 判定system/vendor prop を tmpfs でマスク。Pixel系カスタムROMで実績。(reddit.com)

組み合わせ指針

  1. まず PIF‑NEXT で Play Integrity を通すMEETS_DEVICE_INTEGRITY を取得。
  2. 追加で HMA / BootLoaderSpoofer / Zygisk‑Assistant をアプリ単位で適用。
  3. それでも検出される場合は susfs + KernelSU ルートへ移行(要カスタムカーネル)。

実務では PIF‑NEXT + Zygisk‑Assistant + HMA の 3 点セットで 2025 年時点の主要銀行 / 配達 / 動画配信アプリをクリアした報告が多い。