使用Fiddler抓手机app数据包的时候遇到的了证书问题,导致使用Fiddler抓包的时候,手机app无法正常接受数据。
网上很多方法都无法解决。最终发现大神文章才解决了这个问题。
一.环境
操作系统:win10
抓包工具:Fiddler 4
移动端:某模拟器
二.错误过程
2.1配置Fiddler
fiddler-> tools-> Fiddler Options
点击Fiddler Options对话框的HTTPS,勾选j箭头标记的选项,进行设置允许别的机器把HTTP/HTTPS请求发送到Fiddler上来
点击Fiddler Options对话框的Connections选项,设置端口号以及箭头标记选项。
2.2配置手机
使用手机链接pc端热点。并将手机的代理设置成,ip:127.0.0.1,port:8080
2.3错误内容
这时候理论上就可以抓到手机app的数据包了,但是报了很多443,感觉应该是证书问题。
三.解决方法
3.1使用Xposed拦截系统的证书校验功能,这个网上有大神给出了hook模块代码,可以去github上搜JustTrustMe项目代码即可,就一个简单类,导入Xposed中自己编译即可:
①在移动端下载安装 JustTrustMe & xposedinstaller 之后重启移动端。。成功解决。。。。
有兴趣的同学可以去git上查看项目:
②注意物理机上安装xposedinstaller 需要root,所以我直接使用的安卓模拟器,但是安卓模拟器可能因为版本问题不支持xposed
我使用的安卓版本如下:
安装成功后效果如下:
③写爬虫代码的时候还发现一个问题,使用requests库组建请求的时候:
requests.post(url,headers = heasers,data=data,virfy=False)
requests传入报文的参数有两个,一个是data,一个是json,data对应的是python中的字典,但是这个报文格式是json格式,和一般的有些不同。
所以抓包分析的时候一定要仔细看一下是否是json格式
3.2反编译app,找到网络请求模块,因为系统默认是校验证书的,所以我们需要修改smali让其信任所有证书,一般通过连接或者全局搜HttpClient等类信息定位到地方,然后修改smali代码即可,信任所有证书的代码网上也有。(这个方法我也试了以下,但是不太懂java的代码,有移动端开发经验的可以尝试)