https://blog.csdn.net/qq_43278826/article/details/124291040

【前言】

         众所周知,假如设备是android 7.0+的系统同时应用设置targetSdkVersion >= 24的话,那么应用默认是不信任安装的Fiddler用户证书的,所以你就没法抓到应用发起的https请求,然后你在Fiddler就会看到一堆200 HTTP Tunnel to xxx.xxx.xxx:443的请求日志,这些都是没有成功抓取的https请求,下面重点介绍一下各种解决方案,相信总有一款解决方案适合你~

【懒人快速解决篇】

下面先介绍3种懒人解决方案,适合需要快速解决https抓包问题的人挑选(Android Fiddler抓包官方操作文档点这里):
1、用android 7.0以下系统的设备去装应用,是可以正常抓包,但是一般来说,android 7.0以下不管是真机还是模拟器,运行起来都是比较卡的,能接受不那么流畅体验的用户可以尝试,适合小白型用户使用;
2、把应用apk的targetSdkVersion设置为23及以下,也是可以正常抓包,但是假如是抓别人的应用,同时别人又做了防止反编译措施的话,这个方案就不适用了;
3、在应用的res/xml目录下添加文件network_security_config.xml,设置信任用户证书,内容如下:

然后application标签下设置属性:android:networkSecurityConfig="@xml/network_security_config",这个方案也是仅适用于有android基础同时懂反编译的人员使用
【一劳永逸解决篇】

     究其根源,targetSdkVersion >= 24的应用在android 7.0+系统的设备中之所以没法被抓包,是因为android 7.0之后的应用是默认只信任系统证书,不信任用户证书,那么我们可以想办法将Fiddler证书装到系统证书目录下,伪装成系统证书,那么就不存在因为fiddler证书不被信任而无法抓包的问题了
一、 导出Fiddler证书

1、下载安装Fiddler抓包工具,下载完成之后先不要点击打开运行
2、下载fiddlercertmaker.exe这个Bouncy Castle证书生成器,因为新版本的Android拒绝超过两年有效期的证书,双击下载好的fiddlercertmaker.exe(确保已关闭Fiddler),会弹出提示导入证书成功这个对话框
在这里插入图片描述
3、将Fiddler的证书导出到电脑,点击Tools -> Options -> HTTPS -> Actions -> Export Root Certificate to Desktop
在这里插入图片描述
导出成功之后,就可以在桌面上看到导出的FiddlerRoot.cer证书文件 在这里插入图片描述
二、下载和安装openssl

1、下载Window版openssl, 点击这里打开页面,下拉到下面,选择最上面的64位EXE点击下载安装即可

在这里插入图片描述
2、安装完成之后,打开cmd命令行试试openssl命令是否生效,要是有如下输入信息,就说明安装成功:
在这里插入图片描述
三、证书格式转换与重命名

1、将Fiddler cer证书转pem证书,在cmd输入如下命令进行转换:

2、用md5方式显示pem证书的hash值, 在cmd输入如下命令:

在这里插入图片描述

从上面可以看到,咱们生成Fiddler证书的hash值是e5c3944b
3、将pem证书重命名,使用上面显示的值e5c3944b对pem证书进行重命名,以下命令仅适用于window,linux请用mv

注意:ren命令第二个参数,直接输入新的文件名即可,不要输入完整路径,否则会报错
在这里插入图片描述
四、安装证书到系统目录(/system/etc/security/cacerts)
教程一:适合有Android基础的开发者

1、找一台root过的手机或者任意一款模拟器,因为只有root过的手机才有可能执行各种高权限的命令。我这边下载了一款叫夜神android 9系统的模拟器
在这里插入图片描述
2、cmd输入adb connect 127.0.0.1:62001,使adb跟夜神模拟器连接上
3、cmd 输入adb shell,进入到夜神模拟器的终端shell中
4、cmd 输入 cd /system/etc/security, 然后输入ls -l, 可以看到cacerts目录,我们只有读与执行权限,并没有写入的权限
在这里插入图片描述
5、cmd输入chmod 777 cacerts, 让咱们对该目录拥有写入权限,执行之后,在输入ls -l可以看到我们已经获取到写入权限了
在这里插入图片描述
注意:有些小伙伴可能在其他模拟器输入chmod 777 cacerts,会被提示Read-only file system
在这里插入图片描述
这种情况需要重新挂载一下系统,设置为可读写,输入mount -o remount,rw /system,然后再输入chmod 777 cacerts,你会发现可以成功设置了
6、输入exit退出shell终端,然后输入adb push C:\Users\Administrator\Desktop\e5c3944b.0 /system/etc/security/cacerts,将事先转换好的Fiddler证书推送到夜神模拟器的/system/etc/security/cacerts目录下
在这里插入图片描述
7、到这里就已经成功的把Fiddler证书安装到系统目录了,咱们点击模拟器的设置 -> 安全性与位置信息 -> 加密与凭据 -> 信任的凭据 -> 系统,往下拉可以看到咱们的Fiddler证书在这里插入图片描述
现在再打开Fiddler进行抓包,你会发现可以成功抓包了(记得模拟器在wifi那里设置好代理)
教程二:适合没有Android基础的小白

1、找一台root过的手机或者任意一款模拟器,因为只有root过的手机才有可能执行各种高权限的命令。我这边下载了一款叫夜神android 9系统的模拟器
在这里插入图片描述
2、点击夜神模拟器侧边栏的电脑图标,选择打开电脑文件夹,会跳转打开电脑的目录C:\Users\Administrator\Nox_share,将转换好的Fiddler证书e5c3944b.0复制到ImageShare目录下即可
在这里插入图片描述
3、下载MT管理器,拖拉到模拟器中安装完成,点击打开应用,左边打开Pictures目录就可以看到刚才电脑ImageShare目录的Fiddler证书e5c3944b.0
在这里插入图片描述

4、右边点击进入到system/etc/security/cacerts目录,然后长按左边的e5c3944b.0文件,点击复制即可复制到右边打开的目录那里
在这里插入图片描述
5、一般人到这里以为就结束,但是你留意看一下刚才复制到system/etc/security/cacerts目录下的e5c3944b.0文件,你会发现跟其他已有的系统证书相比,e5c3944b.0根本就没有读的权限,到时你到信任的凭据也是没法找到这个Fiddler证书的,点击MT管理器的左上角,找到打开终端
在这里插入图片描述
6、进入到终端之后,输入以下命令将e5c3944b.0文件设置为可读即可
在这里插入图片描述
7、再看看system/etc/security/cacerts目录下e5c3944b.0文件的权限,发现确实有读权限了
在这里插入图片描述
8、咱们回到模拟器桌面,点击模拟器的设置 -> 安全性与位置信息 -> 加密与凭据 -> 信任的凭据 -> 系统,往下拉终于看到咱们的Fiddler证书,尝试一下抓包也是没问题了
在这里插入图片描述
【拓展知识】

     可能到这里有小伙伴会有疑问,系统证书是放在system/etc/security/cacerts目录下,那么假如是安装的用户证书是在保存在哪个目录下,其实就保存在data/misc/keystore目录下
在这里插入图片描述
————————————————
版权声明:本文为CSDN博主「潇曜」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43278826/article/details/124291040

Fiddler在抓取https数据包时如何解决Tunnel to 443的问题?

https://blog.csdn.net/amrenyu/article/details/80745674?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.pc_relevant_default&utm_relevant_index=2

Fiddler这款工具就不详细介绍了,网上的资料一抓一大把。

它作为抓取web和手机的数据包是一个利器。

但是对于刚刚安装好fiddler的施主们来说,打开fiddler仅仅能够抓取的是HTTP的请求----这显然是不够的!

在平常的工作中,很多产品或系统都是https的请求,没有经过设置的fiddler对于这些高难度妖精是毫无办法滴!

但是我们遇到困难也不能退缩呀,下面贫僧就给大家介绍下怎么搞定https请求!

另外文章还介绍了一个小方法,让你的fiddler请求列表看起来更清晰更漂亮。

此篇文章参考了一些其他博主,并经过贫僧亲身试验而总结出来的。因为贫僧发现其他的文章里有一些坑,会让人摸不着头脑。

---------------------------------下面是正文开始的分割线------------------------------------------
1、解决Tunnel to 443的问题

1、首先安装Fiddler

2、安装成功后,点击上访的Tools-->Options

3、分别按照下面两张图设置 HTTPS、connections两个页面。

4、点击“OK”以后Fiddler会弹出一个对话框问你是否要让Windows信任Fiddler生成的自签证书,选择“yes”以后,还会弹出一些对话框,直接“yes”或“OK”即可。

上面是抓取https请求的常规操作!!!!!基础操作!!!!!

贫僧主要想讲的不是这个,而是!在如上设置成功过后!!仍然发现有些https请求显示Tunnel to 443!!!!

不是全部的https都显示Tunnel to 443,如果是全部,说明你上面那些步骤没有做好!!请参照上面的或者其他人的文章,把证书清理干净了重新来一遍!!!

如果跟贫僧一样,是部分请求出现Tunnel to 443的情况,那么请继续往下看!!!

先简单概括一句,要加点代码在fiddler里面。

1、打开fiddler,在右侧的选项卡里找到FiddlerScript标签(没有找到该标签的施主去http://www.telerik.com/download/fiddler/fiddlerscript-editor下载安装即可)

2、点击FiddlerScript这个标签,会出现很多很多的代码。

3、这些不用管,在顶上的  Go to 的下拉列表里选择“OnBeforeRequest”。

4、下面是重点!!!拉到OnBeforeRequest方法的结尾。

这里千万千万要注意,别跟滚车轱辘似的使劲滚鼠标滚轮一下子拉到整段代码的最下面。

记住:是拉到OnBeforeRequest方法的结尾!!!

在你选择了“OnBeforeRequest”这个选项时,整个页面会自动定位到这个方法的开始之处!

如图

慢慢往下拉,别太快了,拉到这个方法的最后就停下来。

5、上面这个位置一定要找准!!!找准地方后,在这个方法的最后一个大括号后面,插入以下代码。

     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);
            }
            FiddlerApplication.Log.LogFormat("Logger 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>

这一句,根本不需要。

6、点击头上的“Save Script”,就完成了设置。

假如你这段代码粘贴的不对,它会有提示的,比如什么“仅在类定义内有效”啊等等,如果出现,请检查粘贴位置、大括号什么的。

hosts变量定义的域名就是我们想让Fiddler帮我们一起欺骗浏览器的域名。

这段代码的作用是判断如果这些指定的域名上有从浏览器传来CONNECT的请求时,直接返回一个假的Response,这时Fiddler不会再试图去让请求的实际响应者回应这个CONNECT请求,而是自己返回了一个请求。

浏览器在收到这个请求以后不明就里,认为是服务器已经返回了安全信息,于是便愉快地继续发送请求。Fiddler在收到之后的请求,会将URL中的https替换为http,端口强制更换为80,再发给请求的实际响应者。

7、多重启几次fiddler,最终你会发现,所有的https请求,都完美的被抓取了!!!阿弥陀佛~

2、如何让HTTP请求和HTTPS请求显示不一样的颜色?

另外给大家介绍个小姑娘,啊,不,小功能。

HTTP请求和HTTPS请求混在一块会看的眼花,我们可以小小的设置一下,让HTTP请求和HTTPS请求显示不一样的颜色。

步骤:

1-3步和上面解决443接口的步骤一样。

4、找到 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";  
            }

这段代码随便放哪,只要在这个方法里就行了。贫僧是把它放在最前面的。

5、保存。

之后,你就会发现HTTP请求和HTTPS请求被漂亮的分开啦!

最后附上参考文章:

https://blog.csdn.net/xpf094/article/details/79526633

https://www.cnblogs.com/hushaojun/p/6424674.html

————————————————
版权声明:本文为CSDN博主「花果山来的和尚」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/amrenyu/article/details/80745674

Android 7.0+模拟器Fiddler抓包详细教程 fiddler443问题解决办法的更多相关文章

  1. Fiddler抓包使用教程-安装配置

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/72876628 本文出自[赵彦军的博客] Fiddler是什么? Fiddler是一 ...

  2. fiddler抓包工具教程

    Fiddler是一个蛮好用的抓包工具,可以将网络传输发送与接受的数据包进行截获.重发.编辑.转存等操作.也可以用来检测网络安全.反正好处多多,举之不尽呀!当年学习的时候也蛮费劲,一些蛮实用隐藏的小功能 ...

  3. Fiddler抓包使用教程-过滤

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/72929800 本文出自[赵彦军的博客] Fiddler抓包可以完成我们移动开发者的 ...

  4. Fiddler抓包使用教程-会话图标

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/72933882 本文出自[赵彦军的博客] 使用fiddler抓包时,会看到左侧按照顺 ...

  5. Fiddler安卓抓包详细教程

    电脑端抓包一般图方便就用浏览器自带的,最近需要分析安卓一个APP的HTTP请求,尝试了wireshark(功能太强大了,然而我并不会用),tcpdump(用起来还是比较麻烦),网上搜了一下,还是使用F ...

  6. 不安装证书如何通过模拟器+Fiddler抓包APP的HTTPS请求?

    模拟器抓取https方法 说明:为了解决安卓手线上不能抓取https请求,以下整理通过模拟器抓取https请求方法如下:前置条件:安卓模拟器:夜神抓包工具:Fiddler汉化中文升级版1无需FIDDL ...

  7. Fiddler抓包使用教程-Android应用抓包

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/74439165 本文出自[赵彦军的博客] Fiddler 也可以支持对手机应用进行 ...

  8. Android/IOS手机使用Fiddler抓包

    对于Android和IOS开发及测试的同事来说抓包是一个很重要的事,有利于排查问题所在,快速定位问题.但长期以来一直没有一款可以快速抓包的工具,直到有了Fiddler2. 使用步骤: 1.  Fidd ...

  9. Fiddler抓包使用教程-扫盲篇

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/72823370 本文出自[赵彦军的博客] 1.什么是抓包? 不同主机之间的数据通信都 ...

  10. Fiddler抓包使用教程-Https

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/72956016 本文出自[赵彦军的博客] 开启 Https 抓包 Fiddler 默 ...

随机推荐

  1. 【机器学习】李宏毅——AE自编码器(Auto-encoder)

    1.What 在自编码器中,有两个神经网络,分别为Encoder和Decoder,其任务分别是: Encoder:将读入的原始数据(图像.文字等)转换为一个向量 Decoder:将上述的向量还原成原始 ...

  2. CTFshow——funnyrsa1的wp理解

    题目如下: 题目分析: 拿到题,发现给的e不常规,p1和p2相等,有两个不同n,两个不同c和两个不同e.给定两个密文的情况下,通常需要找到两者之间存在的关系,"合并"密文求解才能得 ...

  3. Service层和Dao层的一些自我理解(╥╯^╰╥)(╥╯^╰╥)(学了这么久,这玩意儿似懂非懂的)

    学习java已经有很长时间了,但由于是在学校学的,基础不怎么扎实. 这几个月系统的学习,弥补了很多的缺陷,虽然大多数时间都在弄算法(咳咳),我前面的博客有写 如果有认真看过我代码的朋友会发现,我其实英 ...

  4. Fast RCNN论文阅读笔记

    1.Introduction 1.1 RCNN 和SPPnet RCNN有几个显著的问题:1.训练的时候是多阶段的训练,分别分三个阶段训练卷积层.SVM.边框回归矩阵.2.训练很耗时.3.目标定位非常 ...

  5. VS2019注册码

    Visual Studio 2019 Enterprise BF8Y8-GN2QH-T84XB-QVY3B-RC4DF Visual Studio 2019 Professional NYWVH-HT ...

  6. Java long类型转换易犯的错误

    记一个刷题过程中遇到的溢出问题. 在做这道题的时候遇到一个与 long 类型有关的溢出错误. 原始代码如下 class Solution { public int numberOfPairs(int[ ...

  7. 图文并茂基于阿里云linux服务器部署nodejs项目并添加pm2守护nodejs项目运行进程(Linux version 4.19.81-17.1.al7.x86_64)

    首先你要有一台LINIX服务器,登入以后按下面步骤执行命令,可查看系统版本以及配置 查看Linux 内核 通过 uname -a 命令查看系统位数是64位 x86_64表示64位系统, i686 i3 ...

  8. flutter报错The type of the function literal can't be inferred because the literal has a block as its body.A value of type 'String?' can't be assigned to a variable of type 'String'.

    flutter有一些报错如下 The type of the function literal can't be inferred because the literal has a block as ...

  9. 关于VBA中,activesheet用法的一些思考

    前二天,给财务部做了个数据采集的工具,因为财务现在用的是excel2013 和2017的版本,所以我决定不用python,改用VBA来处理这个工具. 在 写过程的时候,我用了sheets(i)来定位表 ...

  10. SpringBoot 三大开发工具,你都用过么?

    本文已经收录到Github仓库,该仓库包含计算机基础.Java基础.多线程.JVM.数据库.Redis.Spring.Mybatis.SpringMVC.SpringBoot.分布式.微服务.设计模式 ...