Charles + postern安卓APP抓包(能解决90%安卓APP抓不到包的情况)
前言
最近在做APP测试的时候,发现burpsuite不能抓到包,在开启抓包的时候APP也不会显示网络超时之类的提示,说明证书上没问题,测试后发现APP走的是tcp流量,而burpsuite抓的http流量导致没有抓到。
研究了一番,用charles抓包 + postern流量转发可以很好的解决该问题,故此本文记录一下安装以及抓包的过程。
准备一个root的模拟器或者一台手机即可。
Charles安装及设置
软件安装及注册
安装
安装网址:https://www.charlesproxy.com/download/previous-release/
建议安装4.6.8版本,最新版本是5.0会自动安装在WindowsAPP目录下,存在权限问题。
软件安装简单这里不做过多赘述。
注册
注册码获取:https://www.zzzmode.com/mytools/charles/
输入你的名称就可以得到注册码,再到软件里注册即可
软件里找到 help - register,然后把名字和license输入即可注册。
软件配置
证书安装
- windows证书安装
点击 install charles root certificate安装
- 安卓模拟器安装
点击save charles root certificate导出证书
导出pem文件
使用以下命令转换xxx.0格式
openssl x509 -inform PEM -subject_hash_old -in charles.pem |
根据红框内名称改名为xxx.0,6ef8c626所以改名为6ef8c626.0,再把签名内容保存到里面:
使用以下命令将证书安装到模拟器:
adb root |
(手机的话可能要root,不然没有权限放入系统证书,建议用模拟器)
重启一下模拟器证书就安装好了
charles配置
proxy - proxy settings
这里这个端口自行设置,默认为8888,这个端口我们抓包要用到。
proxy - ssl proxying settings
至此,基础配置完毕。现在我们来试试抓包效果。
模拟器设置
这里以夜神模拟器为例子。
先前我们设置了http proxy,确保模拟器或手机和电脑在同一网络环境
获取电脑IP
设置模拟器代理
找到模拟器WLAN - wifi
长按点击修改网络
代理这一行设置为手动,再把抓包电脑的IP和端口填入
保存即可。
抓包测试
找一个没有做防护的APP进行抓包测试
发起登录请求,然后发现charles抓到了该请求:
Charles+postern实现流量转发代理抓包
此前的方法其实和burpsuite抓包的操作类似,只需要设置http代理,再将抓包设备设置代理即可抓到APP的http请求。
但是一些APP会做一些防护,例如不走http请求,走的是tcp流量,使用常规的burpsuite抓包的方式会发现APP的流量不会被你拦截,APP正常运行,bp抓不到包。
针对这一办法使用charles抓包的好处是其可以设置socks的代理,而postern工具又具有这一功能,所以结合该工具进行流量转发便可以抓到这些流量。常规抓不到包的情况都可以试一试这一套组合拳
这里拿某APP为例,只能抓到一些调用的流量,比如调用了百度地图map的api,所以抓到了请求的流量,但是其APP内核心的请求流量并没有被抓到。
(其他请求的流量,但不是APP域名相关的)
下面开启设置再进行抓包。
charles开启socks5代理
proxy - proxy settings
设置一个自定义的端口,保存就打开socks代理了。
postern安装及设置
安装:https://github.com/postern-overwal/postern-stuff/blob/master/Postern-3.1.2.apk
配置如下:
设置 - 配置代理
按照图中设置:
设置 - 配置规则
按照图中设置:
匹配类型选择匹配所有地址,动作选择通过代理连接,代理选择刚刚设置的代理
这样就配置完了,点击设置 - 打开VPN就可以进行流量转发了
检查wifi是否设置代理
如此前wifi设置了代理需要确保关闭代理再进行抓包。
此时就可以进行抓包了,
抓包测试
还是以该APP为例,这里再次打开APP可以发现charles直接抓到了相关域名:
可以看到其中一个请求是socket的请求,正是postern进行转发的流量。
进行请求也可以直接抓到请求包:
很好的解决了抓不到包的问题~~
二次转发联合burpsuite进行拦包
charles抓包能力强但是不能直接修改数据包,所以这里再将charles的流量转发至burpsuite,这样便能控制每一个数据包的请求了,但注意这个方法只能抓到来自http的流量,并不能抓到tcp的流量。
burpsuite设置代理
默认的127.0.0.1:8080即可,如果有修改配置也需要修改。
charles设置
找到proxy - external proxy settings
将web proxy server修改成burpsuite的代理地址,注意这里有两个选项,一个是HTTP 一个是HTTPS,两个都需要进行设置。
设置完毕后点击确认保存。
抓包
burpsuite开启拦截
模拟器发送请求,数据包成功被burpsuite抓到