背景と目的
現代のAndroidアプリケーションではHTTPS通信が標準的に採用されており、セキュリティ向上の観点からSSL証明書ピニングが実装されるケースが増えています。Android 7以降のバージョンでは、ユーザーがインストールした証明書をシステムが信頼しないため、従来の方法ではHTTPS通信の傍受が困難となっています。本稿では、この制限を回避し、Androidアプリの通信解析を可能にする環境構築手法について解説します。
必要な環境とツール
- Nox Playerエミュレータ(Android 9バージョン)
- Magisk v25.2 + LSPosed v1.8.6
- TrustMeAlready v1.11
- Postern v3.1.3
MagiskとLSPosedのインストール手順
Nox PlayerにAndroid 9のインスタンスを作成後、MagiskのAPKファイルをエミュレータ内にドラッグ&ドロップしてインストールします。ターミナルを起動し、以下のコマンドを順次実行します:
m
Y
1
x
/sdcard/Pictures/25206.apk
1
エミュレータの再起動後、Magiskアプリを起動してバージョン番号が表示されることを確認します。設定メニューからZygiskを有効にし、LSPosedのZIPファイルを同様の方法でインストールします。モジュールセクションからローカルインストールを選択し、LSPosedのZIPファイルを指定してインストールを完了させます。
TrustMeAlreadyとPosternの設定
TrustMeAlreadyモジュールはSSL証明書ピニングの回避を、Posternはプロキシ検出の回避をそれぞれ担当します。TrustMeAlreadyのAPKファイルをエミュレータにインストール後、LSPosedインターフェースでモジュールが有効になっていることを確認します。Posternも同様にインストールし、後続の設定で使用します。
Burp Suite証明書のインストール
エミュレータのネットワーク設定をブリッジモードに変更し、静的IPアドレスを割り当てます。Posternを起動し、プロキシサーバー設定でBurp SuiteのIPアドレスとポート番号を指定します。Burp Suiteの証明書をDER形式でダウンロードし、拡張子を.cerに変更してエミュレータに転送します。
設定アプリの「セキュリティと位置情報」セクションから「暗号化と認証情報」を選択し、「SDカードからインストール」オプションで先ほど転送した証明書をインポートします。
実践例:旅行アプリの通信傍受
単方向認証を使用するHTTPS通信を行うアプリを対象に、上記設定が正しく機能していることを確認します。認証コード取得リクエストなどの通信が傍受可能であれば、環境構築は成功しています。
Android 12実機での設定
USB接続による設定
開発者オプションでUSBデバッグを有効にし、以下のコマンドで接続を確認します:
adb devices -l
Wi-Fi接続による設定
USB接続確立後、以下のコマンドでTCP/IPモードに切り替えます:
adb tcpip 5555
adb connect [IPアドレス]:5555
システム証明書への移動
movecertモジュールを使用して、ユーザー証明書をシステム証明書領域に移動します。Magiskの改良版を使用してモジュールをインストールし、再起動後に証明書がシステム領域に移動したことを確認します。
Root検出の回避
Shamikoモジュールをインストールし、Magiskの除外リスト機能と併用することで、Root権限の検出を防止します。対象アプリを除外リストに追加し、LSPosedモジュールとの互換性を維持します。