100天精通Andriod逆向——第4天:各种抓包工具学习

Posted Amo Xiang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了100天精通Andriod逆向——第4天:各种抓包工具学习相关的知识,希望对你有一定的参考价值。

目录


大部分 App 使用的数据通信协议也是基于 HTTP/HTTPS 的,App 内部一些页面交互和数据通信的背后也都有对应的 API 来处理,例如某个页面呈现的数据几乎都来源于某个 API。其基本过程可以类比网页中的 Ajax 请求和数据渲染,其基本过程是 App 向服务器发起一个 HTTP/HTTPS 请求,然后接收并解析服务器的响应内容,之后将得到的数据呈现出来。

在网页中,我们可以借助浏览器开发者工具中的 Network 面板看到网页中产生的所有网络请求和响应内容,然而 App 怎么办呢?要想拦截 App 中的网络请求,就得用到抓包工具了,例如:Charles、Fiddler、mitmproxy 等,我们可以通过这些工具拦截 App 和 API 通信的请求内容和响应内容,如果能从中找到一定的规律,就可以用程序直接构造请求来模拟 API 的请求,从而完成数据爬取。

一、抓包工具的分类

  1. 全局抓包工具:Http v7、Http debugger pro 用来抓电脑中程序中发出去的包 比如:Java语言发出的包
  2. 代理抓包工具:Charles、Fiddler 客户端 — 代理服务 — 服务端
  3. VPN抓包工具:HttpCanary(手机抓包工具) 和代理抓包工具差不多 能抓更多的包
  4. 网卡抓包工具:WireShark(鲨鱼) 用来抓网卡发出去的包,更加底层
  5. 手机抓包工具:tcpdump 一般不怎么用
  6. Hook抓包工具:r0Capture Hook Andriod 系统中的一些关键函数

二、Charles 抓包工具的使用

2.1 Charles 工具的下载与安装

可以实现 App 抓包的工具有很多,例如, Charles、Fiddler、mitmproxy 等。不过从性能的角度来讲,Charles 的功能更加强大一些。Charles 抓包工具是收费软件,但可以免费试用 30 天。点击 此处 打开 Charles工具的官方下载页面,Charles 是一个跨平台网络抓包工具,支持 Windows、Mac 和 Linux 平台,读者可以根据自己的操作系统下载对应的版本即可。这里以 Windows 系统为例进行演示,如下图所示:

下载完成后,本地磁盘中将出现名称为 charles-proxy-4.6.2-win64.msi 的安装文件,如下图所示:

双击该文件将显示下图所示的欢迎对话框,在该对话框中直接单击 Next 按钮:

在 End-User License Agreement(最终用户许可证协议) 中,勾选 I accept the terms in the License Agreement 同意协议,然后单击 Next 按钮。如下图所示:

在弹出的 Destination Folder 对话框中,选择自己需要安装的路径,然后单击 Next 按钮,如下图所示:

在 Ready to install Charles (准备安装) 对话框中,直接单击 Install 按钮,如下图所示:

点击 Install 按钮之后,可能会弹出如下图所示的框,直接选是就可以了:

安装完成以后将显示下图所示的对话框,在该对话框中直接单击 Finish 按钮即可:

2.2 SSL 证书的安装

2.2.1 安装 PC 端证书

Charles 工具安装完成以后,在菜单中部或底部的搜索位置找到 Charles 启动图标,启动 Charles 工具。Charles 启动后将默认获取当前 PC 端所有网络请求,例如,自动获取 PC 端浏览器中访问的 CSDN 主页,不过在查看请求内容时,将显示下图所示的乱码信息:

说明:在默认的情况下 Charles 是可以获取 PC 端的网络请求的。

目前的网页多数都是使用 HTTPS 与服务端进行数据交互,而通过 HTTPS 传输的数据都是加密的,此时通过 Charles 所获取到的信息也都是乱码,需要安装 PC 端 SSL 证书。安装 PC 端 SSL 证书的具体步骤如下:

(1) 打开 Charles 工具,依次选择 Help ⇒ SSL Proxying ⇒ Install Charles Root Certificate 菜单项打开安装 SSL 证书对话框,如下图所示:

(2) 在已经打开的安装 SSL 证书对话框中,单击 安装证书 按钮,然后在证书导入向导对话框中直接单击 下一步 按钮,如下图所示:

(3) 打开证书向导的 证书存储 对话框,在该对话框中首先选择 将所有的证书都放入下列存储 选项,然后单击 浏览 按钮,选择证书的存储位置为 受信任的根证书颁发机构,再单击 确定 按钮,最后单击 下一步 按钮即可。如下图所示:

(4) 在证书导入向导的 正在完成证书导入向导 的对话框中,直接单击 完成 按钮,如下图所示:

(5) 在弹出的安全警告框中单击 按钮,如下图所示,即可完成 SSL 证书的安装。

(6) 在 导入成功 的提示对话框中单击 确定 按钮,然后在安装证书的对话框中单击 确定 按钮,如下图所示:

2.2.2 设置代理

PC 端的 SSL 证书安装完成以后,在获取请求详情内容时依然显示乱码。此时还需要设置 SSL 代理,设置 SSL 代理的具体步骤如下:

在 Charles 工具中,依次选择 Proxy ⇒ SSL Proxying Settings 菜单项,在 SSL Proxying 选项卡当中勾选 Enable SSL Proxying 复选框,然后单击左侧 Include 下面对应的 Add 按钮,在 Edit Location 窗口中设置指定代理,如果没有代理的情况下可以将其设置为 * (表示所有的 SSL) 即可,如下图所示:


SSL 代理设置完成以后,重新启动 Charles,再次打开浏览器中的百度网页,单击左侧目录中的 / 将显示下图所示的详细内容:

2.2.3 设置 SOCKS proxy

在 Charles 工具中,依次选择 Proxy ⇒ Proxy Settings... 菜单项,如下图所示:

在弹出的窗口中进行设置,如下图所示:

2.2.4 socksdroid 的安装与配置

手机抓包注意事项:

  1. 手机和电脑在同一个电脑网段下
  2. 电脑能够 ping 通手机
  3. 手机能够 ping 通电脑
  4. 电脑和手机 ping 不通,查看文章 https://blog.csdn.net/xw1680/article/details/126181882 还不行,可以查看下路由器的一些设置,比如 ap隔离、错连到访客网络等。

socksdroid 软件下载链接:

链接:https://pan.baidu.com/s/1_7xlzrtMUYpgI7O8n711zg 
提取码:utif 
--来自百度网盘超级会员V8的分享

使用 adb 安装 socksdroid,如下图所示:

安装好了之后可以在手机端查看,接着打开 SocksDroid,如下图所示:

Connection 这一栏填入本机ip和 Charles 上设置的代理 port,本机ip查看如下图所示:


Charles 上设置的代理 port 如下图所示:

在 SocksDroid 中 Connection 栏填入上述的两个数据,如下图所示:

右上角打开 VPN,在弹出的对话框中点击确定即可,如下图所示:

之后会在 Charles 中弹出下框,点击 Allow 即可,如下图所示:

设置完成之后,在手机浏览器中打开百度首页,发下有如下错误:

在 Charles 中点击 Help,查看提示,如下图所示:


我这个手机在输入网站进入到证书下载页面之后,就没了动静,所以我先在 Charles 中导出证书,然后推到手机上去,Charles 导出证书如下图所示:

另存为在桌面,如下图所示:

使用 adb 命令进行推送:adb push C:\\Users\\AmoXiang\\Desktop\\charles.pem /sdcard/

接着在手机中安装证书,操作步骤如下:设置 --》安全 --》加密与凭据 --》从存储设备安装 --》



这样的话,证书就已经安装完成,接着我们打开手机浏览器,输入百度网址,如下图所示:

可以看到是能正常访问网页的,并且在 Charles 中,我们也能抓到对应的包,并且能正常解析。
查看证书安装的位置,查看路径:设置 --》安全 --》加密与凭据 --》信任的凭据,如下图所示:

安卓7以后系统只信任系统证书,需要把用户证书移动到系统证书目录
系统证书路径:/etc/security/cacerts
用户证书路径:/data/misc/user/0/cacerts-added

利用 Magisk 的 Move Certificates 模块,来移动证书。首先打开 Magisk,切换到模块,如下图所示:

注意:由于最新版本的 Magisk 在我手机上没有找到安装模块的位置(在线也没有刷出来,可能是由于网络原因),所以我重新安装了 Magisk-v23.0.apk

切换到模块之后,单击搜索按钮,按名称进行过滤,如下图所示:




安装好了之后,重启即可。再次进入信任的凭据中查看,发现刚刚安装的 Charles 证书已经在里面了,如下图所示:

注意:在下载安装 Move_Certificates-v1.9 时候,切记关掉代理,否则会下载失败,关闭后,还下载失败可以切换网络或者重启手机进行尝试。再不行,你可以试着从本地进行安装,Move_Certificates-v1.9.zip 安装包地址:

链接:https://pan.baidu.com/s/1CPa1m8maSAX6_T8JM_UVTQ 
提取码:rb1p 
--来自百度网盘超级会员V8的分享

2.2.5 常见无法解密 SSL 的原因

  1. 每个抓包工具导出的根证书是不一样的,不要使用别人发你的证书
  2. 证书没有放入到系统证书目录
  3. 使用了模拟器产生的问题:雷电4的代理问题、CPU平台不一样导致的问题等

2.3 Charles 的基本使用

确保已经正确安装好 Charles 并开启了代理服务。然后准备一步 android 手机或模拟器(系统版本最好在7.0以下,我用的是 Andriod10),并让手机或模拟器的网络和 Charles 所在电脑的网络处于同一个局域网下(可以让模拟器通过虚拟网络与电脑连接,也可以让手机真机和电脑连接同一个 Wi-FI) 。之后设置好 Charles 代理和 Charles CA 证书,在 Charles 中开启 SSL 监听,整个配置过程可以参考上一小节。另外需在手机上安装示例 App,安装包下载地址为:

链接:https://pan.baidu.com/s/1X9ewiyUSor4hjKe0hhRkhg 
提取码:8hs5 
--来自百度网盘超级会员V8的分享

抓包原理: 设置手机代理为 Charles 的代理服务的地址,这样手机访问互联网的数据包就会先流经 Charles,再由 Charles 转发给真正的服务器;同样,服务器返回的数据包会先到达 Charles,再由 Charles 转发给手机。整个过程中的 Charles 相当于中间人,可以捕获所有数据包,意味着可以捕获所有请求内容和响应内容。不仅如此,Charles 还可以对请求内容和响应内容做修改。

打开 Charles,初始运行界面如下图所示:

Charles 会一直监听手机产生的数据包,捕获的数据包将显示在界面左侧,随着时间的推移,会捕获越来越多的数据包,左侧列表里的内容也将会越来越多。

打开手机上下载的 app1,其界面如下图所示:

会发现 Charles 已经捕获了对应的数据包,其界面如下图所示(注意一定要提前设置好 Charles 代理以及 Charles CA 证书,否则没有效果)。

在 app1 里不断上拉,Charles 会捕获这个过程中产生的所有网络请求,下图中左侧的列表展示了捕获的数据包。

点击上述链接下的一个条目,切换到 Contents 选项卡,查看其详情。此时界面右侧下方会显示一些 JSON 数据,其中有一个 results 字段,该字段中每一个条目的 name 值是一个电影的名称,这些名称与 app1 中的电影一一对应,如下图所示:

至此可以确定,https://app1.scrape.center 对应的接口就是获取电影数据的接口。这样我们就成功捕获了在上拉刷新过程中产生的请求内容和响应内容。

分析: 现在分析一下捕获的请求内容和响应内容的详细信息。首先回到 Overview 选项卡,界面右侧的上方显示了请求 URL、响应状态码 Response Code 和请求方法 Method 等信息,如下图所示,这些内容和在网页中用浏览器开发者工具捕获的内容是类似的。

接下来点击 Contents 选项卡,查看请求内容和响应内容的详情,界面如下图所示。上半部分显示的是请求的信息,下半部分显示的是响应信息。切换到 Headers 选项卡即可看到请求头,切换到 JSON Text 选项卡即可看到响应体,并且响应体的内容已经被格式化。

由于这个请求是 GET 请求,因此还需要关心 GET 的参数信息,切换到 Query String 选项卡即可查看,如图所示:

对于其他 App,同样可以使用本节的分析方式。如果能直接分析出请求URL和参数的规律,就可以直接模拟发出请求实现数据的批量抓取。

Charles还有一个强大功能,是可以对捕获的请求内容加以修改并把修改后的请求发送出去。点击界面右侧上方的修改按钮,左侧列表就会出现一个以编辑图标为开头的接口,代表我们正在修改此接口对应的请求,如下图所示:

可以修改请求参数中的某个字段,例如这里将 offset 字段的值由0修改为10,如下图所示,然后点击界面下方的 Execute 按钮即可发送修改后的请求。

可以发现左侧列表出现了对应的请求结果,点击 Contents 选项卡,查看响应内容,这次返回的是第2个列表页中的电影信息,如下图所示:

有了重发功能,就可以方便地使用 Charles 做调试了,可以通过修改参数、接口等测试不同请求的响应状态,从而知道哪些参数必要和哪些不必要,以及参数分别有规律,最后抽象出一个最简单的接口供模拟使用。

修改响应内容: 除了修改请求内容,Charles 还可以修改响应内容,例如将响应内容修改为本地或远程的某个文件,这样就可以实现数据的修改和伪造了。右击任意一个请求,可以看到出现的菜单有 Map Remote 和 Map Local 这两个选项,通过这两个选项就可以将响应内容修改为远程或本地的文件,如下图所示:

以生成本地文件为例,先把当前的响应内容,也就是 JSON Text 的内容复制下来,保存成本地文件,文件名是 data.json,然后修改其中的字段值,例如将第一个条目的 name 值修改为 霸王别姬2,并保存修改,如下图所示:

再在 Map Local 的配置中,选定 data.json 文件的保存路径,如下图所示:

这样,我们就把 app1 的第一个请求------加载列表页成功修改成本地文件 data.json 中的内容了。接下来重新启动 app1,界面如下图所示:

可以发现,第一个电影的名称变成了 霸王别姬2,我们成功修改了响应内容。可以把前面所讲的 重发 和这个过程称为中间人攻击,Charles 就相当于中间人,它可以拦截请求内容和响应内容,并对这些内容进行修改,而手机端完全无感。

模拟爬取: 现在我们已经成功完成了抓包操作,app1 发出的所有请求一一目了然,请求URL就是 https://app1.scrape.center/api/movie/,后面跟着两个请求参数 offset 和 limit。显然,offset 就是偏移量,limit 就是一次的返回结果中包含的条目数量。例如 offset 为20,limit 为10,代表返回第21~30条电影的信息。另外,通过观察可以发现一共有100个电影,因此 offset 取0、10、20、…、90,limit 则恒为10。接下来我们用 Python 简单模拟一下请求,这里写法有一些从简,代码如下:

import requests

BASE_URL = "https://app1.scrape.center/api/movie/?offset=offset&limit=10"
for i in range(0, 10):
    offset = i * 10
    url = BASE_URL.format(offset=offset)
    data = requests.get(url).json()
    print("data", data)

运行结果如下:

可以看到,我们轻松模拟了每个请求,并爬取了服务器的响应内容。由于 app1 的接口没有任何加密措施,因此我们仅仅靠抓包以及观察数据包的规律就轻松模拟了 app1 的请求。

本节介绍了借助抓包工具 Charles 模拟 App 请求的过程。我们成功抓取了 App 发往网络的数据包,还捕获了原始的响应数据,并通过修改原始请求和发送修改后的请求进行了接口测试。另外,知道了请求和响应的具体内容后,通过分析得到请求 URL 和参数的规律,之后就可以用程序模拟请求实现批量抓取。当然,本节所讲的案例是基于一种比较理想的情况,随着技术的发展,App 接口往往会带有密钥或者出现无法抓包的情况,在后续章节会详细讲解如何处理此类情形。

2.4 补充:为什么 Charles 要配合 socksdroid 来使用

  1. VPN 的开关比全局代理的配置更加方便
  2. 有些 app 不走 HTTP 代理,有些机型 http 代理不生效(雷电4)
  3. 能够抓到更全的流量

2.5 小结

三、mitmproxy 抓包工具的使用

mitmproxy 是一个支持 HTTP/HTTPS 协议的抓包程序,和 Fiddler、Charles 有类似的功能,只不过它以控制台的形式操作。

mitmproxy 还有两个关联组件,一个是 mitmdump,这是 mitmproxy 的命令行接口,利用它我们可以对接 Python 脚本,用 Python 实现监听后的处理。另一个是 mitmweb,这是一个 Web 程序,通过它我们可以清楚地观察到 mitmproxy 捕获的请求。

3.1 mitmproxy 的功能

mitmproxy 有如下几项功能:

  1. 拦截 HTTP/HTTPS 的请求和响应;
  2. 保存并分析 HTTP 会话;
  3. 模拟客户端发起请求,模拟服务端返回响应;
  4. 利用反向代理将流量转发给指定服务器;
  5. 支持 Mac 系统和 Linux 系统上的透明代理;
  6. 利用 Python 实时处理 HTTP 请求和响应

整体来看,mitmproxy 相当于一个命令行版本的 Charles,同样可以捕获与修改请求内容和响应内容。其实,相比 Charles,mitmproxy 最有优势的是它的关联组件 mitmdump,mitmdump 可以使用 Python 脚本实时处理请求和响应,功能非常强大。

3.2 准备工作

和 Charles 一样,mitmproxy 运行之后会默认在当前电脑的 8080 端口开启一个代理服务,这个服务实际上是一个 HTTP/HTTPS 的代理。

使用 pip 命令安装(强烈推荐), 输入如下命令:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple mitmproxy 

这是最简单和通用的安装方式,执行完毕之后即可完成 mitmproxy 的安装,另外还安装了 mitmdump、mitmweb 两个组件,如果不想用此种方式安装也可以专门针对各个平台的安装方式或者 Docker 安装方式。Windows 单击链接 https://mitmproxy.org/ 下载,如下图所示:

下载之后直接双击安装包即可安装。注意在 Windows 上不支持 mitmproxy 的控制台接口,但是可以使用 mitmdump 和 mitmweb,如下图所示:

证书配置: 对于 mitmproxy 来说,如果想要截获 HTTPS 请求,我们就需要设置证书,mitmproxy 在安装后会提供一套 CA 证书,只要客户端信任了 mitmproxy 提供的证书,我们就可以通过 mitmproxy 获取 HTTPS 请求的具体内容,否则 mitmproxy 是无法解析 HTTPS 请求的。

首先运行一下命令产生 CA 证书,启动 mitmdump 即可,如下图所示:

这样即可启动 mitmdump,接下来我们就可以在用户目录下的 .mitmproxy 目录里面找到 CA 证书,如图所示:

未完待续。。。

四、HttpCanary 的安装配置与使用

安装:adb install C:\\Users\\AmoXiang\\Desktop\\HttpCanary.apk,如下图所示:

同意条款,如下图所示:

配置 VPN 如下图所示:


点击安装,如下图所示:

点击确定之后,就能进入到 HttpCanary 的抓包界面 (注意:不同的手机、系统可能还会存在移动证书的操作),如下图所示:

打开手机浏览器,输入 csdn,切换到 python 选项,如下图所示:

五、r0Capture 的配置与使用 — 待补充

六、Fiddler 抓包工具的使用(拓展)

Fiddler 是一个HTTP的调试代理工具,它内置了基于 Windows 系统的专用代理服务器,能够记录并检查所有计算机和互联网的 HTTP 通信。通过设置断点,用户还可以修改所有 进出 Fiddler 的数据。本小节介绍它的工作原理和作用。拓展:

Fiddler Windows 平台专用抓包软件 相比于 Charles 我更习惯使用Fiddler(app我用Charles比较多)                    
Charles macOS 平台下最好用的抓包分析工具之一
AnyProxy 阿里巴巴开源的 HTTP 抓包工具,基于 NodeJS 实现,可以进行二次开发
Mitmproxy 基于 Python,支持 SSL 的抓包工具。可以使用python代码控制(爬虫的一些很骚的操作都是用该软件实现)
Wireshark 相对更加底层,更加古老的抓包工具,可以直接从网卡角度抓到包。这个工具不适合于PC爬虫领域。(PC 99.999%都是http协议【也就是应用层】)

6.1 Fiddler 简介

6.1.1 Fiddler 的工作原理

Fiddler 作为一种代理服务器软件,其核心功能就是作为代理服务器。Fiddler 的核心----代理服务,代理也称为网络代理,是一种特殊的网络服务。它允许 一个网络终端(一般为客户端)通过这个服务器与另一个网络终端(一般为服务器)进行非直接连接,而提供代理服务的电脑系统或其他类型的网络终端称为代理服务器。 大部分使用 HTTP 的程序都支持代理服务器,因此 Fiddler 适用于常见的各种应用。作为系统代理,启动 Fiddler 后,它会自动注册为 Windows Internet(WinINET) 网络服务代理。这样,所有通过微软互联网服务(WinINET) 的 HTTP 请求在到达目标 Web 服务器之前,都会经过 Fiddler 代理服务器软件。同样,所有的 HTTP 响应都会在返回客户端之前流经 Fiddler,如下图所示:

简单来说就是下图这样:

Fiddler 位于用户与 Web 服务器之间,用于转发请求与响应,如上图所示。客户端的应用把 HTTP 和 HTTPS 请求发送给 Fiddler,Fiddler 通常把这些请求转发给 Web 服务器。然后,Web 服务器把这些请求的响应返回给 Fiddler,Fiddler 再把这些响应转发给客户端。因此 Fiddler 作为一个监控工具,可以帮助用户了解交互过程的细节,解决遇到的问题。作为代理服务器,Fiddler 不仅用于查看网络流量,还可以修改发送的请求和接收的响应。用户可以设置请求和响应的断点,以手动修改数据流。满足设置的断点后,Fiddler 会暂停会话,以便用户手动修改请求和响应。Fiddler 还支持内嵌运行脚本,用以自动修改数据流。

6.1.2 Fiddler 的作用

Fiddler 的作用可以总结为以下几点:

  1. 查看浏览器、客户端应用与服务器之间的 Web 数据流。
  2. 手动修改任意请求。
  3. 归档保存捕获到的数据流,支持在不同计算机上加载这些数据。
  4. 给客户端应用 回放(play back) 先前捕获到的响应。

6.2 获取 Fiddler

在大部分操作系统中,默认没有安装 Fiddler 工具。如果要使用该工具,首先需要安装。访问网址 https://www.telerik.com/download/fiddler,可以跳转到 Fiddler 的官方下载页面,页面中有3个文本框需要用户填写,如下图所示:

填写完以后,需要勾选 I accept the Fiddler End User License Agreement 前面的复选框,然后单击 Download for Windows 按钮就可以下载了。(第一个复选框勾选或者不勾选都可下载) 百度网盘下载地址:

链接:https://pan.baidu.com/s/1jtFdYZXkz3TT0vmCZd4uPw 
提取码:mxh2 
--来自百度网盘超级会员V8的分享

通过上述方法就可以成功下载安装包了,下载后的安装包名称为 FiddlerSetup.exe。如下图所示:

按如下步骤使用该安装包进行安装即可:

  1. 双击 FiddlerSetup.exe 应用程序,弹出许可协议对话框,如下图所示:
  2. 上图中显示了使用 Fiddler 的许可证条款信息。单击 I Agree 按钮,弹出安装位置对话框,如下图所示:
  3. 在上图中选择 Fiddler 的安装位置(建议使用默认的文件夹作为安装路径。因为有些 Fiddler 组件需要安装在默认路径下,否则这些组件将无法正常安装。),然后单击 Install 按钮,开始安装,如下图所示:

    成功安装Fiddler之后会打开一个网页,如下图所示。该界面中显示了使用 Fiddler 的一些关键信息:
  4. 关闭网页。在下图的安装界面中单击 Close 按钮,完成安装:

    如果不希望 Fiddler 软件自动检测新版本,可以取消自动更新功能。选择 Tools|Options… 命令,弹出 Options 对话框,如下图所示:


    在 General 选项卡中,取消勾选 Notify me for updates on startup 复选框,Fiddler 启动时将不再提示有新版本。取消勾选 Offer upgrade to Beta versions 复选框,Fiddler 将不会升级到 Beta 版本,也不会对 Beta 版本的更新进行提醒。

6.3 Fiddler 用户界面


① 标题栏:Fiddler 标题查看器。
② 菜单栏:Fiddler 标准菜单栏。
③ 工具栏:常用功能快捷图标按钮。
④ Web Sessions列表:显示 Fiddler 捕获到的每个 Session 的简短摘要信息。
⑤ 选项视图:显示在 Web Sessions 列表中选中的 Session 信息。
⑥ 状态栏:显示一些关键信息及重要的命令。

上图中,编号为 ④ 的部分是一个 Web 会话列表。一个 Web 会话代表客户端和服务器之间的一个事务。Web 会话列表中的一个条目就是一个会话。一个会话对象包含一个请求和一个响应,分别表示客户端发送给服务器的数据及服务器返回给客户端的数据。会话对象还会维护一组标志位(Flag),用于保存会话的元数据及在处理该会话过程中记录的时间戳对象。Fiddler 捕获到的会话信息可以保存到 会话归档文件(SAZ) 中,以方便后续查看。这种格式的压缩文件中包含完整的请求和响应、标志位、时间戳对象及其他元数据。

6.4 Fiddler 捕获数据(重点)

我们要使用 Fiddler 来捕获客户端浏览网页或网站的数据,就需要把 Fiddler 设置为代理服务器。成为代理服务器后,Fiddler 可以捕获本机的会话,也可以捕获到局域网内其他主机的会话,还可以捕获到手机上的会话,下面介绍如何设置代理。

6.4.1 捕获本机数据

启动 Fiddler 后,Fiddler 默认作为系统代理服务器。其中,状态栏最左边显示 Capturing,说明 Fiddler 已经作为系统代理服务器了。这时,在浏览器中访问网站,所有请求和响应的会话就会在 Web Sessions 列表中显示,如下图所示:

不断访问网站,产生的所有会话也都会出现在 Web Sessions 列表中。如果不想让会话出现在 Web Sessions 列表中,可以取消 Fiddler 的代理服务器功能。取消方法是,在菜单栏中选择 File|Capture Traffic 命令,或者单击状态栏中的 Capturing,如下图所示:

设置好后,在状态栏中就不会显示 Capturing 了。这时,访问任何网站都不会捕获到会话,后续的会话也就不会出现在 Web Sessions 列表中。单击工具栏中的 Decode,否则每次抓包都要进行解码。

6.4.2 配置HTTPS解密

Fiddler 在捕获网站数据时,默认只捕获 HTTP 数据。但是很多网站为了安全,会对数据进行加密,使用 HTTPS 进行传输。为了能够捕获和解析 HTTPS 的数据,我们需要进行相关设置。

为了能够捕获到加密的会话,需要设置 Fiddler 捕获 HTTPS 会话连接,并启用 HTTPS 解密功能。用户需要单击 Tools|Options… 命令,打开 Options 对话框。单击 HTTPS 标签,打开 HTTPS 选项卡,如下图所示:


启用 HTTPS 解密功能需要捕获到该协议的数据包。在 HTTPS 选项卡中,需要先勾选 Capture HTTPS CONNECTs 复选框,捕获 HTTPS 会话连接。然后再勾选 Decrypt HTTPS traffic 复选框,开启 HTTPS 解密功能,如下图所示:



Fiddler 会捕获所在主机上所有进程的 HTTPS 数据包。如果使用 HTTPS 的进程很多,那么会获取太多的无用会话。为了能够捕获特定类型的 HTTPS 数据包,需要设置要捕获数据的来源。在 HTTPS 选项卡中,单击 from all processes 下拉按钮,弹出下拉列表框,如下图所示:

Fiddler 将 HTTPS 数据来源分为4种,每种来源说明如下:

...from all processes:捕获所有进程的HTTPS包。
...from browsers only:只捕获浏览器产生的HTTPS包。
...from non-browsers only:只捕获非浏览器产生的HTTPS包。
...from remote clients only:只捕获远程客户端产生的HTTPS包。

我们可以根据要分析的目标,自行选择数据来源。HTTPS 的版本不同,采用的加密方式也会不同。如果明确了加密类型,在捕获加密的 HTTPS 数据包时,可以指定客户端使用的加密类型。Fiddler 支持的类型有 ssl2、ssl3、tls1.0、tls1.1和tls1.3。客户端加密类型默认使用的是 ssl3和tls1.0。设置客户端加密类型,需要在 HTTPS 选项卡中单击<client>;ssl3;tls1.0 链接,弹出 HTTPS Protocols 对话框,然后在文本框中输入要设置的客户端加密类型即可,我这里对其进行重新设置,设置为:<client>; ssl2; ssl3; tls1.0; tls1.1; tls1.2,如下图所示:

注意:Fiddler 配置完成之后一定要记得重启Fiddler

6.4.3 导出证书

Fiddler 提供了导出证书的功能。导出的证书可以供其他计算机和手机使用,便于后期解密。导出证书时,需要在 HTTPS 选项卡中单击 Actions 按钮,弹出下拉列表框,如下图所示:

在其中选择 Export Root Certificate to Desktop 选项,弹出 Success 对话框,如下图所示:

该对话框提示已经成功将证书导出到了桌面,证书名称为 FiddlerRoot.cer。

6.4.4 在计算机上导入证书

要解密 HTTPS 的数据,必须安装 Fiddler 的证书。Fiddler 所在的计算机上已经安装了该证书。非 Fiddler 所在的计算机就需要用户手动将证书导入了。这里以 Windows10 系统的计算机为例,讲解如何导入证书。
1、使用 Win+R 快捷键,打开运行对话框,输入 mmc,如下图所示:

2、单击确定按钮,打开控制台,如下图所示:

3、选择 文件|添加/删除管理单元 命令,弹出 添加或删除管理单元 对话框,如下图所示:

4、在左侧栏中找到证书,单击添加按钮,弹出证书管理对话框,如下图所示:

这里选择计算机账户单选按钮,单击下一页按钮,弹出选择计算机对话框,如下图所示:

5、这里使用默认值。单击完成按钮,可以看到成功将证书添加到了右侧的管理单元中,如下图所示:

6、单击确定按钮,关闭该对话框,返回到控制台。在左侧可以看到相关信息,如下图所示:

7、在左侧栏中,展开证书分支。在受信任的根证书颁发机构中找到证书,如下图所示:

8、右击证书选项,依次选择 所有任务|导入 命令,弹出 证书导入向导 对话框,如下图所示:

9、单击下一页按钮,弹出要导入的文件对话框,如下图所示:

10、单击浏览按钮,选择要导入证书的路径。这里导入桌面上的证书 Fiddler-Root.cer,单击下一页按钮,弹出证书存储对话框,如下图所示:

11、这里使用 自动存储。选择 根据证书类型,自动选择证书存储 单选按钮,单击下一页按钮,如下图所示:

弹出 正在完成证书导入向导 对话框,如下图所示:

12、单击完成按钮,完成证书导入,弹出 导入成功 对话框,如下图所示:

6.4.5 捕获手机数据

当安装 Fiddler 的主机和手机在同一个局域网中时,Fiddler 可以捕获到手机浏览网站的数据。启动 Fiddler。在菜单栏中,选择 Tools| Options… 命令,弹出 Options 对话框,切换到 Connections 选项卡,勾选 Allow remote computers to connect 复选框,如下图所示:

勾选复选框后,会弹出警告对话框,点击确定即可,如下图所示:

上图提示允许远程客户端连接 Fiddler,需要重新启动 Fiddler 才生效。单击确定按钮,返回到 Connections 选项卡,默认监听端口为 8888,设置好以后,单击OK按钮,Fiddler需要重新启动。

接下来查看主机的IP地址。在命令行输入 ipconfig,如下图所示:

从上图中可以看到,Fiddler所在主机的IP为 192.168.1.180。我手机和电脑使用的网络是一个路由器,肯定在同一个网段,你们只要保证电脑和手机使用的是同一个WIFI或者路由器就好

后续手机上的操作跟在 https://blog.csdn.net/xw1680/article/details/112857776 一文中是一致的,在代理服务器主机名区域输入 Fiddler 所在主机的 IP 地址 192.168.1.180,在代理服务器端口输入 8888,设置好以后进行保存即可,接着在手机上安装证书就好了,由于每个人手机不太一样,我这里就不再进行演示了,可以参考 https://blog.csdn.net/xw1680/article/details/112857776 一文。

以上是关于100天精通Andriod逆向——第4天:各种抓包工具学习的主要内容,如果未能解决你的问题,请参考以下文章

100天精通Andriod逆向——第5天:app逆向流程简介

100天精通Andriod逆向——第5天:app逆向流程简介

100天精通Andriod逆向——第6天:Andriod 开发入门

100天精通Andriod逆向——第6天:Andriod 开发入门

100天精通Andriod逆向——第1天:ADB原理及其常用命令

100天精通Andriod逆向——第2天:Android基础知识和jadx的使用