エミュレーターの通信を Burp Suite で取りたかったので、手順を簡単にまとめます。
手順として下記2つの方法があります。
検証環境
- macOS Monterey 12.7.1
- Android 12.0 Google APIs (API 31) ※root が使用できるもの
- Burp Suite Professional v2023.10.3.6
ポート転送を利用する方法
複数起動している場合は、適宜 adb -s [デバイスID]
を指定してください。
手順
- Android エミュレーターを起動する
- Burpを
Loopback Only (127.0.0.1)
、8080
ポートで開始する - Androidエミュレーターのプロキシ設定をする ( iptables または Wi-Fi の Proxy 設定)
- エミュレーターからホスト側へポート転送を行う
$ adb reverse tcp:8080 tcp:8080
これで Burp で通信が取れるようになっていると思います。
※ポートフォワーディングの一覧表示
$ adb reverse --list
※ポートフォワーディングの削除
$ adb reverse --remove tcp:8080
仮想ネットワークのIPを指定する方法
手順
- Android エミュレーターを起動する
- Burpを
Loopback Only (127.0.0.1)
、8080
ポートで開始する - 仮想ネットワークのホスト側の IPアドレス(
10.0.2.2
)でプロキシ設定をする ( iptables または Wi-Fi の Proxy 設定)
これで Burp で通信が取れるようになっていると思います。
エミュレーターのプロキシ設定の例
Burp の証明書は下記を参考に適宜インストールしてください。
- Configuring Burp Suite With Android Nougat
- Android Chrome 99 expands Certificate Transparency, breaking all MitM dev tools
iptables で設定する場合
# ポート転送の場合
$ iptables -t nat -A OUTPUT -p tcp --dport [取得したいPORT番号] -j DNAT --to 127.0.0.1:8080
# 仮想ネットのホストIPの場合
$ iptables -t nat -A OUTPUT -p tcp --dport [取得したいPORT番号] -j DNAT --to 10.0.2.2:8080
Android の Wi-Fi から設定する場合
画面: Settings > Network & internet > Internet > Wi-Fi > AndroidWifi > ペンマーク > Advanced options > Proxy
Proxy hostname: 127.0.0.1 (ポート転送の場合)
Proxy hostname: 10.0.2.2 (仮想ネットのホストIPの場合)
Proxy port: 8080
※ Wi-Fi が「制限されたネットワーク」となった場合は、一度 Proxy の設定を削除し再接続してください。