http(S)系列之(四):Fiddler手机客户端抓包以及android7.0以上手机无法抓取https解决办法

骚聊:

感慨时间不够用,给我一天48小时就好了,感慨精力有限,让我一天干12小时都不带累的就好了…。之前我老婆还和我说,娃儿如果可以一下子就长大就好了,我们能把理想一下子都实现就好了,我想了想感觉心好慌,如果是那样,人生还需要几十年寿命么,人生的意义又是什么!!!起码现在我很享受目前的生活。

人生最重要的还是方向,坚定不移的方向。

愿世界多一点理智,理性!!阿弥陀佛,善哉!

参考文章

本人安卓开发的,所以首选Fiddler手机抓包,如果是抓取网页数据,工具应该更多,自行谷歌

Fiddler - 实现手机抓包

http安全找了2天, 目前为止本人没有能力去非常深入探讨该技术,到时找了些书籍,如果有兴趣的或者外语还可以的都可以自己去学习,我后面会学习总结的,如果有可能也会写文章的。

2020年必看的国外最佳黑客书籍

《黑客攻防实战案例解析》自己谷歌下载PDF

前言

如果你是一名前端开发或者测试人员,那么fiddler绝对是最值得掌握的工具之一。fiddler是最强大的web调试工具之一,他能记录所有客户端和服务器的http/https请求以及响应,允许你监视,允许你设置断点调试,甚至篡改请求和响应。

一、Fiddler的工作原理

Fiddler在浏览器与服务器之间建立一个代理服务器。Fiddler 是以代理web服务器的形式工作的,它使用代理地址:127.0.0.1, 端口:8888. 当Fiddler退出的时候它会自动注销,这样就不会影响别的程序。
http(S)系列之(四):Fiddler手机客户端抓包以及android7.0以上手机无法抓取https解决办法_第1张图片

代理详细图解:
http(S)系列之(四):Fiddler手机客户端抓包以及android7.0以上手机无法抓取https解决办法_第2张图片

二、Fiddler的使用场景

1、开发环境的host配置;
2、前后端接口联调;
3、定位线上bug——将发布文件代理到本地,快速定位线上bug;
4、性能分析和优化——Inspectors 、Timeline;

三、Fiddler的安装及配置

fiddler没有手机客户端,都是安装在PC上,要实现对手机上的程序抓包,则需要对PC上的fiddler和手机端做一些配置。步骤如下:

前提条件:
1).测试手机需要支持Wifi
2).测试手机与电脑需要同一网络

(1)电脑下载Fiddler
官网: http://www.telerik.com/feddler
下载地址: https://www.telerik.com/download/fiddler
http(S)系列之(四):Fiddler手机客户端抓包以及android7.0以上手机无法抓取https解决办法_第3张图片
(2) PC端Fiddler配置

允许监听https

打开Fiddler Tool->Fiddler Options->HTTPS 。

勾选上Capture HTTPS CONNECTs(捕获 HTTPS 连接)(由于我们只抓手机的,所以这里选择 from remote clients only)、 Decrypt HTTPS traffic (HTTPS 请求解密)和 ignore server certificate errors(忽略服务器证书错误)
http(S)系列之(四):Fiddler手机客户端抓包以及android7.0以上手机无法抓取https解决办法_第4张图片

安装证书(首次使用无证书,会弹出是否信任fiddler证书和安全提示,直接点击yes就行),重启Fiddler生效。

http(S)系列之(四):Fiddler手机客户端抓包以及android7.0以上手机无法抓取https解决办法_第5张图片
注意:

有时候没有弹窗安装证书或根本就没有提示,这种情况一般在Win7中较多出现,Win7的系统https方面 在.net Framework4.0上有bug

解决方案是:

cd D:\tools\fiddler //fiddler的安装目录

然后执行以下命令

makecert.exe -r -ss my -n “CN=DO_NOT_TRUST_FiddlerRoot, O=DO_NOT_TRUST, OU=Created by http://www.fiddler2.com” -sky signature -eku 1.3.6.1.5.5.7.3.1 -h 1 -cy authority -a sha1 -m 120 -b 22/11/2020

注意:这个命令最后的日期 22/11/2020 一定要大于现在的日期 否则创建证书是过期的

这样执行完之后 再去重新配置一次 就可以正确安装证书了。

允许手机远程连接

点击 Fiddler->Tools -> Options,在 Connections 面板选中 Allow remote computers to connect 允许其他设备连接(此操作需重启Fiddler生效)。

“fiddler listens on port:”默认为8888,如你本机电脑的端口8888已被占用,那填写一个未被占用的端口
http(S)系列之(四):Fiddler手机客户端抓包以及android7.0以上手机无法抓取https解决办法_第6张图片
查看电脑ip地址
通过cmd命令行输入ipconfig查询
http(S)系列之(四):Fiddler手机客户端抓包以及android7.0以上手机无法抓取https解决办法_第7张图片
或者将鼠标置于fiddler右上角的online中即可显示电脑的ip地址:
http(S)系列之(四):Fiddler手机客户端抓包以及android7.0以上手机无法抓取https解决办法_第8张图片
(3) 安卓端配置

给fiddler安装certmaker插件
由于默认的证书不符合android和ios的证书要求,所以,需要下载certmaker插件,双击安装后,重启fiddler。注意这一步很重要,必须使用certmaker插件,不要使用默认的证书生成器,否则抓不到包。
http(S)系列之(四):Fiddler手机客户端抓包以及android7.0以上手机无法抓取https解决办法_第9张图片

将 Fiddler 代理服务器的证书导到手机上才能抓这些 APP 的包。

导入的过程:打开浏览器,在地址栏中输入代理服务器的 IP 和端口(即电脑的IP加fiddler的端口),会看到一个Fiddler 提供的页面,然后确定安装就好了
http(S)系列之(四):Fiddler手机客户端抓包以及android7.0以上手机无法抓取https解决办法_第10张图片
http(S)系列之(四):Fiddler手机客户端抓包以及android7.0以上手机无法抓取https解决办法_第11张图片
打开手机的 设置 —> WlAN ,选择连接的wifi(必须保证PC端与移动端在同一个网段中)。

长按该wifi,然后选择“修改网络”,然后勾选“显示高级选项”,选择手动代理设置,主机名填写Fiddler所在电脑的ip,端口填写Fiddler端口,默认8888,保存即可。

http(S)系列之(四):Fiddler手机客户端抓包以及android7.0以上手机无法抓取https解决办法_第12张图片
配置完发现手机浏览器其他网址不可上网,可以在“对以下网址绕过代理” 处填写相关网址 及可对相关网址上网

(4)iphone配置
1.将无线局域网处于和Fiddler所在工具的电脑同一网段;点击感叹号

http(S)系列之(四):Fiddler手机客户端抓包以及android7.0以上手机无法抓取https解决办法_第13张图片
2.然后滑动到页面最下方,点击“配置代理”,配置代理默认是关闭的。
http(S)系列之(四):Fiddler手机客户端抓包以及android7.0以上手机无法抓取https解决办法_第14张图片

3.安装证书

在 Safair 浏览器中打开 电脑ip:8888,例如“192.168.1.1:8888”。

点击圈出来的链接安装证书
http(S)系列之(四):Fiddler手机客户端抓包以及android7.0以上手机无法抓取https解决办法_第15张图片
点击描述文件
http(S)系列之(四):Fiddler手机客户端抓包以及android7.0以上手机无法抓取https解决办法_第16张图片
点击信任此证书:
http(S)系列之(四):Fiddler手机客户端抓包以及android7.0以上手机无法抓取https解决办法_第17张图片
以上就ok了

四.Android 7.0以上手机无法抓取HTTPS:

参考来自Android平台HTTPS抓包解决方案及问题分析

Android从7.0开始系统不再信任用户CA证书(应用targetSdkVersion >= 24时生效,如果targetSdkVersion < 24即使系统是7.0+依然会信任)。也就是说即使安装了用户CA证书,在Android 7.0+的机器上,targetSdkVersion >= 24的应用的HTTPS包就抓不到了。

那么,我们如果绕过这种限制呢?已知有以下四种方式(低于7.0的系统请忽略):

1 AndroidManifest中配置networkSecurityConfig

如果我们想抓自己的App,只需要在AndroidManifest中配置networkSecurityConfig即可:

<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
    <application android:networkSecurityConfig="@xml/network_security_config"
                    ... >
        ...
    </application>
</manifest>

network_security_config.xml:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
            <certificates src="user" />
        </trust-anchors>
    </base-config>
</network-security-config>

但是这么做仅仅是针对自己的项目,而且作为项目负责人来说肯定尽可能希望自己的app不被人抓取信息

2 调低targetSdkVersion < 24

同样的道理,针对自己的项目可以更改

3 平行空间抓包(推荐)

如果我们希望抓targetSdkVersion >= 24的应用的包,那又该怎么办呢?我们可以使用平行空间或者VirtualApp来曲线救国。平行空间和VirtualApp这种多开应用可以作为宿主系统来运行其它应用,如果平行空间和VirtualApp的targetSdkVersion < 24,那么问题也就解决了。

在此,我推荐使用平行空间,相比部分开源的VirtualApp,平行空间运行得更加稳定。但必须注意平行空间的版本4.0.8625以下才是targetSdkVersion < 24,别安装错了。当然,HttpCanary的设置中是可以直接安装平行空间的。

4 安装到系统CA证书目录

对于Root的机器,这是最完美最佳的解决方案。如果把CA证书安装到系统CA证书目录中,那这个假CA证书就是真正洗白了,不是真的也是真的了。由于系统CA证书格式都是特殊的.0格式,我们必须将抓包工具内置的CA证书以这种格式导出,HttpCanary直接提供了这种导出选项。

操作路径:设置 -> SSL证书设置 -> 导出HttpCanary根证书 -> System Trusted(.0)

http(S)系列之(四):Fiddler手机客户端抓包以及android7.0以上手机无法抓取https解决办法_第18张图片
PS. 很不幸的HttpCanary v2.8.0前导出的证书名称可能不正确,建议升级到v2.8.0以上版本操作。
导出.0格式的证书后,可以使用MT管理器将.0文件复制到/etc/security/cacerts/目录下,或者通过adb remount然后push也可(这里稍微提一下,别在sdcard里找这个目录)。

五、Fiddler的使用

视图功能区域

会话的概念:一次请求和一次响应就是一个会话。

fiddler主界面如下:http(S)系列之(四):Fiddler手机客户端抓包以及android7.0以上手机无法抓取https解决办法_第19张图片
快捷功能区中常用几项解释
在这里插入图片描述
快捷功能区:

1:给会话添加备注信息

2:重新加载当前会话

3:删除会话选项

4:放行,和断点对应,后面详细讲解

5:响应模式。也即是,当Fiddler拿到远程的response后是缓存起来一次响应给客户端还是以stream的方式直接响应。

6:解码。有些请求是被编码的,点击这个按钮后可以根据响应的编码格式自动解码。

7:查找会话。

8:保存会话。

9:截屏。截屏后,会以会话的方式返回一个截图。

会话列表
http(S)系列之(四):Fiddler手机客户端抓包以及android7.0以上手机无法抓取https解决办法_第20张图片
http(S)系列之(四):Fiddler手机客户端抓包以及android7.0以上手机无法抓取https解决办法_第21张图片
#栏图标说明

http(S)系列之(四):Fiddler手机客户端抓包以及android7.0以上手机无法抓取https解决办法_第22张图片

六 手机抓取http(s)数据

这里列举两个栗子,一个是美团v7.5.1版本,一个是自己的项目。并不是说自己的项目多么优秀,但是针对http数据加密我还是比较满意的,起码是参照SSL/TLS中的密钥生成以及数据加密思路来的,相对来说比较难破译,美团最新的版本我也看了,大家感兴趣可以去看看

美团V7.5.1的登录

1.请求的会话:
在这里插入图片描述

2.请求携带的数据
这里看到了,输入的密码压根就没有加密(我也是醉了,最新的没有这个问题,但是也是一样的,这些信息一目了然可以看到)
在这里插入图片描述
3.响应的数据

http(S)系列之(四):Fiddler手机客户端抓包以及android7.0以上手机无法抓取https解决办法_第23张图片
如果按照以上的结局来看,只要我能监听到对方的请求(对黑客来说应该不是难事,尤其是安卓手机),我就完全可以获取到对方的登录用户名和密码

我们的项目
1.会话列表
在这里插入图片描述

2.发送的请求
http(S)系列之(四):Fiddler手机客户端抓包以及android7.0以上手机无法抓取https解决办法_第24张图片
3.相应的数据

http(S)系列之(四):Fiddler手机客户端抓包以及android7.0以上手机无法抓取https解决办法_第25张图片
这边我们的项目有个特点,即使请求的用户名和密码是相同的,但是每次请求的data以及响应的数据都是不同的,因为密钥每次都是请求都是唯一的。

七 抓包信息篡改、冒充

参考文献:接口测试之——fiddler抓包、过滤、断点调试

1.Fiddler 过滤功能
Fiddler过滤不是重点,这里随便提一下,感兴趣可以去以上参考文献详细查看
http(S)系列之(四):Fiddler手机客户端抓包以及android7.0以上手机无法抓取https解决办法_第26张图片

2.冒充和篡改报文

冒充表示请求携带参数更改

篡改是针对响应的数据进行篡改
命令行输入:bpu api.xxx.xxx/user/login ,点击enter
在这里插入图片描述
然后点击登录按钮,出现如下,前面有个T 的红色小图标表示被打了断点
在这里插入图片描述
如下图所示,请求携带参数:这里的data,tm,ver都可改,
http(S)系列之(四):Fiddler手机客户端抓包以及android7.0以上手机无法抓取https解决办法_第27张图片
这是响应并没有及时反馈给app,而是被截留:首先点击①,会先在TextView面板中出现响应数据,然后就可以针对②响应数据进行更改,在点击③按钮,表示数据提交给了app客户端

http(S)系列之(四):Fiddler手机客户端抓包以及android7.0以上手机无法抓取https解决办法_第28张图片
注:以上https表示未进过SSL/TLS认证的,如果进过SSL认证也是请求不到的,如下图所示

http(S)系列之(四):Fiddler手机客户端抓包以及android7.0以上手机无法抓取https解决办法_第29张图片

八 延伸

其实也可以不需要再手机上设置代理,只要在同一wifi下即可抓取当下wifi下的流量包

新思路:直接让路由器连接代理,路由设备就会走代理服务器,然后直接对代理服务器使用fiddler或其他抓包工具进行抓包即可

可参考如下内容:
通过Proxifier、V2ray和Newwifi捕获任意的http和https流量

你可能感兴趣的:(http(s)网络请求系列,java)