Hello there, ('ω')ノ
✅ App Integrity Checkとは?
✔ 目的:
- 改ざんアプリの実行を防ぐ
- 無断で再パッケージされたアプリをブロックする
- セキュリティ機能の無効化を検知する(rootやdebuggerなど)
🔍 よく使われるチェック手法
| チェック内容 | 説明 |
|---|---|
| アプリの署名検証 | getPackageManager().getPackageInfo() などで署名ハッシュを確認 |
| APKのハッシュ比較 | ファイルを読み込み、SHA256で整合性を確認 |
| root検知 | /su の存在チェックや which su の結果を調べる |
| Debugger検知 | Debug.isDebuggerConnected() や TracerPid をチェック |
| エミュレータ検知 | 特定のデバイス名・MACアドレス・センサーの有無など |
💥 では、なぜバイパスできてしまうのか?
① 検知ロジックがアプリ内にあるから
多くの整合性チェックはJavaコード内に実装されており、jadx や Frida などで内容が丸見えになります。
if (!signature.equals(REAL_SIGNATURE_HASH)) { throw new SecurityException("改ざん検出"); }
→ このようなコードは、Frida で動的に if の結果を上書きできます。
② FridaやXposedによるランタイム書き換え
Java.perform(function () {
var targetClass = Java.use("com.example.security.Checker");
targetClass.isTampered.implementation = function () {
return false; // 無理やり改ざん検知を無効にする
};
});
→ 上記のように、実行中に結果を書き換えてチェックを通すことが可能です。
③ ネイティブコードでも“読まれる”
この続きはcodocで購入