抓包工具:Fiddler、charles、HTTP Toolkit、HttpCanary(小黄鸟)、proxifier、Yakit、安装证书到系统证书目录下(安卓7.0高版本抓包)

K哥工具:https://www.kgtools.cn/

1、抓包 工具

不论是普通的前后端开发人员,还是做爬虫、逆向的爬虫工程师和安全逆向工程,必不可少会使用的一种工具就是HTTP抓包工具。常用:浏览器F12开发者调试界面、Charles(青花瓷)、Fiddler(小提琴)、Wireshark、BurpSuite、Proxyman

2、强制 流量 转发

注意:使用时,需要删除手机上设置的系统代理。

  • postern:强制全局代理工具。Android 系统里一款非常流行的代理/ 虚拟专用网络管理程序,是一个全局代理工具。
    github 地址:https://github.com/postern-overwal/postern-stuff
    apk 下载:https://github.com/postern-overwal/postern-stuff/blob/master/Postern-3.1.2.apk
  • ProxyDroid:强制全局代理工具,适用于常规 charles 等工具抓不到包的情况。原理是通过 iptables 将所有 TCP连接重定向到代理服务器上,强制性地让 APP 的 HTTP 请求通过代理。
  • SocksDroid:同 ProxyDroid
  • Drony:同 ProxyDroid
  • proxifier: 强制全局代理工具,支持 windows、mac、Android

3、Fiddler 使用教程

Fiddler各个版本的说明

  • Fiddle Evrywhere:可在Mac、Linux、Windows 系统平台上运行的跨平台应用。
  • Fiddle Classic:针对 Windows 系统的完整库。
  • Fiddle Jam:一种基于 Web 的端到端故障排除解决方案。
  • Fiddle Cap:适用于 Windows 的基于桌面的捕获应用程序,仅限 Windows 的 Fiddler 轻量级版本,专为非技术用户捕获数据而设计。
  • Fiddle Core:提供嵌入式 .NET 库,可嵌入到其他应用程序中。

Fiddler 介绍

Fiddler 是 http/https 的抓包神器,可以将网络传输发送与接受的数据包进行截获、重发、编辑、转存等操作,是最强大最好用的 Web 调试工具之一,Fiddler 包含了一个强大的基于事件脚本的子系统,并且能使用 .net 语言 进行扩展。对 HTTP 协议越了解, 就能越掌握 Fiddler 的使用方法。越使用 Fiddler,就越能帮助你了解 HTTP 协议。Fiddler 对开发测试人员来说,都是很有用的工具。

Fiddler 官方帮助:http://docs.telerik.com/fiddler/knowledgebase/quickexec
Fiddler 官方网站提供了大量的帮助文档和视频教程, 是学习 Fiddler 的最好资料。

Fiddler 下载、安装

Fiddle 官网:https://www.telerik.com/fiddler

Fiddle 不同版本:

  • Fiddle Evrywhere :可在Mac、Linux、Windows 系统平台上运行的跨平台应用
  • Fiddle Classic:针对 Windows 系统的完整库
  • Fiddle Jam:Web 平台的调试库
  • Fiddle Cap:针对 Windows 系统的轻量级库
  • Fiddle Core:Fiddle 的基础库,可嵌入到其他应用程序中

这里以 Fiddle Classic 为例,点击 Try For Free 填写相关信息,下载好并安装到本地指定路径之后,打开进行下一步的配置。

Fiddler 汉化

从官网下载 Fiddle Classic 并安装后,再下载 FdToChinese.dll 和 FiddlerTexts.txt 链接:https://pan.baidu.com/s/1wWgVqrXlh0Gjpbwlg6pPNA  提取码:xq9t   链接:https://pan.baidu.com/s/1LRZasMClevAUQcOSYD_pUQ?pwd=5auu

  • FiddlerTexts.txt:汉化的单词库,可以自己修改。将文件移动到 Fiddle 安装后的本地根目录中
  • FdToChinese.dll:汉化的插件。将文件移动到 Fiddle 安装目录下的 Scripts 目录中
  • 重启 Fiddle,即可完成汉化。

汉化过程完整过程:

1. 安装Fiddler英文原版
2. 比如,我将Fiddler安装在:D:\Programs\Fiddler
3. 将【fiddler汉化】文件夹中的FiddlerTexts.txt复制到D:\Programs\Fiddler\
4. 将【fiddler汉化】文件夹中的FdToChinese.dll复制到D:\Programs\Fiddler\Scripts\
5. 重启Fiddler,菜单栏常用功能菜单已经被汉化了。

或者使用已经汉化好的版本。如下:

Fiddler v5.0.20204.45441 简体中文版 :https://www.52pojie.cn/thread-1307586-1-1.html
中文版:https://ezrealik.lanzouj.com/i2d5iihy7pg

开启 抓包

Fiddler 想要抓到数据包,要确保 Capture Traffic 是开启,在 File –> Capture Traffic,开启后,在左下角会显示 Capturing 。也可以直接点击 左下角的 Capuring 图标来 关闭/开启 抓包功能。

图标含义

Fiddler 工作原理

Fiddler 是以代理 web 服务器的形式工作的,它使用代理地址:127.0.0.1,端口:8888。当 Fiddler 退出的时候它会自动注销,这样就不会影响别的程序。不过如果 Fiddler 非正常退出,这时候因为 Fiddler 没有自动注销,会造成网页无法访问。解决的办法是重新启动下 Fiddler。

Fiddler 在本机上监听 8888 端口的 HTTP 代理。只要支持 HTTP 代理,都能被 Fiddler 嗅探到。

捕获 HTTPS 会话

Fiddler 默认不会捕获 HTTPS 会话,需要设置:菜单栏 ---> Tool ---> Options ---> HTTPS

如果以前安装过,可以点击最后一项 Reset All certificates,再安装证书

点击工具栏中的 Tools—>Options,点击 Actions,

在浏览器中导入证书 FiddlerRoot.cer,以谷歌浏览器为例说明,在浏览器上输入: chrome://settings/ 然后进入高级设置,点击管理证书

在受信任的根证书颁发机构,对证书进行导入

重新打开 fiddler,就可以在电脑上进行 https 抓包了。

firefox 安全链接提示

当安装完证书,还需要编辑信任设置,要不使用代理访问时会出现 "有软件阻止Firefox安全地连接至网站" 弹窗警告的处理

firefox 可以安装一个切换代理的插件 foxyproxy,相当于 Chrome 的 "Proxy switchOmega"

捕获 手机 会话

首先电脑和手机要使用同一个局域网或者无线。

手机上也需要安装 fiddler 证书,要不无法解密 https 流量。。。

这时在 Fiddler 就可以看到自己本机网卡的IP。

在手机端连接 PC的 wifi,并且设置代理 IP 与端口(代理 IP 就是上图的 IP,端口是 Fiddler 的代理端口 8888 )

访问网页输入 代理IP端口,下载 Fiddler 的证书,点击下图 FiddlerRoot certificate

安装完了证书,可以用手机访问应用,就可以看到截取到的数据包了。

Fiddler 界面

HTTP 统计视图

列出所有的 HTTP 通信量,展示哪些文件生成了当前请求的页面。使用Statistics页签,用户可以通过选择多个会话来得来这几个会话的总的信息统计,比如多个请求和传输的字节数。

选择第一个请求和最后一个请求,可获得整个页面加载所消耗的总体时间。从条形图表中还可以分别出哪些请求耗时最多,从而对页面的访问进行访问速度优化

QuickExec 命令行 的使用

Fiddler的左下角有一个命令行工具叫做QuickExec,允许你直接输入命令。

常见得命令有:

  • help  : 打开官方的使用页面介绍,所有的命令都会列出来
  • cls   :清屏(Ctrl+x 也可以清屏)
  • select : 选择会话的命令
  • ?.png :用来选择png后缀的图片
  • bpu  :截获 request

HOST 修改 (域名 重定向)

点击 Tools ---> HOSTS 打开的页面如下:

内置命令、断点

官网文档:http://docs.telerik.com/fiddler/knowledgebase/quickexec

相关命令

断点命令

bpafter

All

bpafter后边跟一个字符串,表示中断所有包含该字符串的请求

bpafter baidu(输入bpafter解除断点)

bpu

All

跟bpafter差不多,只不过这个是收到请求了,中断响应

bpu baidu(输入bpu解除断点)

bps

Result

后面跟状态吗,表示中断所有是这个状态码的请求

bps 200(输入bps解除断点)

bpv / bpm

HTTP方法

只中断HTTP方法的命令,HTTP方法如POST、GET

bpv get(输入bpv解除断点)

g / go

All

放行所有中断下来的请求

g

命令说明

  • ?sometext :当您键入一些字符串,如 sometext ,Fiddler 将突出会话所在的 URL中包含 sometext 的请求 。
                           此时按 Enter 键将高亮选中所有匹配的会话。?searchtext
  • >size [ <size ] :选择 请求 的 响应大小 大于[ 小于 ] size字节 的 会话。
                              示例:>40000  // 选择大小超过40kb的响应
                              示例:<5k     // 选择小于5kb的响应
  • =status、 =method :选择 响应状态 =status 或 请求 方法=method 的会话。
                    示例:=301      // 选择301重定向响应
                    示例:=POST  // 选择POST方式的请求
  • @host :选择会话中域名包含 host 的会话,此时按 Enter 键可高亮所有匹配的结果。
                    示例: @baidu.com   // 选择 www.baidu.com, map.baidu.com 等等
  • bold:预先设置会话加粗:标记任何 URL 包含了目标字符串的后续请求。再次输入不带任何参数的 bold 可以取消设置。
                    示例:bold /index.php
                    示例:bold        // 调用不带任何参数的命令来清除上一设置
  • bpafter :(服务器收到请求,然后应答,fiddle 收到应答,没有转发给客户端时 断点) 创建应答 断点。
                      设置中断 Request 的 URI 中包含指定字符串的任何响应。再次输入不带任何参数的 bpafter 取消设置。
                      示例:bpafter /favicon.ico
                      示例:bpafter       // 取消设置
  • bps :中断与设置的状态代码匹配的响应。示例:bps 404        示例:bps // 取消设置。
  • bpv or bpm :对指定的 HTTP方法 创建请求断点。设置此命令将清除该命令的任何以前的值,不带参数调用它会禁用断点
                            示例: bpv POST        示例:bpv    //取消设置
  • bpu :对包含指定字符串的 URI 创建 请求断点。设置此命令将清除该命令的任何以前的值,不带参数调用它会禁用断点。
             (fiddle 收到请求,没有转发给 服务器, 断点)。示例:bpu /index.php    示例:bpu    //取消设置
  • cls or clear : 清空会话列表
  • dump : 打包所有会话成zip归档文件并转存在C:\
  • g or go :恢复所有设置断点的会话
  • help :打开帮助页面(即本文英文版)
  • hide :隐藏 Fiddler 界面,系统后台运行
  • urlreplace :以一个不同的字符串替换URL中任何字符串。
                    设置此命令将清除该命令的任何以前的值,不带参数调用它,将取消更换
                    示例:urlreplace SeekStr ReplaceWithStr
                    示例:urlreplace        //取消设置
  • start :       注册成为系统代理
  • stop :       取消系统代理
  • show :     将 Fiddler 从系统托盘中恢复,从ExecAction.exe 获取更多有用的触发规则
  • select MIME :  选择 Content- Type头中包含指定字符串的响应,可用于选择文件格式等。
                               示例:select image、select css、select htm
  • select HeaderOrFlag PartialValue : 选择已命名的 header 或 SessionFlag 包含指定字符串的响应。
                    select ui-comments slow
                    select ui-bold *     <-- unless preceded by a slash, * means any value
                    select ui-comments \*     <-- Find comments with a *
                    select @Request.Accept html     <-- Find requests with Accept: html
                    select @Response.Set-Cookie domain <- Find responses that Set-Cookie on a domain
  • allbut or keeponly :筛选会话。该命令还有一个别名 keeponly。注意:keeponly 和 allbut 命令是将不是该类型的 session 删除,留下的都是该类型的响应。因此,如果你执行allbut xxxx(不存在的类型),实际上类似与执行 cls 命令(删除所有的 session,,ctrl+x 快捷键也是这个作用)。示例:allbut html、allbut java
  • quit :退出Fiddler
  • !dns hostname : 进行目标域名的 DNS 查找,并将结果显示在 LOG 选项卡上。
                    !dns www.baidu.com
                    !nslookup www.baidu.com
  • !listen PORT [CERTHOSTNAME] :在另一个端口增设一个监听器,选择安全的HTTPS证书。
                    !listen 8889
                    !listen 4443 localhost
                    !listen 444 secure.example.com

快捷键

Ctrl+x :      删除当前所有的web session请求
Ctrl+A :      选中所有的web session
Shift+Delete: 删除未选中的session
R 和 shift+R :重复请求当前选中的session
Alt+Enter:    查看当前session的属性
Shift+Enter :  启动该session的inspectors
Ctrl+1/2/3/4/5/6 :改变当前session的颜色
M :   给选中的session添加描述,将显示在comment一栏中
Alt + q    定位到命令框
在 QuickExec 框,按 Ctrl+ I 插入会话列表中当前选定的会话的 URL
Ctrl + Alt + F    唤醒 Fiddle 到前台运行

bpafter、bps、bpv、bpm、bpu

其中有关于断点的命令:

        bpu :         在请求开始里中断
        bpafter :   在响应到达时中断
        bps :         在特定http状态码时中断
        bpv/bpm : 在特定请求 method 时中断

bp 即 breakpoint 。breakpoint after、breakpoint status、breakpoint url

这几个命令主要用于批量设置断点
Bpafter xxx: 中断 URL 包含指定字符的全部 session 响应。
Bps xxx: 中断 HTTP 响应状态为指定字符的全部 session 响应。
Bpv xxx: 中断指定请求方式的全部 session 响应
Bpm xxx: 中断指定请求方式的全部 session 响应。等同于bpv xxx
Bpu xxx:与bpafter类似。

当这些命令没有加参数时,会清空所有设置了断点的HTTP请求。更多的其他命令可以参考Fiddler官网手册。

示例演示

?

>

<

=:=status、=method  选择响应状态 =status (200、404等)或请求方法 =method 的会话(POST、GET等)

!dns hostname:进行目标域名的DNS查找,并将结果显示在LOG选项卡上

@:@host,选择会话中域名包含host的会话,此时按Enter键可高亮所有匹配的结果

select

cls

dump

断点命令:

断点可以直接点击Fiddler下图的图标位置,就可以设置全部请求的断点,断点的命令可以精确设置需要截获那些请求。如下示例:

命令:bpafter

命令:bps

命令:bpv

命令:g / go

设置 断点

断点 Request

Fiddler 最强大的功能莫过于设置断点了,设置好断点后,你可以修改httpRequest的任何信息包括host、cookie 或者表单中的数据。设置断点有两种方法:

  • 方法 1:打开 Fiddler 点击 Rules ---> Automatic Breakpoint  ---> Before Requests (这种方法会中断所有的会话)。取消断点:点击 Rules ---> Automatic Breakpoint  ---> Disabled
  • 方法 2:命令行下输入 bpafter xxx 或者bpv、bpu、bpm 等设置断点。这种断点只针对特定类型的请求。示例:bpu www.baidu.com   (这种方法只会中断www.baidu.com)。取消断点: 在命令行中输入命令 bpu。

这两种方法当程序运行到断点处的时候都会停止,需要手动点击 “Run to Completion” 重新启动,非常不方便。而且通过 fiddler 的菜单功能,无法修改 http 请求的 URI。此时 Fiddler Script 的优点就体现出来了,Fiddler Script 的本质其实是用 JScript.NET 语言写的一个脚本文件CustomRules.js,语法类似于 C#,通过修改 CustomRules.js 可以很容易的修改 http 的请求和应答,不用中断程序,还可以针对不同的 URI 做特殊的处理,除此之外还可以根据需要去定制菜单。Fiddler Script 官方文档:

示例:模拟博客园的登录, 在IE中打开博客园的登录页面,输入错误的用户名和密码,用Fiddler中断会话,修改成正确的用户名密码。这样就能成功登录:

  • 1. 用IE 打开博客园的登录界面 http://passport.cnblogs.com/login.aspx
  • 2. 打开Fiddler, 在命令行中输入bpu http://passport.cnblogs.com/login.aspx
  • 3. 输入错误的用户名和密码,点击登录
  • 4. Fiddler 能中断这次会话,选择被中断的会话,点击Inspectors tab下的WebForms tab 修改用户名密码,然后点击Run to Completion 如下图所示。
  • 5. 结果是正确地登录了博客园

断点 Response

Fiddler 也能修改 Response:

  • 第一种:打开Fiddler 点击Rules-> Automatic Breakpoint  ->After Response  (这种方法会中断所有的会话)。取消断点:点击Rules-> Automatic Breakpoint  ->Disabled
  • 第二种:  在命令行中输入命令:  bpuafter www.baidu.com   (这种方法只会中断www.baidu.com)。取消断点:命令行中输入命令 bpuafter

示例:response 断点

断点命令介绍:

  • bpu 在 请求 开始时 中断,
  • bpafter 在 响应 到达时 中断,
  • bps 在特定 http状态码时 中断,
  • bpv/bpm 在特定请求 method时 中断。
  • 提示:命令输入区域输入help,回车执行会打开一页面详细介绍 fiddler 的所有命令。

也可以在菜单栏设置断点,是针对所有的会话请求,不大实用,建议用命令。

以 bpu 为例演示断点功能:

  • 以淘宝 h5 页面为例,在浏览器打开 taobao.com 首页。
  • 在 Fiddler 命令行输入区输入“bpu” 回车执行清掉原有的断点,然后输入“bpu m.taobao.com/search.htm” 回车执行,接下来就会中断URL中包含此地址的请求。

  • 在浏览器淘宝首页顶端搜索框输入"充气娃娃" 后点击搜索,此时请求被中断,在Fiddler会话列表面板看到以红色小图标开头被中断的会话

  • 点击会话列表中被中断的会话,依次进入Inspectors-->WebForms。此时请求并未发出,q参数即为查询关键字,我们修改为“nike”,然后点击“Break on Response”按钮。注:在这里实现修改了请求数据,其它的post数据,甚至是headers里的cookie、referer、user-agent等都可以修改。

  • 右边面板Response区有响应内容了,这时Fiddler再次中断了response,响应已到达Fiddler代理,但还没返回给浏览器。点击Inspectorsg下Response区的“response is encoded and may need to decoded before inspection.Click here to transform”后,即可在TextView tab看到返回的html内容。在这里修改response中的title部分,然后点击“Run to Completino"把修改后的response返回给浏览器。

  • 回到浏览器,搜索结果为“nike”的结果,而不是“充气娃娃”,标题也被修改为“搜索充气娃娃”。

命令行输入 go 会断续执行所有中断,再次输入 bpu 会清除所有的断点。

如上第四点图所示,这里有很多的操作选择,就是选择输出内容,选择之后,实际的响应数据就会这些替代,特别是最后一个find 操作a file:这个我们可以中断一个图片,然后这里选择本地的一张图片,这样我们就可以替换页面的图片。比较强大的场景就是例如现网js出了问题,但是一般现网的js是压缩过的,在firebug中根本无法调试,这样我们可以把它映射到本地的一个原始版本,这样firebug就会拿到一份原始的js,就可以方便的调试了。

AutoResponder (自动响应、重定向)

重定向 单个URL

当拦截到收到匹配的 request 时,可以重定向到本地的资源,或者使用Fiddler的内置响应。而不是发送到服务器让服务器返回 response。

Fiddler 支持多种 url 匹配方式:

  1. 字符匹配:只要包含指定字符串(不区分大小写),全部认为是匹配。如 example 可以匹配 http://www.example.com.cn  和 http://example.com.cn
  2. 完全匹配:以 "EXACT:" 开头表示完全匹配。示例:EXACT:http://www.pwstrick.com/fiddler/demo.js 只能匹配 http://www.pwstrick.com/fiddler/demo.js,只要和这个不相同的都不匹配
  3. 正则表达式匹配:以 "regex:" 开头,使用正则表达式来匹配,这个是区分大小写的
        例如:regex:(?insx).*\.(css|js|PHP)$  表示匹配所有以 css、js、php 结尾的请求 url

设置 文件作为 response

示例:将 "baidu" 这个关键字与 "C:\wallpaper\kali.jpg" 这张图片绑定了,点击 Save 保存后勾选 Enable rules,再访问 baidu,就会被劫持。

重新请求 baidu,效果如图:

Composer (模拟 发送 请求)

Composer 允许自定义请求发送到服务器,可以手动创建一个新的请求,也可以在会话表中,拖拽一个现有的请求

过滤 请求

每次使用 Fiddler 打开一个网站,都能在Fiddler中看到几十个 会话(请求),看得眼花缭乱。最好的办法是过滤掉一些会话,比如过滤掉图片的会话。Fiddler 中有过滤的功能, 在右边的 Filters中,里面有很多选项, 稍微研究下,就知道怎么用。

有两个最常用的过滤条件:Zone 和 Host

  • Zone 指定只显示内网(Intranet)或互联网(Internet)的内容
  • Host 指定显示某个域名下的会话

Fiddler 的过滤器非常强大,可以过滤特定 http 状态码的请求,可以过滤特定请求类型的 http 请求(如 css 请求,image 请求,js 请求等),可以过滤请求报文大于或则小于指定大小(byte)的请求,过滤内网http请求而只抓取 internet 的 http请求,或则过滤相应域名的http请求。

也可以:菜单栏 ---> X ,进行简单过滤

比较 请求

自带的比较工具不好用,可以使用 beyondcompare ( 官网:https://www.scootersoftware.com/download.php )

Beyond Compare v4.4.7.28397 修改版:https://www.ghxi.com/beyondcompare.html

设置工具:菜单栏 ---> 工具 ---> 选项 ---> tools

选中2个请求会话,右键 Compare,就可以比较两个请求的不同了。

编码 工具

点击 Fiddler 工具栏上的 文本向导(TextWizard),这个工具可以 编解码字符串。

查找 请求

用快捷键 Ctrl+F 打开 Find Sessions 的对话框,输入关键字查询你要的会话。 查询到的会话会用黄色显示。

替换 请求

是指所有发到 a.com 的 HTTP Request , Fiddler 都帮你转发到 b.com ,同时在浏览器中毫无感觉。 测试 debug 过程中常有这种需求,例如用 www. dev.demo.com 替换 www.demo.com 。

Fiddler 左下角输入:urlreplace www.demo.com www.dev.demo.com。按下Enter ,所有原先发到www.demo.com 的HTTP Request 就转发到www.dev.demo.com 了。要清除转发,请在同一位置输入: urlreplace,然后按Enter 就可以了。更详细的说明请参考Fiddler官方说明文件 - QuickExec Reference 。 可以发现 urlreplace 做的是整个网址字串的取代,所以可以动手脚的地方不只于此。

永久的方法是修改 Fiddler的CustomRules.js

请先在CustomRules.js 找到:
static function OnBeforeRequest ( oSession : Session ) 
{
   // <span class="hljs-keyword">...
}
在函式OnBeforeRequest 中加入:
if(oSession.HostnameIs('www.demo.com'))
	oSession.hostname = 'www.dev.demo.com';

将 CustomRules.js 保存后,Fiddler 会自动重新载入CustomRules.js ,原先发到www.demo.com 的HTTP Request 就会自动转发到www.dev.demo.com 。

保存 请求

可以保存请求,发给别人或者以后去分析。

步骤:选择要保存的请求,菜单栏 ---> File ---> Save ---> Selected Sessions

高级用法:script

官方文档:http://www.fiddler2.com/Fiddler/dev/ScriptSamples.asp

Fiddler Script 是用 JScript.NET 语言写的,JScript 是由微软公司开发的动态脚本语言,是微软对ECMAScript 规范的实现。

示例:让所有 cnblogs 的会话都显示红色

if (oSession.HostnameIs("www.cnblogs.com")) {
    oSession["ui-color"] = "red";
}

把这段脚本放在 OnBeforeRequest(oSession: Session) 方法下,并且点击 "Save script",这样所有的 cnblogs 的会话都会显示红色。

Fiddler 的作者是 Eric Lawrence 是个大师级的人物:http://www.ericlawrence.com/Eric/

Fiddler 包含了一个脚本文件,可以自动修改 request 和 response,这样就不需要手动地下"断点"去修改了,实际上它是一个脚本文件 CustomRules.js,位于 C:\Users\Administrator\Documents\Fiddler2\Scripts

设置 编辑器

如果设置了打开工具,例如:我这里设置的是 notepad++ 打开

启动 Fiddler:点击菜单栏 ---> Rules ---> Customize Rules,就可以用 notepad++ 打开 CustomRules.js 文件。

在 Fiddler 里面已经包含 FiddlerScriptEditor,提供了语法高亮,以及智能提示的功能。

CustomRules.js 主要方法

// 在这个方法中修改Request的内容, 我们用得最多,
static function OnBeforeRequest(oSession: Session)

// 在这个方法中修改Response的内容,
static function OnBeforeResponse(oSession: Session)

// 在个方法中包含Fiddler 命令。在Fiddler界面中左下方的QuickExec Box
static function OnExecAction(sParams: String[])

给 Fiddler 添加菜单

Fiddler 可以模拟各种浏览器,你可以通过点击菜单 Rules -> User-Agents

保存脚本, 重启 Fiddler 就可以看到菜单中多了个Iphone 4s

修改 request 显示样式

控制 request 在 Fiddler中显示样式:http://www.fiddler2.com/Fiddler/dev/SessionFlags.asp

把这段脚本放在OnBeforeRequest(oSession: Session) 方法下,并且点击"Save script", 这样所有的cnblogs的会话都会显示红色.

if (oSession.HostnameIs("www.cnblogs.com")) {
	oSession["ui-color"] = "red";
}

运行效果

修改 Cookie

cookie 就是 request 中的一个 header。

// 删除所有的cookie
oSession.oRequest.headers.Remove("Cookie");

// 新建cookie
oSession.oRequest.headers.Add("Cookie", "username=testname;testpassword=P@ssword1");

注意: Fiddler script 不能直接删除或者编辑单独的一个cookie, 需要用 replace 方法或者正则表达式的方法去操作 cookie 的 string

static function OnBeforeRequest(oSession: Session) 
{ 
    if (oSession.HostnameIs('www.example.com') && 
        oSession.uriContains('pagewithCookie') && 
        oSession.oRequest.headers.Contains("Cookie")) 
   { 
        var sCookie = oSession.oRequest["Cookie"]; 

        //  用replace方法或者正则表达式的方法去操作cookie的string
        sCookie = sCookie.Replace("cookieName=", "ignoreme="); 
        oSession.oRequest["Cookie"] = sCookie; 
    }
}	

修改 request 的 body

方法 1:

static function OnBeforeRequest(oSession: Session) 
{ 
    if(oSession.uriContains("http://www.cnblogs.com/TankXiao/"))
    {
        // 获取Request 中的body字符串
        var strBody=oSession.GetRequestBodyAsString();
        // 用正则表达式或者replace方法去修改string
        strBody=strBody.replace("1111","2222");
        // 弹个对话框检查下修改后的body               
        FiddlerObject.alert(strBody);
        // 将修改后的body,重新写回Request中
        oSession.utilSetRequestBody(strBody);
    }
}

方法 2:可以直接替换body中的数据

oSession.utilReplaceInRequest("1111", "2222");

修改 http 请求和应答

在如下函数中修改http请求头:static function OnBeforeRequest(oSession: Session)
在如下函数中修改http应答:static function OnBeforeResponse(oSession: Session)
在如下函数中fiddler命令(右下角的命令行):static function OnExecAction(sParams: String[])
例如 http 请求中,对域名为 p.21kunpeng.com 的 URI 的 http 请求内容作修改:

if (oSession.host.indexOf("p.21kunpeng.com") > -1) 
{
	// 修改session中的显示样式
	oSession["ui-color"] = "orange";
	// 移除http头部中的MQB-X5-Referer字段
	oSession.oRequest.headers.Remove("MQB-X5-Referer");
	// 修改http头部中的Cache-Control字段
	oSession.oRequest["Cache-Control"] = "no-cache";
	// 修改host
	oSession.host = "kyfw.12306.cn"; 
	// 修改Origin字段
	oSession.oRequest["Origin"] = "https://kyfw.12306.cn";
	// 删除所有的cookie
	oSession.oRequest.headers.Remove("Cookie");
	// 新建cookie
	oSession.oRequest.headers.Add("Cookie", "username=yulesyu;");
	// 修改Referer字段
	oSession.oRequest["Referer"] = "https://kyfw.12306.cn/otsweb/loginAction.do";
	
	// 获取Request中的body字符串
	var strBody=oSession.GetRequestBodyAsString();
	// 用正则表达式或者replace方法去修改string
	strBody=strBody.replace("1111","2222");
	// 弹个对话框检查下修改后的body               
	FiddlerObject.alert(strBody);
	// 将修改后的body,重新写回Request中
	oSession.utilSetRequestBody(strBody);
}

例如 http 中,如果含有 location 并且 location 中含有字段 initQueryUserInfo,则修改为 http://p.21kunpeng.com

var location = oSession.oResponse.headers["Location"];
if(oSession.PathAndQuery.indexOf("initQueryUserInfo") != -1) 
{
	oSession.oResponse.headers["Location"] = "http://p.21kunpeng.com";
}

修改 URI

将请求 URI 中 http 协议 替换成 https 协议,例如:oSession.fullUrl = "https" + oSession.fullUrl.Substring(oSession.fullUrl.IndexOf(':'));

定制菜单

定制 rule 菜单的子菜单,例如在rule菜单下定义一个修改http头部中的Q-UA字段的子菜单:

// 定义名为Q-UA的子菜单
RulesString("&Q-UA", true);
// 生成Q-UA子菜单的radio选项
RulesStringValue(0,"x5_4.3", "ADRQBX43_GA/420411&X5MTT_3/024200&ADR&346014& U9200 &0&9065&Android4.0.3 &V3")
RulesStringValue(1,"x5_5.0", "ADRQBX50_B1/500620&X5MTT_3/025001&ADR&346014& U9200 &21013&9255&Android4.2.2 &V3")
RulesStringValue(2,"ios4.1", "IQB41_GA/370015&IMTT_3/370015&IPH&406040&iPodTouch4G&50003&8917&V3")
RulesStringValue(3,"ios5.0", "IQB50_GA/500028&IMTT_3/500028&IPH&406040&iPhone4&50001&9219&iOS7.0.4&V3")
RulesStringValue(4,"&Custom...","%CUSTOM%")
public static var sQUA: String = null;

//还需要在OnBeforeRequest函数中加入:
// Q-UA Overrides
if (null != sQUA) 
{
    oSession.oRequest["Q-UA"] = sQUA; 
}

定制 tool 菜单的子菜单

// tool menu
public static ToolsAction("tool menu")
function DoManualYules()
{
    FiddlerObject.alert("tool menu"); // 根据需要定制
}

定制右键子菜单

// tool menu
public static ContextAction("context menu")
function DoOpenInIE(oSessions: Fiddler.Session[])
{
    FiddlerObject.alert("context menu"); // 根据需要定制
}

Fiddler Script 限速

限速对于web前端研发是非常重要的,由于开发者的机器一般配置都很高,并且都是把相关文件代理到本地来调试程序,所以很难模拟到用户的真实使用情况,如正在下载js,css等静态资源的时候,页面的一个渲染情况。当网速很慢的时候,我们更希望看到的是先渲染出用户界面,而不是让用户看到一片空白。那么这个时候,网络限速就能很方便在localhost针对类似的情况来做性能调试与优化。

我们可以通过fiddler来模拟限速,因为fiddler本来就是个代理,它提供了客户端请求前和服务器响应前的回调接口,我们可以在这些接口里面自定义一些逻辑。Fiddler的模拟限速正是在客户端请求前来自定义限速的逻辑,此逻辑是通过延迟发送数据或接收的数据的时间来限制网络的下载速度和上传速度,从而达到限速的效果。

fiddler提供了一个功能,让我们模拟低速网路环境。启用方法如下:Rules → Performances → Simulate Modem Speeds。勾选之后,你会发现你的网路瞬间慢下来了很多。至于慢下来后网络速度是多少,则由CustomRules.js 中如下程序控制的:

...
var m_SimulateModem: boolean = true;
...
if (m_SimulateModem) 
{
    // Delay sends by 500ms per KB uploaded.
    oSession["request-trickle-delay"] = "500"; 
    // Delay receives by 150ms per KB downloaded.
    oSession["response-trickle-delay"] = "150"; 
}
...

算法就是 1000/下载速度 = 需要delay的时间(毫秒),比如50kB/s 需要delay20毫秒来接收数据,所以根据你需要的网络速度来修改上述值。

注意:存档之后,原本已经勾选的Simulate Modem Speeds 会被取消勾选,需要再到Rules → Performances → Simulate Modem Speeds 勾选,同时需要注意一定要禁用浏览器代理插件,以及修改完成后重启浏览器才能生效。

抓包 localhost

Fiddler 默认是不能嗅探到 localhost 的网站。不过只要在 localhost 后面加个点号,Fiddler 就能嗅探到。 例如:原本ASP.NET的地址是 http://localhost:2391/Default.aspx 加个点号后变成 http://localhost.:2391/Default.aspx 就可以抓包了

Request header (请求头)

使用 Fiddler 可以很方便的查看 Reques header。点击 Inspectors tab -> Request tab -> headers

header 有很多,比较难以记忆,不过 Fiddler 已经把 header 进行分类。

Cache 头域

If-Modified-Since。作用: 把浏览器端缓存页面的最后修改时间发送到服务器去,服务器会把这个时间与服务器上实际文件的最后修改时间进行对比。如果时间一致,那么返回304,客户端 就直接使用本地缓存文件。如果时间不一致,就会返回200和新的文件内容。客户端接到之后,会丢弃旧文件,把新文件缓存起来,并显示在浏览器中。

If-None-Match。作用: If-None-Match和ETag一起工作,工作原理是在HTTP Response中添加ETag信息。 当用户再次请求该资源时,将在HTTP Request 中加入If-None-Match信息(ETag的值)。如果服务器验证资源的ETag没有改变(该资源没有更新),将返回一个304 状态告诉客户端使用 本地缓存文件。否则将返回200状态和新的资源和Etag.  使用这样的机制将提高网站的性能

  • Pragma:防止页面被缓存, 在HTTP/1.1版本中,它和Cache-Control:no-cache作用一模一样Pargma 只有一个用法, 例如: Pragma: no-cache 。注意:在HTTP/1.0版本中,只实现了Pragema:no-cache,没有实现 Cache-Control
  • Cache-Control:这个是非常重要的规则。 这个用来指定Response-Request 遵循的缓存机制。各个指令含义如下
    Cache-Control:Public可以被任何缓存所缓存()
    Cache-Control:Private内容只缓存到私有缓存中
    Cache-Control:no-cache所有内容都不会被缓存
    还有其他的一些用法, 我没搞懂其中的意思, 请大家参考其他的资料
  • Accept。浏览器端可以接受的媒体类型。通配符 * 代表任意类型。例如 Accept: */* 代表浏览器可以处理所有类型,(一般浏览器发给服务器都是发这个)
  • Accept-Encoding。浏览器指定自己可以接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate),(注意:这不是只字符编码);
  • Accept-Language。浏览器指定自己可以接收的语言。
  • User-Agent。告诉HTTP服务器, 客户端使用的操作系统和浏览器的名称和版本。
  • Accept-Charset。浏览器指定自己可以接收的字符集。
  • Cookie。 最重要的 header,将 cookie 的值发送给HTTP 服务器。
  • Content-Length。发送给HTTP服务器数据的长度。
  • Referer。提供了Request的上下文信息的服务器,告诉服务器我是从哪个链接过来的。
  • Connection: keep-alive   当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接
  • Host。请求报头域主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的

Response header (响应头)

  • Date:生成消息的具体时间和日期
  • Expires:本地缓存过期时间
  • Set-Cookie:非常重要的header,用于把 cookie 发送到客户端浏览器, 每一个cookie 字段都会生成一个Set-Cookie。
  • Content-Type:WEB服务器告诉浏览器自己响应的对象的类型和字符集
  • Content-Length:响应体的长度
  • Content-Encoding:web服务器指明自己使用什么压缩方法(gzip,deflate)来压缩响应中的对象。
  • Content-Language:WEB服务器告诉浏览器自己响应的对象的语言者
  • Server:指明HTTP服务器的软件信息
  • Location:用于重定向一个新的位置, 包含新的URL地址

插 件

 下载下来的插件有两种:

  • dll。复制 dll 到 fiddler 的安装目录中的 scripts 文件夹中,然后重启 fiddler。
  • exe 。安装时会在当前文件夹下生成一个 dll, 复制 dll 到 fiddler 的安装目录中的 scripts 文件夹中,然后重启 fiddler。

查看已经安装的插件:菜单栏 ---> Tools ---> Options

如果想删除这个插件,直接在 scripts 中删除相应的 dll 就可以了。

4、charles 使用教程

下载、安装

Charles 4.5.6 中文版(Windows便携免安装):https://www.52pojie.cn/thread-1600964-1-1.html

百度网盘链接:https://pan.baidu.com/s/1y7KuzSg_SKmtEP4OTRycwg?pwd=52pj  提取码:52pj
直接下载:https://www.123pan.com/s/2GLRVv-CW4Gv
注册信息:
用户名:52pojie
注册码:E63519EFB77448393C

1. 下载地址:https://www.charlesproxy.com/latest-release/download.do

2. 下载之后安装。按照默认next 即可,然后选择路径。

3. PJ:https://www.zzzmode.com/mytools/charles/

注意:需要重启 charles

安装 证书

在弹出的 证书窗口中 ---> 安装证书 ---> 本地计算机 ---> 证书存储( 浏览 )---> 手信任的根证书颁发机构 ---> 下一步 ---> 完成

代理 设置

菜单栏 Proxy ---->勾选 "Windows Proxy",抓取电脑本地发送的请求。

设置代理 https 端口

  • http 代理:菜单栏 ---> Proxy ---> Proxying Settings

  • https 代理:菜单栏 ---> Proxy ---> SSL Proxying Settings ---> 勾选 "Enable SSL Proxying"

  • 允许所有SSL代理:Add ---> Host : * 和 Port : 443。这样就可以使得所有带锁请求允许被操作

tools ---> Rewrite

点击右侧的 add

移动端 配置

  • 查看 Charles 端口:Proxy ---> Proxy Settings ---> Port:8888,勾选 "Enable transpare proxying"
  • 查看电脑 IP:Help ---> Local IP Address
  • 手机端 WiFi 配置:WiFi ---> 修改网络 ---> 代理 ---> 然后输入电脑IP、端口(代理端口8888)
  • 返回 Charles,界面弹出连接 IP 提示,点击 Allow ---> 完成配置

设置好代理后,需要安装 charles 的 证书,安装好证书后,才能解密 https 的流量。。。

主界面

Charles 工具的几个重要按钮:

  • 扫帚 图标:清屏
  • 红圆点 图标:抓包 / 停止抓包
  •  图标:开始 / 停止  SSL 代理
  • 乌龟 图标:模拟弱网络( 流量控制 )
  • 六边形 图标:断点
  • 钢笔 图标:构造一个请求,然后发送,即模拟请求
  • 刷新 图标:重新发送选中的请求
  • 对勾:
  • 工具 图标:一些工具。断点,映射,篡改,DNS 洪泛
  • 设置 图标:设置

Charles 主要提供两种查看封包的视图,分别名为 Structure 和 Sequence

Structure 模式( 结构化显示,就是按域名进行分类 ):

  • 以域名划分请求信息,便于定位需求分析和处理的数据
  • 请求的数据结构一目了然
  • 关键字段:Overview 即 概要, Contents :即 内容

Sequence 模式( 序列显示,就是按请求顺序显示 ):

  • 以数据请求速度快慢的顺序去执行,请求快的就在前面显示,可以清晰的看到全部请求,以及请求中的资源请求、图片、文本、音乐等。其中,Filter 可以过滤请求

Proxy 菜单包含以下功能:

  • Start/Stop Recording:开始/停止 记录会话。
  • Start/Stop Throttling:开始/停止节流。
  • Enable/Disable Breakpoints:开启/关闭断点模式。
  • Recording Settings:记录会话设置。可以过滤请求
  • Throttle Settings:节流设置。配置 Charles 的网速模拟。
  • Breakpoint Settings:断点设置。
  • Reverse Proxies Settings:反向代理设置。
  • Port Forwarding Settings:端口转发。
  • Windows Proxy:记录计算机上的所有请求。
  • Proxy Settings:代理设置。
  • SSL Proxying Settings:SSL 代理设置。
  • Access Control Settings:访问控制设置。
  • External Proxy Settings:外部代理设置。
  • Web Interface Settings:Web 界面设置。

基本功能

复制 curl 时中文乱码

修改 charles 文件目录下的 Charles.ini 文件,增加
vmarg.6=-Dfile.encoding=UTF-8

过滤  请求

抓取到的网络包越来越多,可以使用过滤功能来过滤出我们想要的网络请求。菜单栏 ---> Proxy ---> Recording Settings,可以设置网络包的过滤选项。

过滤选项中有Include 和 Exclude 两种选项。只有当 Include 为空时,Exclude 中的设置才会生效。过滤条件支持通配符。

修改 网络包

修改历史请求

可以将历史的请求修改后,再次发送。选中某个请求,点击上方工具栏中的 蓝色钢笔按钮,就可以进行修改。完成修改后,点击下方的Execute执行请求。

添加 断点

窗口上方的工具栏中,第四个按钮就是Enable BreakPoints,用来启用或禁用断点。也可以在 Proxy -> BreakPoints Setting中设置更多具体内容。

Charles中可以像调试程序一样添加断点。方法是右键点击左侧窗口的某个请求,选择BreakPoints添加断点。这样当这个请求发出或者收到response的时候,就会先被Charles拦截下来,并触发断点。

触发断点后,可以对断点的网络包进行各种编辑,然后再继续。点击Execute就可以继续。

同时,也可以在Proxy -> BreakPoints Setting设置断点的各种规则。例如,是在request的时候触发还是 response的时候。

由于设置断点时,Charles是先拦截下整个网络包,再触发断点,当网络包比较大的时候,常常会导致应用超时,触发网络错误的警告,因此,自动地根据规则修改网络包有时显得尤为重要。这就是下面要说的篡改。

拦截后可以修改post参数

然后可以修改Response,不用去麻烦测试修改数据,

设置断点。在请求位置右键,选择Breakpoints

然后选择Proxy的Breakpoint Settings选项,点击进入设置

点进去可以看到我们添加到Breakpoint 的所有请求,双击我们要改的那个请求,如果想断请求,勾选Request,想断响应,勾选Response

设置后点击OK,关闭上面的弹窗,下面的弹窗中我们勾选想断的请求,点击OK

下次请求就可以断请求或者响应了

改写后点击 Execute执行 ,注意改的时候,客户端一般有超时限制(过了超时时间就不会等服务端的返回数据了),所以一般只适用改动较小的测试或者异常测试

篡改(Rewrite)

Rewrite 是按照一组事先设置的规则,篡改特定的网络包中的数据。

在 Tools -> Rewrite 中,选中Enable Rewrite 来开启 Rewrite

Rewrite

勾选 Debug in Error Log 选项,就能在 Charles 控制台中看到 Rewrite 的记录。

首先要在右侧的规则列表中添加一个新规则。在新规则中添加要RewriteLocation,然后再下方添加具体的篡改规则。规则中可以使用通配符。

这样稍后匹配条件的网络包到达的时候,Charles就会自动将其中的内容按规则篡改。

示例:比如 192.168.1.2:8888/a/b/test  与192.168.1.3:8888/a/b/test  两个请求就要分别映射,而 Rewrite 就可以解决这个问题 ,可以把所有的请求url为/a/b/test的请求都构造成同一个数据。

方法:

  • 1、入口:Tools-》Rewrite
  • 2、勾选 Enable Rewrite,点击Add
  • 3、Name根据自己情况随便写,Add后Path路径填写我们请求的url,点击OK

然后Add返回值,选择response,Type选择body,直接把要构造成的json串写到Value中,Ok

下次请求,就会发现192.168.1.2:8888/a/b/test  与192.168.1.3:8888/a/b/test  两个请求都返回了我们自己的json数据。

rewrite还可以批量修改我们的请求参数,比如把所有的上传的did参数都由ANDROID_4af16d720602b56改为ANDROID_123456123456,我们可以按照下图构造:

其中上面部分具体内容为:

下半部分具体内容为:

这样下次请求,我们的did参数就变为我们想要的ANDROID_123456123456了。这种方法对  有要求手机等为新设备才执行某策略的功能点很适用。

映射 Map

Charles 提供的映射功能可以将本地文件或者远程的服务器作为某个请求的 Response。可以方便地进行一些特殊的测试。

  • Map Local。本地映射。在 Tools -> Map Local。可以选择一个本地文件作为某个请求的Response,并且 Charles会帮你封装好Response
  • Remote Remote。远程映射。和本地映射的功能类似,只是将数据源换成了远程服务器。相当于将请求交给另一个服务器处理

在主机名上右键,选择 map remote

在弹出的弹窗中,填写要映射到的地址

映射本地。在一个请求上 右键 ---> 选择map local

模拟 慢速网络

Charles 还可以模拟不同网速环境,可以很方便地测试应用在网络差的情况下的bug。

Proxy -> Throttle Settings 中勾选 Enable Throttling,或者直接点击窗口上方的工具栏中的  乌龟🐢按钮  就可以启用,这个按钮十分形象。

Proxy -> Throttle Settings 中,添加要针对的Locations,如果选中Only for selected hosts,并且Locations中有数据,则只有 Locations列表中的请求会被限速,否则会对全局限速。在Throttle Configuration中可以对网络环境进行十分详细的配置,包括网络的稳定程度、网速、环境等。

SSL 代理

在使用 Charles 的过程中,我们会发现,只有未加密的 Http 请求才能被Charles 正确的解析出数据,其余的Https 请求都处于加锁的状态,但我们不可避免的需要抓取 Https 的包。SSL代理就可以完美解决这个问题。

要启用 SSL 代理,先要在 Proxy -> SSL Proxying Settings 中勾选 Enable SSL Proxying,然后配置要代理的 Location,一般可以直接填星号,以匹配所有请求。

安装 Charles 的证书

Charles中的HTTPS代理的原理是,Charles 充当一个中间人,针对目标服务器动态地生成一个使用Charles根证书(Charles CA Certificate)签名的证书;请求发生的时候, Charles会接收web 服务器的证书,而把自己生成的证书给客户端看。

因此在在使用Charles作为HTTPS代理时,客户端在请求HTTPS接口的时候会弹出安全警告,提示Charles根证书不被信任。我们需要添加Charles根证书为信任证书中。

方法如下:

  • 1、点击Help -> SSL Proxying,根据被抓包设备的类型,来选择对应的安装选项(如果是 OSX 就直接选择Install Charles Root Certificate);
  • 2、如果是iOS真机,则会弹出下面的提示,此时不用按上面的提示来配置代理,只要按照上文的步骤配置过代理了就可以了。然后在Safari中打开chls.pro/ssl安装Charles的证书,就 OK 了。

设置好 SSL 代理后,HTTPS 请求就统统解锁啦!

注意:iOS9 以上系统要使用 Charles 作为 SSL 代理的话要关闭 APP Transport Security ,关闭方法为在 APP的 info.plist 文件添加以下key:

<key>NSAppTransportSecurity</key>
<dict>
     <key>NSAllowsArbitraryLoads</key>
     <true/>
</dict>

Charles 是一个强大的抓包调试工具,它的功能远不止这些

配合 Postman

Postman 是一个测试 API 的利器。

5、常用 功能

把远程JS映射到本地文件上

在爬虫开发的过程中,想要修改网站的 JS 来规避网站的无限 Debugger ,或者想给线上的 JS 加点调试的语句,我们就需要把远程的 JS 映射到本地的文件上,这样就可以通过修改本地的文件进行线上的调试。

面对这样的需求,可以通过一些工具完成:

  • Windows 下可以使用 Fiddler  ,Mac 下可以使用 Charles
  • Chrome 开发工具自带的 Override
  • ReRes 和 Resource Override 插件
  • Whistle - 跨平台 web 调试代理工具

fiddler 的 AutoResponder

参看上面说明。

charles 的 Map (映射)

参看上面说明。

Chrome 的 Override

使用 Chrome 开发者工具 overrides 实现不同环境本地调试

chrome 浏览器使用 Overrides 线上调试:https://juejin.cn/post/7083396282072432647

在需要调试的网页下打开开发者工具,在Sources面板下选择overrides菜单。

选择一个本地文件夹来存放本地副本,开发者工具会有一个权限请求,选择允许

启用本地覆盖 ,面板上会显示你刚刚选择的文件夹。

在Source面板下的page里选择你要修改的文件,ctrl+s保存修改,此时会在overrides中你选择的文件夹下生产目录对应的本地副本文件。当存在本地副本时,本地覆盖启用,且工作空间下有该网站的同名覆盖文件,浏览器会优先执行覆盖文件。

刷新页面,此时会调用本地副本文件,可以在控制台看到我刚刚对index.js 增加的log。

现在就可以愉快地在各个环境进行调试啦!

浏览器 ReRes 插件

在线安装 reres 插件,或者下载好离线版本之后打开 chrome://extensions/ 拖入即可安装。安装好后,在 chrome://extensions/ 找到 ReRes ,勾选允许访问文件网址,至此完成 ReRes 的配置。

还有一个 GoRes 插件,功能和 ReRes、Fiddler 类似。

ReRes 的使用

这个插件的优点就是简洁。刚刚安装好的软件,打开是这个样的:

点击添加规则是这个样子的:

ReRes 使用方法也很简单。

点开添加规则之后:

  • If URL match栏,填入的是匹配 URL 的规则,这里填入的是一个正则表达式,比如我想配置github.com/login这个域名,可以使用*://github.com/login*这样的方式匹配,或者使用偷懒的方式直接匹配网站路径下的文件^https://www.xxxAAA.cn/js/jquery.min.js

  • If URL match注意事项:不要填开头的/和结束的/x,如/.*/g请写成.*

  • Response栏,填写的是映射的响应地址,比如在 Window 下,我想要将 E 盘下的 index.js 文件映射回去,使用本地地址的方式是file:///E:/index.js,使用线上地址的方式是http://localhost:3000/xxx/index.js

  • Response注意事项:线上地址以http://开头,本地地址以file:///开头,Mac 推荐使用超级右键可以直接复制文件路径,同时上一点中提到的线上地址需要启动一个可以访问静态文件的服务,可以使用 Flask 快速搭建一个。

添加完成,点击保存,重新加载页面即可。

快速练手

打开夜幕的 JS 逆向的课程练习网站,打开第九题使用符号加密的JS练习题。可以看到网站的index.js这个文件是混淆后的代码。

为了方便调试,这里使用ReRes将解密后的明文替换掉这个混淆的文件。右键需要替换的文件,使用copy link address

粘贴到 Reres 的If URL match栏中。

之后复制需要映射的本地文件的路径,粘贴至Response栏,点击保存即可。

重新刷新网页,即可加载,为了测试是否加载成功,可以写个弹窗测试下。

到这里就完成了远端代码映射到本地的操作。

二次代理

二次代理原理

流程

  • 客户端发送请求:客户端发起网络请求。
  • 请求到达 Fiddler:客户端的代理设置已将 Fiddler 设置为代理服务器,请求被发送到 Fiddler。
  • Fiddler 接收请求:Fiddler 接收到客户端的请求。
  • 请求发送给上游代理:根据你在 Fiddler 中设置的上游代理(Clash),Fiddler 将请求转发给 Clash 上游代理。
  • Clash 上游代理处理请求:Clash 上游代理接收到来自 Fiddler 的请求,按照其配置和规则进行处理,并将请求发送给实际的目标服务器。
  • 请求发送给目标服务器:Clash 上游代理将请求转发给实际的目标服务器。
  • 目标服务器处理请求:目标服务器接收到请求,并根据请求内容进行处理。
  • 响应返回给 Clash 上游代理:目标服务器生成响应,并将其发送回 Clash 上游代理。
  • Clash 上游代理发送响应给 Fiddler:Clash 上游代理将响应发送给 Fiddler。
  • Fiddler 接收响应:Fiddler 接收到来自 Clash 上游代理的响应。
  • 响应发送给客户端:Fiddler 将响应发送回客户端,作为原始请求的响应。

fiddler 二级代理

在 fiddler 设置好捕获 HTTP 和 HTTPS 之后,再配置网管设置。

Gateway 子菜单提供了用于配置 Fiddler Classic 高效访问网络方式的选项。默认情况下,Fiddler Everywhere“链接”到系统的默认代理。网关设置允许您覆盖该行为。

使用系统代理(推荐)

默认选择。Fiddler 使用 OS 系统代理。一些浏览器和许多应用程序默认使用系统代理,并在它发生变化时收到通知。

手动代理配置

指定上游代理字符串(第一个文本框)和代理旁路列表(第二个文本框)。

代理字符串:要手动设置网关代理,请输入代理字符串:proxyserver:8080

要以特定于协议的形式输入代理:http=httpproxy:8080;https=httpsproxy:8080

绕过列表——代理绕过列表支持以下值:

  • 通配符。例如,*.``extranet.example.com``;
  • 特殊<local>标记,表示不包含句点的任何主机名。
  • 特殊令牌,它删除了主机名和主机名<-loopback>的默认绕过。以下示例演示如何列出以分号 ( ) 分隔的多个旁路条目。127.0.0.1``localhost``;

*.extranet.example.com;<local>;<-loopback>;

无代理

将所有流量直接发送到根服务器

clash 配置

Charles 二级代理

菜单栏点击【Proxy】-->点击【external proxy settings...】

勾选【Use external proxy servers】-->左侧三个选项都打勾并将对应【Web ProxyServer】都设置成【127.0.0.1:7890】(clash端口是7890)-->点击【ok】-->重启Charles。

这三个分别对应:http、https、SOCKS

之后重启charles即可。

有些情况下死活抓不到包,这种情况下我们可以使用 charles + clash + Proxifier 强制进行抓包

安装 证书 到 系统证书目录下

From:https://testerhome.com/topics/21956
OpenSSL :https://slproweb.com/products/Win32OpenSSL.html

把 charles,Fiddler 证书安装到安卓根目录,解决安卓微信 7.0 版本以后安装证书也无法抓包问题,需要 root

安装为系统证书好处

  • 安装用户证书必须要设置开机密码,而且设置后就不能取消,除非先删掉所有的用户证书。如果安装为系统证书就不需要设置开机密码,自动化操作时更方便。
  • 谷歌在 安卓7.0 修改了安全策略,安卓系统 大于 7.0 时 APP默认不信任用户证书,只信任系统证书,安装为用户证书,对APP的HTTPS抓包会失败。安装为全局证书才能被所有APP信任,方可进行HTTPS抓包。

解决方法

  • 降级 APP
  • 降级 系统版本
  • 将用户证书偷渡成系统证书,需要有 root 权限。将 charles 的 CA 证书安装进系统信任的证书目录下,这样在开启 charles 代理的时候,系统就会认为CA证书安全,从而可以获取 https 数据。

将证书安装为安卓系统证书

Android 的系统证书的存储位置是 /system/etc/security/cacerts,证书文件必须是PEM格式,而且文件命名必须符合系统证书规范。

第1步:下载Fiddler或Mitmproxy的证书文件,PEM或者DER格式均可。  
第2步:获取有效的系统证书文件名 
        # 如果是PEM格式的:  
        openssl x509 -inform PEM -subject_hash_old -in mitmproxy-ca-cert.pem -noout  
        # 如果是DER格式的:  
        openssl x509 -inform der -subject_hash_old -in FiddlerRoot.cer  -noout  
        # 例如,输出8bbe0e8d  
第3步:转换证书格式为PEM格式,并重命名证书为有效的系统证书名。  
        # 如果是PEM格式的:  
        openssl x509 -inform PEM -in mitmproxy-ca-cert.pem -out 8bbe0e8d.0  
        # 如果是DER格式的:  
        openssl x509 -inform der -in FiddlerRoot.cer -out 8bbe0e8d.0  
  
第4步:上传准备好的证书文件到设备。例如:adb push 8bbe0e8d.0 /sdcard/  

第5步:复制证书到Android系统证书目录
        adb shell  
        su   
        mount -o rw,remount /system   
        cp /sdcard/8bbe0e8d.0 /system/etc/security/cacerts  
        chmod 644 /system/etc/security/cacerts/8bbe0e8d.0  
        # 上述可整合为一句  
        adb shell "su -c 'mount -o rw,remount /system;cp /sdcard/8bbe0e8d.0 /system/etc/security/cacerts;chmod 644 /system/etc/security/cacerts/8bbe0e8d.0;'"  
        # 重启设备  
        adb reboot  

adb shell
su root 
cd /data/misc/user/0/cacerts-added  #进入到用户证书目录
mount -o remount,rw /system    #将系统证书目录权限改成可读可写。要不没权限写入文件
cp * /etc/security/cacerts/         #这里可以使用cp也可以使用mv
mount -o remount,ro /system         #移动完之后记得把权限改回只读

Fiddler 证书安装到安卓根目录

一台已 root 过的手机,开启开发者选项,然后连接电脑。

安卓系统证书跟 Fiddler 证书的格式不一样,需要转换。

1、安装 OPENSSL【Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions】。linux 默认已经安装。如果使用 linux 系统,可以忽略这一步。

2、下载 fiddler 证书到电脑上

3、打开命令窗口,执行以下命令,查看证书哈希信息:

        openssl x509 -inform der -subject_hash_old -in FiddlerRoot.cer
        openssl x509 -inform der -subject_hash_old -in FiddlerRoot.cer -noout

安卓系统的安全证书在 /system/etc/security/cacerts/ 目录下,进入adb shell,打开目录就能看到这些证书文件。

文件名是 Hash值 加 数字后缀。后缀名的数字是为了防止文件名冲突的,比如如果两个证书算出的Hash值是一样的话,那么一个证书的后缀名数字可以设置成0,而另一个证书的后缀名数字可以设置成1

转换证书:openssl x509 -inform DER -in FiddlerRoot.cer -text > [哈希].0

用记事本编辑证书,将 -----BEGIN CERTIFICATE----------END CERTIFICATE----- 之间的部分放到文件最前面。可以使用 cat 命令随便查看一个 证书文件,就可以看到都是放在文件的最前面

将证书放到手机的 /system/etc/security/cacerts/ 下

执行 adb 命令连接手机,获取权限,把文件夹挂载为读写模式,把文件复制到证书根目录

adb root
adb remount
adb shell mount -o rw,remount /system
adb push e5742ab9.0 /system/etc/security/cacerts

重启手机,可以看到 Fiddler 的证书已经变成系统证书了,接下来就可以愉快的抓包了

Charles 证书安装到安卓根目录

一台已 root 过的手机,开启开发者选项,然后连接电脑。下载证书到电脑上

  • 电脑端浏览器输入 chls.pro/ssl 即可下载,
  • 如果未下载也可以在 charles >> help >> SSL Proxying >>Save Charles Root Certificate 保存证书到本地文件夹

查看证书信息:

openssl x509 -subject_hash_old -in charles.pem
openssl x509 -inform PEM -subject_hash_old -in charles.pem -noout

重命名证书:mv charles.pem 5a3b138a.0

执行 adb 命令连接手机,获取权限,把文件夹挂载为读写模式,把文件复制到证书根目录

adb root
adb remount
adb shell mount -o rw,remount /system
adb push e5742ab9.0 /system/etc/security/cacerts

以上就 OK 了。如果不放心可以 cd 到对应目录,检查文件是否存在,文件权限是否与其他证书一致。证书安装 OK,其他代理选项正常配置即可

如果出现 <hash>.0:Read-only file system 这个警告,这是因为 system 文件为只读,需要将其挂载为可读写。一般的解决方法是:mount -o rw,remount /system 修改system读写权限,然后再进行复制操作。如果修改了之后还是提示Read-only file system,还有方法

adb root
adb disable-verity
adb reboot #手机会重启,不用关闭cmd窗口,手机可能需要拔掉数据写重新连接
adb root
adb shell 
mount -o rw,remount /system    #再次进行修改

然后就可以进行复制操作了。复制完之后输入reboot 重启

重启之后,打开设置 ---> 更多设置 ---> 系统安全 ---> 信任的凭据中可以看到安装的证书

Charles 工具配置

首先是 proxy - proxy settings,选择 socks proxy 模式,如图配置,点击ok完毕

取消勾选 windows proxy,因为我们不需要用来抓取windows的数据包。

然后是 proxy-ssl proxy settings

点 add,host、port 都填 * 即可。

设置完成后,就可以通过 charles 代理查看到 https 的数据了。 

Burpsuite 导入 Charles 的证书

打开 charles - help - ssl proxying

输入密码,导出证书,得到一个.p12的文件

往 burp 中导入

选择文件,输入密码,导入成功

联合 burp

charles 抓包能力强,但是不好做修改数据包之类的操作,所以就再做一层代理到 burp 来方便渗透测试人员操作。

proxy - external proxy settings

记得两个选项都要配置127.0.0.1:8080,因为我们的burp就是默认监听8080端口的,若不是8080,改成自己burp上监听的端口就可以了。

使用 Magisk 自动移动证书

Magisk 载入 Move Certificates 模块后,就会把证书从用户目录自动移动到系统目录,重启手机证书生效。 movecert:https://github.com/Magisk-Modules-Repo/movecert

Magisk 插件仓库

MagiskModuleManager 基于 FoxMMM 进行开发,可以 搜索,安装 "Magisk模块"。

Android12 HttpCanary系统证书安装 Magisk模块movecert:https://blog.csdn.net/weixin_56039202/article/details/125794003

adguardcert 基于 movecert 开发:GitHub - AdguardTeam/adguardcert: Magisk module that allows using AdGuard's HTTPS filtering for all apps

安卓12(高版本9+以上)安装Charles证书到系统证书安装目录:安卓12(高版本9+以上)安装Charles证书到系统证书安装目录_安卓手机安装charles证书-CSDN博客

步骤:

  • 先安装证书到用户证书的安装目录
  • 把刚刚安装到用户目录的证书 (例如:06c57dd5.0) 移动到 adguardcert 的证书目录中:/data/adb/modules/aguardcert/system/etc/security/cacerts
  • 如果出现 Read-only file system,执行下面adb语句
    adb root                    # 开启root权限
    adb remount             # 开启remount 权限,可修改删除系统应用
  • 重启手机,即可在系统证书目录搜索到证书

使用 MT 管理器

MT 管理器 需要获取 root 权限,才能把用户证书移动到系统证书目录下。

/data/misc/user/0/cacerts-added        # 用户证书目录
/etc/security/cacerts/                          # 系统证书目录

6、HTTP Toolkit

github:HTTP Toolkit · GitHub
官网文档:HTTP Toolkit Documentation

HTTP Toolkit使用攻略:https://www.freebuf.com/articles/network/257070.html

要抓 App 的包,首先需要App信任抓包软件的证书。Android 系统从 7.0 开始不再信任用户 CA 证书,所以抓包时需要把 CA 证书安装到系统 CA 证书目录。如果用 Magisk root 只需要安装一个模块 Move Certificates。如果没有就可以使用 HttpToolkit 这个抓包软件。但是也需要 root 权限。HTTP Toolkit 比起 burp更像 fiddler,就功能而言比较薄弱,只能抓包改包,但是会自动安装证书并移动证书到系统证书目录下,这点比较方便。

HTTP Toolkit 是一款开源的调试抓包工具,可以在 github 找到该项目。它可以抓取和调试HTTP和HTTPS通讯的数据,适用于Windows,Mac,Android和Linux。它能够自动配置代理,使用方便简单,可进行数据包的监听、拦截与修改。它支持桌面浏览器,例如Chrome,Edge和Firefox;Android应用程序和浏览器;后端和脚本语言,例如 Node.js,Python和Ruby等。它通过使用Visual Studio Code的编辑器Monaco的功能,对JSON,HTML,JS,hex和其他内容进行突出显示和自动格式化,从而挖掘消息正文。

HttpToolkit 原理

  • 1、通过 ADB 将 HTTP Toolkit CA 证书推送到设备上。
  • 2、从 /system/etc/security/cacerts/ 中复制所有系统证书到临时目录。
  • 3、在 /system/etc/security/cacerts/ 上面挂载一个 tmpfs 内存文件系统。这实际上将一个可写的全新空文件系统放在了 /system 的一小部分上面。 将复制的系统证书移回到该挂载点。
  • 4、将 HTTP Toolkit CA 证书也移动到该挂载点。
  • 5、更新临时挂载点中所有文件的权限为 644,并将系统文件的 SELinux 标签设置为 system_file,以使其看起来像是合法的 Android 系统文件。

打开下载的 exe,使用手机下载的 apk 扫描二维码,即可抓取手机的包,不用再手动设置代理会自动设置。也可以使用 adb 连接就可以直接抓包,啥都不用设置。

打开软件,可以点击对应的浏览器打开抓包程序,也可以进行安卓抓包或terminal抓包,该软件可以自动设置代理,关闭浏览器或窗口后自动关闭,非常方便。

浏览器抓包 

点击一个想要监控数据包的浏览器。

该软件打开了该浏览器并自动配置代理,无需手动配置。

点击 View 可以查看抓到的数据包。

可以点击下方的暂停标志来暂停或开启抓包。

也可以在左下角搜索框,可进行关键字搜索。

安卓软件抓包 

点击安卓抓包

下载 HTTP Toolkit 的 app 应用。

安装好后打开app,选择 Scan code 扫描电脑上的二维码。

系统会自动设置VPN,连接到电脑客户端,然后就可以抓取安卓应用的包了。

Terminal 抓包 

HTTP Toolkit 可以抓取cURL、git、HTTPie、apt-get、Node、Ruby、Python、PHP、Perl等等的包,在Linux下启动软件,然后点击 Fresh Terminal。

输入 apt-get update 获取更新的软件包列表信息。

7、小黄鸟 HttpCanary 抓包

简介

HttpCanary 可以看成是移动端的 Fiddler 或者 Charles,是专门为移动端设计的强大的 Android 抓包工具并且无需 ROOT 权限。支持 HTTP1.0/1.1/2/HTTPS/WebSocket/TLS/SSL 等网络协议抓取和注入,支持静态注入和动态注入模式,可以查看抓包内容请求参数,修改请求参数、请求头、请求体、响应码、响应头和响应体等数据。

HttpCanary 提供了各式各样的数据浏览功能,比如:Raw视图、Hex视图、Json视图等等。

* 数据浏览
HttpCanary具有多种不同的视图浏览功能。
Raw视图:可以查看原始数据;
Text视图:以Text的形式查看请求/响应体内容;
Hex视图:以Hex的形式查看请求/响应体内容;
Json视图:格式化Json字符串,支持节*点的展开、关闭和复制等操作;
图片视图:可以预览BPM、PNG、GIF、JPG、WEBP等格式的图片内容;
音频视图:可以播放AAC、WAC、 MP3、OGG、MPEG等格式的音频内容;

* 内容总览
HttpCanary支持浏览一个网络请求的总体概况,包括URL、HTTP协议、HTTP方法、响应码、服务器Host、服务器IP和端口、Content-Type、Keep-Alive、时间信息、数据大小信息等。

* 数据筛选和搜索
HttpCanary提供了多维度的数据过滤器和搜索功能,比如通过应用、Host、协议、方法、IP、端口、关键词搜索过滤等。

* 屏蔽设定
HttpCanary可以对网络请求的数据发送以及服务器响应进行屏蔽操作,这个功能可以非常方便地帮助开发者进行Rest API的调试。

* 插件
HttpCanary提供了丰富的扩展插件,包括Host屏蔽、Mime-Type屏蔽、图片音频视频下载、请求性能统计、微信定位漂移等。按照设计,开发者还可以开发自己的Plugin集成进HttpCanary中,也可以安装扩展Plugin(功能尚未开放)。Plugin可以对数据包进行修改等自定义操作,也就是一个高级的注入器!我们将会尽快发布Plugin-SDK!

HttpCanary高级版特性:

  • 1. 无广告
  • 2. 极速模式
  • 3. 断点和注入(中国区不可用)
  • 4. 重发、高级重发和编辑重发
  • 5. 指定数据包屏蔽
  • 6. 复制cURL
  • 7. 全部插件可用

HttpCanary v3.3.6 去Play商店验证提示破解高级版(v3.x版无注入功能)
HttpCanary v2.8.1 破解高级版去升级版(该旧版支持注入功能可以共存)

安装证书

From:https://www.52pojie.cn/thread-1592529-1-1.html
链接:https://pan.baidu.com/s/11Jhap8rG-7sq-iydc2LYXQ?pwd=7788  提取码:7788

抓包的都知道小黄鸟,但是小黄鸟的解锁版版本很多,因为这个软件的解锁版兼容性不好,这里提供5个版本,那个能用用那个。测试大多数版本手机上正常,模拟中运行崩溃,不行的可以尝试换别的模拟器试试。  335根336其实都是3.3.6版本,根据机型选,打不开的换个版本,比如我的Realme上336打不开就用的335。

大层面上就2个版本,图标不一样,如上图,

  • 张开翅膀的版本功能多。
  • 合并翅膀的功能少。

root 的手机如果没有解锁system没法复制证书的,请在面具里面安装移动证书模块,软件里搜索Move Certificates就行了,下载比较慢,点安装后等个其八分钟可能会告诉你安装成功。

没有root的手机不要急,设置里面导出证书手动安装(安装完不是根证书,功能一样,不用理会安装根证书的提示),安卓11必须手动安装证书,从软件设置导出证书然后设置里面安装就行。

8、proxifier

官网:https://www.proxifier.com/

汉化:https://www.52pojie.cn/thread-1940721-1-1.html

Proxifier v1.14 安卓绿化版 apk 破解版:https://www.applnn.cc/24555.html

简介

Proxifier是一个强制转发软件。某些软件即使配置代理后也不走代理,可以使用这个强制转发软件的包

先去官网下载 客户端并,安装时一路next下去,安装完毕后启动 Proxifier,点击Registration Key

下载注册工具:https://github.com/y9nhjy/Proxifier-Keygen

逆向过程可见 Proxifier注册机 | y9nhjy's Blog

下载完毕解压后用如下命令:python Proxifier_Keygen.py

会生成一个注册码

使用 Proxifier 把流量转发到 fiddler

任意网络软件抓包利器配合fiddler:https://www.52pojie.cn/thread-1648769-1-1.html
Proxifier给win软件强开代理方便Fiddler抓包:https://zhuanlan.zhihu.com/p/687346251

fiddler 配置

Proxifier 添加代理服务器

1)配置代理服务器:配置文件 → 代理服务器 → 添加

添加规则

将默认的代理规则更改为 ‘Direct’ 直连模式,表示在自定义规则之外的连接采用直接访问模式

举例:在访问 www.baidu.com 时是直接进行访问,而不是通过代理服务器

测试代理服务器是否可用:点击检查按钮

9、Yakit

官网:https://www.yaklang.io/products/intro/

基于安全融合的理念,Yaklang.io 团队研发出了安全领域垂直语言Yaklang,对于一些无法原生集成在Yak平台中的产品/工具,利用Yaklang可以重新编写
他们的“高质量替代”。对于一些生态完整且认可度较高的产品,Yaklang能直接编译融合,并对源码进行必要修改,更好地适配Yaklang语言。
但是限于使用形式,用户想要熟练使用Yak 语言,需要学习Yak语言并同时具备对安全的一定理解。
Yak 语言核心提供了非常强大的安全能力,为了让 Yak 本身的安全能力更容易贴近大家的实际使用,降低使用的门槛,我们在为 Yak 编写了 gRPC 服务器,
并使用这个服务器实现 / 构建了一个客户端:Yakit。
Yakit 是 Yak 的衍生项目,对于一些不想写代码的安全从业者,Yakit会为Yak中所有的能力提供合适的GUI,通过Yakit的GUI去操控引擎的能力,
随着版本更迭,GUI会更加成熟。Yakit的gRPC服务器,让用户部署更加方便快捷,与平台无关,可选择远程部署或直接本地启动在主机中使用。

Yakit 是一个高度集成化的 Yak 语言安全能力的输出平台,使用 Yakit,我们可以做到:

  1. 类 Burpsuite 的 MITM 劫持操作台
  2. 查看所有劫持到的请求的历史记录以及分析请求的参数
  3. 全球第一个可视化的 Web 模糊测试工具:Web Fuzzer
  4. Yak Cloud IDE:内置智能提示的 Yak 语言云 IDE
  5. ShellReceiver:开启 TCP 服务器接收反弹交互式 Shell 的反连
  6. 第三方 Yak 模块商店:社区主导的第三方 Yak 模块插件,想要的应有尽有
  7. ........

10、eCapture(旁观者) 无需证书

https://github.com/gojue/ecapture

eCapture(旁观者): 基于eBPF技术实现TLS加密的明文捕获,无需CA证书。

eCapture:无需CA证书抓https明文通讯

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值