我们经常会需要分析手机App的发包数据,本文汇总整理一下常见的抓包的方法。
方法一
手机设置代理为电脑上的抓包程序(Fiddler/Charles)。通过手机安装对应抓包程序证书,可以实现https请求抓包。 优点:设置和操作简单 缺点:设置代理,会被App安全机制检测到,同时存在不支持代理的App。
方法二
透明代理(Transparent Proxy)。这种方式是在手机连接的热点设备上,将手机的网络包进行抓取转发。对设备来说是无感的,所以被称为透明代理。 热点设备可以是PC,也可以是路由器,甚至可以是树莓派等开发板,只要设备能同时支持有线和无线连接。这里以Macbook pro为例来实现透明代理。 设置步骤:
- 系统偏好设置-共享,打开互联网共享,来源设置为以太网,共享端口设置为Wi-Fi,在Wi-Fi选项中可以配置共享无线热点的名称和密码。
- 打开IP转发
sudo sysctl -w net.inet.ip.forwarding=1
- 使用ifconfig命令找到当前共享热点的无线网卡,具体操作方法是手机连接到共享热点后,查看当前网关,然后看看ifconfig列出的网卡列表里,哪一个网卡的ip地址是手机上显示的网关ip。我的电脑显示的是共享热点网卡是bridge100。
创建并启用端口转发规则,将bridge100网卡的80、443端口流量转发到本地的8080端口:
echo "rdr pass on bridge100 inet proto tcp to any port {80, 443} -> 127.0.0.1 port 8080" | sudo pfctl -ef -
运行以下命令可以看到已经创建好的转发规则:
sudo pfctl -s nat
pfctl命令是PF防火墙的配置命令,类似于Linux系统的iptables。PF防火墙 ( 全称:Packet Filter ) 是 UNIX LIKE 系统上进行 TCP/IP 流量过滤和网络地址转换的软件系统。PF 同样也能提供 TCP/IP 流量的整形和控制,并且提供带宽控制和数据包优先集控制。
- 配置允许mitmproxy访问pfctl
sudo sh -c "echo 'ALL ALL=NOPASSWD: /sbin/pfctl -s state' >> /etc/sudoers"
- 本地安装mitmproxy
brew install mitmproxy
- 启动mitmproxy
mitmproxy提供了三种不同的启动命令:
- mitmproxy gives you an interactive command-line interface
- mitmweb gives you a browser-based GUI
- mitmdump gives you non-interactive terminal output
这里用的是mitmweb,启动后自动打开浏览器,显示一个可交互的网页页面,抓取的数据包也会在页面上显示。
mitmweb --mode transparent
- 连接共享热点的设备访问http://mitm.it安装证书文件并启用信任。
总结
以上两种抓包方式,也被称为中间人攻击,就是代理程序接收到用户终端发来请求数据时,伪装成用户向目标服务器发送了数据请求,同时将数据进行了解包分析。但是当遇到服务器请求进行证书校验时,这种方式就无法生效了。 本文只是利用了手里现成的设备来实现透明代理抓包,同样的也可以通过Linux设备,Windows设备,以及路由器等设备来实现,部分教程补充在参考资料中。
参考: mitmproxy透明代理设置 mitmproxy官方网站 透明代理入门 iptables实现透明代理,进行Web流量截取的方法 Android路由重定向+透明代理抓App包
|