如何将AVD Android Emulator的通信转发到burp上

0x00 背景

好久没水文章了,水一篇。最近有工作需要使用Android Studio的Emulator来测试App,所以要将Emualtor的通信转发到PC上并由burp捕获。

0x01 问题

问题是AVD的Emulator使用了它自己的虚拟路由,无法在PC上找到VM的interface,所以无法在PC上捕获Emulator的通信。

0x02 解决

通过查阅资料 https://developer.android.com/studio/run/emulator-networking?authuser=1 发现AVD的Emulator会将发到10.0.2.2的通信转发到PC的loop back上,所以我们可以先将Emulator的所有通信转发到10.0.2.2,然后进一步在PC上将loop back的通信转发到burp上,操作如下:

  1. 在Emulator上将所有https的通信转发到10.0.2.2:8080上:
generic_x86_64:/ # iptables -t nat -A OUTPUT -p tcp --dport 443 -j DNAT --to 10.0.2.2:8080
  1. 使用如下的pf将PC的loop back上的通信转发到自己上,注意此时burp监听了loop back的8080端口:
# /etc/pf-share.conf
scrub-anchor "com.apple/*"
nat-anchor "com.apple/*"
rdr-anchor "com.apple/*"
rdr-anchor "forwarding"

rdr pass on lo0 inet proto tcp from any to any port {8080} -> 127.0.0.1 port 8080

dummynet-anchor "com.apple/*"
anchor "com.apple/*"
load anchor "com.apple" from "/etc/pf.anchors/com.apple"

启用:

sudo pfctl -evf /etc/pf-share.conf

这一步看似多余但是如果不在PC上再做一次NAT,则PC上返回的通信无法回到手机上。