本文研究了目前可行的APP抓包方式。
思路
根据设备/操作系统的不同,获取数据的方式也不尽相同。大概的方法基本上就是作为中间人拦截并分析或直接对APP本身拆包反工程分析。其中作为中间人的方式有构建VPN、安装虚拟网卡和构建HTTP/SOCKS代理,其中如需解密HTTPS数据则还需要在目标设备安装中间证书。
另外某些APP为了提升数据保护等级,会在数据接口上添加各种混淆或加密,这种情况下与抓包基本没什么关系了,因为即便抓到数据包并解除HTTPS加密也无法获得数据,点名批评okhttp。
Windows
Windows通常比较简单,大部分应用都会主动走在系统设置的代理,例如Charle利用的就是该原理;若有一部分应用不遵守系统代理,也可以通过VPN或安装虚拟网卡作为出口来拦截数据。
iOS
iOS平台安装系统级证书并信任后所有应用都可以抓到HTTPS数据,基本没什么难度。
Android
Android平台情况较为复杂,首先Android 7.0及以上版本应用除浏览器外默认不再信任用户安装的根证书,这就无法在Android平台上抓取HTTPS数据包,当然解决办法也是有的,通过安装Xposed或Root后可以将自签根证书放进系统根证书列表;其次就是新应用可能默认开启证书锁定SSL Pinning
,具体原理可以点 这里 查看,这个时候可以采用一些插件取消这个限制。
Android平台也同样可以通过HTTP代理或VPN(HTTPCanary)的方式获取到数据包,也可以用虚拟机、太极(模拟xposed环境)等方式获取数据包。
虚拟机方式也存在一定限制,比如x86平台虚拟机不支持arm平台应用安装、设置代理较为麻烦等;Google提供的AVD虽然提供了arm/aarch架构的虚拟机平台,但在x86平台上的转译效率较低,性能几乎就是没法用的水平。
Charles
应用官网:Charles Proxy ,请尽量支持正版,并于24小时内解除授权,这里提供一份可用授权(版本4.6.2可用):
1 | UmVnaXN0ZXJlZCBOYW1lOiBMeG5DaGFuQG5kZi1pbmMuY24KTGljZW5zZSBLZXk6IDkxQUY3MjdBQjdEMUQ1N0QxOAoKUmVnaXN0ZXJlZCBOYW1lOmh0dHBzOi8vemhpbGUuaW8KTGljZW5zZSBLZXk6IDQ4ODkxY2YyMDljNmQzMmJmNA== |
Windows
打开Charles后打开Proxy
→SSL Proxying Settings
,勾选Enable
启用抓取SSL加密包,左侧Include添加需要抓取的域名,右侧Exclude添加不抓取的域名,支持通配符,Include包括*.*
即为全部抓取。
Help
→SSL Proxying
→Install Charles Certificate
安装根证书到本机,即可开始抓取HTTPS数据包。
iOS
Proxy
→Proxy Setting
,HTTP组下Port
值即为代理端口号,如有需要可更改。
- 打开iOS设备,选择
无线局域网
,右侧Info
按钮,下滑配置代理
,选择手动
,服务器输入当前Charles运行设备的IP地址,Port填写上方设置的代理端口号,然后随意访问任意网站,查看Charles是否跳出询问对话框,选择Allow
。 - 打开Safari,输入
chls.pro/ssl
,此时会自动下载一个描述文件,点击安装。 - 打开设置,通用,描述文件,选择Charles字样的选项,进去选择安装。
- 打开设置,通用,关于本机,证书信任设置,勾选或打开
Charles Proxy CA
字样项即可,此时该iPhone上的全部网络数据均可被Charles捕捉到。
Android 6.0 and older
以
Miui 9.6.1.0 CN Stable (Based on Android 5.1.1)
版本为例。
- 打开浏览器,输入
chls.pro/ssl
,此时会自动下载一个证书,点击保存。 - 打开设置,更多设置,系统安全,从存储设备安装证书,选择刚才下载的证书文件,然后选择VPN和应用即可。
其他设备的抓包方式还在完善中,请关注后续更新!