目录
- 简介
- 资源下载
- 正文
- Fiddler4 安装
- Fiddler4 options配置
- Fiddler4 配置证书
- 重启Fiddler 和 Chrome浏览器
- Fiddler4客户端
重置证书
- Fiddler4 手机端配置
- PC端网络IP获取
- 手机端配置证书
- Fiddler tunnel to 问题
- FiddlerScript的配置(1)
- Tunnel to 终极解决方案(2)
- VirtualXposed 与 Justtrustme配合抓包
- Fiddler 抓取不同链接的颜色显示优化
- 总结
简介
这是一篇对于Fiddler抓包比较全面的文章,包含如何解决抓包Tunnel to 脚本等
Fiddler(中文名称:小提琴)是一个HTTP的调试代理,以代理服务器的方式,监听系统的Http网络数据流动,Fiddler可以也可以让你检查所有的HTTP通讯,设置断点,以及Fiddle所有的“进出”的数据(我一般用来抓包),Fiddler还包含一个简单却功能强大的基于JScript .NET事件脚本子系统,它可以支持众多的HTTP调试任务。
Fiddler是以代理WEB服务器的形式工作的,浏览器与服务器之间通过建立TCP连接以HTTP协议进行通信,浏览器默认通过自己发送HTTP请求到服务器,它使用代理地址:127.0.0.1, 端口:8888. 当Fiddler开启会自动设置代理, 退出的时候它会自动注销代理,这样就不会影响别的程序。不过如果Fiddler非正常退出,这时候因为Fiddler没有自动注销,会造成网页无法访问。解决的办法是重新启动下Fiddler。
资源下载
若官网下载失败,可使用便捷下载地址
-
Fiddler4
-
VirtualXposed
支持32位:
virtualxposed32位优化版(虚拟框架)v1.0支持64位:
virtualxposed64位(虚拟框架)v1.0
virtualxposed64位(虚拟框架)v1.0:便捷地址 -
JustTrustMe4
justtrustme4
justtrustme4 便捷地址
Github JustTrustMe4
正文
Fiddler4 安装
(1)Fiddler官网地址:www.telerik.com/fiddler
(2)打开官网,选择经典版
下载。
对于Fiddler EveryWhere
等项没有具体使用过,根据实际情况下载选用
(3)填上邮箱,勾上协议,点击【Download For Windows】
(4)安装
根据自己需要,可以修改路径,修改后,点击【Install】,即可安装成功。
Fiddler4 options配置
(1)打开fiddler,点击 Tools > Options ==> 配置HTTPS
项
勾选如图内容
(2) Tools > Options ==> 配置Connections
点击 Connections > 在 Fiddler listens on port 中配置端口号(一般配置为8888),勾选【Allow remote computers to connect】、【Act as system proxy on startup】、【Monitor all connections】
- 配置完成,点击 OK
Fiddler4 配置证书
(1) Tools > Options > HTTPS > 点击【Actions】,选择信任根证书
- 根据提示,完成证书的安装信任即可
(2)导出证书到桌面,在PC安装证书
(3)打开Chrome浏览器
,在浏览器中导入证书
- 将之前从Fiddler中保存到桌面的证书,导入到上述位置。
重启Fiddler 和 Chrome浏览器
Fiddler4客户端 重置证书
- 至此,Chrome访问例如百度,在Fiddler4客户端就可以抓到HTTPS的包了。
- 看例图,大致界面情况
Fiddler4 手机端配置
在PC 端
配置完毕所有的工具,接下来也要配置手机端的IP、端口、安装证书、目的在一个局域网环境
PC端网络IP获取
(1)cmd 命令行获取ip地址
windows 按键 + R -> cmd 调出命令行
指令:ipconfig
(2)或者在Fiddler4客户端也可以查看
鼠标点击最右侧的三角图标,悬停在“onLine”
手机端配置证书
必须: 电脑端和手机处于同一网络下
- 手机 > settings(设置) > WLAN >进入已经连接网络的配置项
- 点击代理,选择【手动】
- 打开手机浏览器:输入 IP地址:端口号,点击
FiddlerRoot certificate
然后安装证书
- Android手机一般为通过储存空间安装,会弹起一个弹窗,凭据用途,选择为【VPN和应用】,点击确认。
Fiddler tunnel to 问题
在正常设置抓取HTTP的网络数据后,手机抓包发现请求数据出现Tunnel to 443的问题:
会出现HTTPS类型链接 “fiddler tunnel to 443或者其他tunnel to…”
- 思路
检查以上一路的配置是否正确
检查是否在同一个局域网,并且配置了证书
检查Fiddler是否配置了options 并且配置正确
若以上确认无误:
在如上设置成功过后!!仍然发现有些https请求显示Tunnel to 443!!!!
不是全部的https都显示Tunnel to 443,如果是全部,说明你上面那些步骤没有做好!!请参照上面的或者其他人的文章,把证书清理干净了重新来一遍!!!
如果部分请求出现Tunnel to 443的情况,那么继续!!
FiddlerScript的配置(1)
(1)打开 FiddlerScript
(2)选中 OnBeforeRequest
,
这一步可以快速定位到 Script
代码中的OnBeforeRequest
部分
(3)在 OnBeforeRequest
函数下面配置下述代码:
//在这个 OnBeforeRequest 方法里,这段代码放在最后一个方法大括号后边。
//解决HTTPS TUNNEL TO....
var hosts = 'zkd.me develop.dog';
FiddlerApplication.Log.LogFormat("Logger session {0}, Url: {1}, isHttps: {2}, port: {3}", oSession.id, oSession.fullUrl, oSession.isHTTPS, oSession.port);
if(hosts.indexOf(oSession.host) > -1){
FiddlerApplication.Log.LogFormat("Capture session {0}, Url: {1}, isHttps: {2}, port: {3}", oSession.id, oSession.fullUrl, oSession.isHTTPS, oSession.port);
if(oSession.HTTPMethodIs('CONNECT')){
FiddlerApplication.Log.LogString('create fake tunnel response');
oSession['x-replywithtunnel'] = 'FakeTunnel';
return;
}
if (oSession.isHTTPS){
FiddlerApplication.Log.LogString('switch https to http request');
oSession.fullUrl = oSession.fullUrl.Replace("https://","http://");
oSession.port = 80;
}
FiddlerApplication.Log.LogFormat("Processed session {0}, Url: {1}, isHttps: {2}, port: {3}", oSession.id, oSession.fullUrl, oSession.isHTTPS, oSession.port);
}
- 如果试着比较一下和别人文章里贴的这段代码,就会发现我这里少了一句。就是这一句,在遇到这个问题时被坑了一下。
<span style="font-family:'KaiTi_GB2312';font-size:16px;">static function OnBeforeRequest(oSession: Session){ </span>
注意:这一句,根本不需要。
(4)点击Save Script
,完成了设置以使其生效。
(5)重启几次Fiddler 客户端。
多重启几次fiddler,最终你会发现,所有的https请求,都完美的被抓取了!!!
- 这样配置的用意,简单一说:
hosts变量定义的域名就是我们想让Fiddler帮我们一起欺骗浏览器的域名。这段代码的作用是判断如果这些指定的域名上有从浏览器传来CONNECT的请求时,直接返回一个假的Response,这时Fiddler不会再试图去让请求的实际响应者回应这个CONNECT请求,而是自己返回了一个请求。
浏览器在收到这个请求以后不明就里,认为是服务器已经返回了安全信息,于是便愉快地继续发送请求。Fiddler在收到之后的请求,会将URL中的https替换为http,端口强制更换为80,再发给请求的实际响应者。
Fiddler 抓取不同链接的颜色显示优化
HTTP请求和HTTPS请求混在一块会看的眼花,通过脚本保存,可以让HTTP请求和HTTPS请求显示不一样的颜色。
如上,配置打开
FiddlerScript
选中OnBeforeRequest
,
这一步可以快速定位到Script
代码中的OnBeforeRequest
部分
在OnBeforeRequest
函数下面配置下述代码:
//在这个 OnBeforeRequest 方法里,这段代码放哪个位置都可。
if(oSession.isHTTPS && oSession.url.indexOf(oSession.host)> -1){
oSession["ui-color"] = "blue";
}
if(!oSession.isHTTPS && oSession.url.indexOf(oSession.host)> -1){
oSession["ui-color"] = "green";
}
Tunnel to 终极解决方案(2)
为什么会返回Tunnel to 呢,网上给的解释是安卓系统 7.0 以上的,里面有个 ssl pinning,这个东西是对客户端的证书进行验证,如果遇到不信任的证书,就会断开连接,不继续请求。所以这里使用了 VirtualXposed(框架虚拟机) + justtrustme(绕过SSL证书)
方法(软件链接已放在文章开篇头部)。
VirtualXposed 可以在非root手机上运行xposed插件。通过xposed插件做到各种操作,如:模拟定位、监听用户行为等。
VirtualXposed 是基于VirtualApp和Epic在非ROOT环境下运行Xposed模块的实现(支持5.0~10.0)
- 由于google play不允许32位应用上架,0.20之后不再支持32位应用
- 但目前还有32位资源,资源链接放在文章开头了
(x86) VirtualXposed_0.18.2.apk
(x64) VirtualXposed_0.20.3.apk
配置
(1)安装【VirtualXposed】后打开软件,若出现【图2】的弹窗,点击弹窗外部即可,点击【图3】标记位置可以打开【设置】页面。
(2)安装应用:先将插件、测试应用安装到手机上,进入【VirtualXposed】,点击【添加应用】,选择插件、测试应用,点击【安装】。弹窗中选择【VIRTUALXPOSED】,太极
的话虽然稳定,但不符合当前我们要使用的目的。
(3)激活设备:【图3】页面向上划,即可进入应用列表,点击【Xposed Installer】,进入激活页面。【图8】为激活结果。
、
(4)安装插件:在【设置】页面点击【模块管理】,勾选我们安装的插件,返回后在【设置】页面点击【重启】,如【图11】所示,此时插件已经安装完毕。
(5)日志获取:
点击【Xposed Installer】,点击左上角按钮,进入侧边栏。点击【日志】,即可看到日志数据。点击页面右上角按钮,可以选择【立即清理日志】清除之前的日志。
然后打开测试软件,再次进入日志页面,出现【图14】内容。获取到了测试包getImei的行为,点击图中按钮可以进行保存。
Fiddler与手机配合抓取
如果上述手机上抓取方式,有时候不方便的话,或者不想用上述方法,可以使用另一种方式:
- 重启之后,再打开 VirtualXposed,点击我们刚刚添加进来的APP(你要抓取的APP),操作APP就可以在电脑的fiddler抓到包了。
- 从
VirtualXposed
打开要抓取的App
总结
1.Fiddler安装与配置
2.Chrome安装证书
3.手机配置IP,PORT,安装证书
4.Tunnel to 第一种解决方式,配置Script脚本
5.Tunnel to 第二种解决方式,VirtualXposed 与 Justtrustme配合抓包
6.Fiddler显示上的优化等