最近 apk をテストしていると、一般的な手段:burp 証明書のエクスポート -> 証明書のインストール ->wifi 設定のプロキシ手段では https のトラフィックをキャッチできないことがわかりました(proxifier を使って Android エミュレーターを burp プロキシ経由で動かすことも可能ですが、やりたくありませんでした)。検索エンジンで調べたところ、Android7.0 以降、システムはデフォルトでシステム証明書のみを信頼し、ユーザーがインストールした証明書は信頼しなくなったことがわかりました。そのため、さまざまなエミュレーターを使って apk の https メッセージをキャッチしようと何度も試みた後、最終的に Android Studio を選択しました。証明書をシステム証明書にインストールします。
burp 証明書の準備#
1、burp 証明書をエクスポート
2、openssl を使用して証明書形式を変更し、burp 証明書の der 形式を pem に変換し、証明書のハッシュを取得します。
openssl x509 -inform DER -in burp.der -out burp.pem
openssl x509 -inform PEM -subject_hash_old -in burp.pem

ファイル名を取得したハッシュ.0 に変更します。
mv burp.pem 9a5ba575.0
エミュレーターの準備#
1、Android Studio を開き、新しいエミュレーターを作成します。詳細は画像を参照してください。

システムイメージは必要に応じて選択できます。

エミュレーターの名前を入力し、エミュレーターのストレージサイズを設定します。多めに設定して、インストールスペースが不足しないようにします。


2、emulator コマンドを使用してエミュレーターを起動します。コマンドのデフォルトの場所は / Users/{{ユーザー名}}/Library/Android/sdk/emulator です。-no-snapshot-load パラメータを追加してエミュレーターの状態を保存します。そうしないと、エミュレーターを再起動した後に adb root、remount コマンドを再実行して証明書の権限を変更する必要があります。
すべてのエミュレーターを表示 emulator -list-avds
エミュレーターを起動 emulator @Resizable_API_33 -writable-system -no-snapshot-load


証明書のアップロード#
1、adb コマンドを使用してパーティションを再マウントし、system を読み書き可能にします。
adb root root権限に入る
adb disable-verity パーティション検証機能を無効にする
adb reboot デバイスを再起動
adb remount パーティションを再マウントし、systemパーティションを読み書き可能にする



2、証明書をアップロードします。
adb push 9a5ba575.0 /sdcard /sdcardディレクトリに証明書をアップロード
adb shell システムに入る。この時、whoamiを使用してrootユーザーかどうか確認できます
cp /sdcard/9a5ba575.0 /system/etc/security/cacerts/ システムに入った後、証明書をシステム証明書ディレクトリにコピーします
chmod 644 /system/etc/security/cacerts/9a5ba575.0 証明書の権限を変更します

3、証明書が正常にインストールされたか確認します。
エミュレーターのインターフェースを操作し、設定 (setting) --> セキュリティ (security) --> さらにセキュリティ設定 (more security settings) --> 暗号化と資格情報 (encryption & credentials) --> 信頼された資格情報 (trusted credentials) に入ります。

WIFI プロキシの設定#


パケットキャプチャに成功

参考記事#
https://www.freebuf.com/articles/system/347725.html
https://developer.android.com/studio/run/emulator-commandline?hl=ja
https://developer.android.com/studio/command-line/adb?hl=ja
https://juejin.cn/post/6844903645289398280
https://android.stackexchange.com/questions/232234/why-adb-remount-retruns-remount-failed-on-android-emulator