一个项目引发的蝴蝶效应😥

一、前言

  前几天在GitHub上面看到今日校园自动打卡的这样一个项目,真的太棒啦!

  项目地址:https://github.com/CarltonHere/auto-cpdaily

  粗略浏览了下项目源码,大致就是模拟登录,模拟提交,消息通知这样一个流程。但要写起来,其实还是需要学习很多知识的(反正我现阶段是写不出来,我太菜了)

  写自动化脚本有点类似于写网络爬虫,主要思路就是模拟人的操作去完成某项重复性的任务。(网络爬虫本质上就是自动化程序)

  写网络爬虫的大致思路就是确定URL获取响应数据解析响应数据持久化存储

  在编写程序之前,我们首先要做的,就是搞清楚服务器和客户端之间的信息是如何传递的,数据何以请求,何以提交?需要构造哪些参数等等。

  所以学会抓包是编写自动化程序的第一步。

二、如何抓包

1、Web浏览器

  PC端网页直接打开F12控制台,选择network选项卡就可以清晰的看到浏览器和服务器之间的py交易了。

  选择相应的数据包,分析下各种参数就可以很顺利的进行下一步了。

2、手机APP

  随着移动互联网的兴起,有些产品没有开发网页端,无法使用浏览器开发工具进行抓包,所怎么办呢???

  这是我这两天我学习的主要任务,学习之路甚是坎坷哇,简直是从入门到弃坑了。。。

三、什么是Fiddler

  Fiddler是一个老牌的http代理调试工具。和Charles差不多,都是很强大的抓包测试工具。

  下面是他的原理图,相当于在服务器和客户端正常对话时,在中间插了一刀,劫持了双方交流的信息。(何以称呼?代理商、中介、媒婆?悉听尊便。)

四、Fiddler的界面组成

  Fiddler的下载和安装这里就不做笔记了,不过值得注意的是,要下载Fiddler的经典版,新版的UI虽然好看,但是似乎功能还不太完善,而且是收费的。

  下载之后打开Fiddler,纯英文的页面,不过。。。不汉化似乎也学的会。

  Fiddler主要有菜单栏工具栏会话列表功能页签命令行状态栏六大块组成。

  网上找点资料大致学一下就可以上手了。(英语能力够强的话,当然可以直接看官方文档)

对各选项卡的具体解释,摘自互联网,方便查阅。

1、菜单栏

1.1、File菜单

Capture Traffic:可以控制是否把Fiddler注册为系统代理。

New Viewer:打开一个新的fiddler窗口。

Load Archive:用于重新加载之前捕获的以SAZ文件格式保存的数据包。

Save:支持以多种方式把数据包保存到文件中。

Import Sessions...:支持导入从其他工具捕获的数据包,也支持导入以其他格式存储的数据包。

Export Sessions...:把Fiddler捕捉到的回话以多种文件格式保存。

Exit:取消把Fiddler注册为系统代理,并关闭Fiddler。

1.2、Edit菜单

Copy:复制会话。

Remove:删除会话。

Select All:选择所有会话。

Undelete:撤销删除会话。

Paste as Session:把剪贴板上的内容粘贴成一个或多个模拟的会话。

Mark:选择一种颜色标记选中会话。

Unlock for Editing: 解锁会话。

Find Session...:打开Find Session窗口,搜索捕获到的数据包。

1.3、Rules菜单

Hide Image Request:隐藏图片回话。

Hide CONNECTS:隐藏连接通道回话。

Automatic Breakpoints:自动在请求前响应后设置断点。Ignore Image触发器控制这些断点是否作用于图片请求。

Customize Rules...:打开Fiddler脚本编辑窗口。

Require Proxy Authentication:要求客户端安装证书。该规则可以用于测试HTTP客户端,确保所有未提交Proxy-Authorization请求头的请求会返回HTTP/407响应码。

Apply GZIP Encoding:只要请求包含具有gzip标识的Accept-Encoding请求头,就会对所有响应使用GZIP HTTP进行压缩(图片请求除外)。

Remove All Encoding:删除所有请求和响应的HTTP内容编码和传输编码

Hide 304s:隐藏响应为HTTP/304 Not Modified状态的所有回话。

Request Japanese Content:选项会把所有请求的Accept-Encoding请求头设置或替换为ja标识,表示客户端希望响应以日语形式发送。

User-Agents:把所有请求的User-Agent请求头设置或替换成指定值。

performance:模拟弱网测试速度。

1.4、Tools菜单

Options...:打开Fiddler选项窗口。

WinINET Options...:打开IE的Internet属性窗口

Clear WinINET Cache:清空IE和其他应用中所使用的WinINET缓存中的所有文件。
Clear WinINET Cookies:清空IE和其他应用中所发送的WinINET Cookie

TextWizard...:选项会启动TextWizard窗口,对文本进行编码和解码。

Compare Session:比较回话。

Reset Script:重置Fiddler脚本。

Sandbox:打开http://webdbg.com/sandbox/

View IE Cache:打开IE缓存窗口。

1.5、View菜单

Show Toolbar:控制Fiddler工具栏是否可见

Default Layout、Stacked Layout、Wide Layout三种界面布局

Minimize to Tray:最小化Fiddler到系统托盘(快捷键:CTRL+M )

Squish Session List:控制回话列表是否水平收缩。

AutoScroll Session list:添加新的回话时,自动滚动到回话列表底部

2、工具栏

  • 备注功能
  • 重新发送请求。
  • 删除请求
  • 当有请求前断点时,点击去发送请求。
  • 流模式。(默认是缓冲模式)
  • 解码
  • 保持回话的数量。
  • 选择你想要抓包或者监听的程序
  • 查找
  • 保存所有会话,文件名以.saz为扩展名
  • 截图
  • 计时器
  • 快捷的打开IE浏览器
  • 清除IE缓存
  • 文本的编码解码工具
  • 分离面板
  • MSDN查询
  • 本机的信息

3、会话列表

  • 请求的ID编号
  • http响应状态码
  • 会话使用的协议
  • 请求发送到的服务器主机名
  • 数据包在服务器中的路径和文件、响应body的字节数
  • 响应头信息Cache-Control的值
  • 响应头信息Content-Type的值
  • 发起请求的本地windows进程
  • 注释
  • 自定义备注

4、功能页签

  • Statistics

通过该页签,用户可以通过选择多个会话来得到这几个会话的总的信息统计。

  • inspectors

提供headers、textview、hexview,Raw等多种方式查看一条http请求的请求和响应,它分为上下两部分:上部分为请求展示,下部分为响应展示。

  • AutoResponse

它可以抓取在线页面保存到本地进行调试,大大减少了在线调试的困难,可以让我们修改服务器端返回的数据,例如让返回都是404的数据包读取本地文件作为返回内容。

  • composer

支持手动构建和发送HTTP,HTTPS和FTP请求,还可以从回话列表中拖曳回话,把它放到composer选项卡中,当我们点击Execute按钮时则把请求发送到服务器端。

  • FiddlerScripts

打开Fiddler脚本编辑。

  • log

打印日志

  • Filters

过滤器可以对左侧的数据流列表进行过滤,我们可以标记、修改或隐藏某些特征的数据流。

  • Timeline

时间轴,也称为Fiddler的瀑布图,展示网络请求时间的功能。每个网络请求都会经历域名解析、建立连接、发送请求、接受数据等阶段。把多个请求以时间作为X轴,用图表的形式展现出来,就形成了瀑布图。在左侧会话窗口点击一个或多个回话,Timeline 便会显示指定内容从服务端传输到客户端的时间。

5、命令行工具

Fiddler命令行可以输入命令操作回话列表,常见命令有:

help 打开官方的使用页面介绍,所有的命令都会列出来。

6、状态栏

  • 显示的Fiddler是否处于捕捉状态(开启/关闭状态),可以点击该区域切换。
  • 显示当前捕捉哪些进程。
  • 显示当前断点设置状态,通过鼠标点击切换。有三种:
  • 显示当前共捕获了多少回话(如:300,表示共捕获了300个会话,如:10/300,表示当前选择10个会话,共捕获300个会话)。
  • 第五区块,描述当前状态。

五、PC端抓包快速上手

1、配置HTTPS代理

  Fiddler默认只能抓取http协议的数据包,我们需要配置下https的SSL证书。

  打开Fiddler,菜单栏:Tools –> Fiddler Options 打开fiddler配置。

  打开 HTTPS 配置项,勾选Capture HTTPS CONNECTsDecrypt HTTPS traffic,执行下actions然后点击OK

2、篡改请求数据

  效果:输入百度的域名,得到的是腾讯主页的相应(修改了请求的主机地址)

1、在请求前拦截数据

2、在浏览器地址栏输入www.baidu.com

  回车之后页面会持续加载(转圈圈),因为数据被Fiddler劫持了。

3、选中该数据包,修改请求的主机地址为qq.com,然后点击go放行数据。

  同理可修改其他请求头和请求体数据。

3、篡改响应数据

  效果:访问www.baidu.com百度一下变成让百度两下(右键审查元素也可以随意更改响应内容,这里意在演示在Fiddler中篡改响应内容)

1、劫持响应数据

2、修改响应数据

4、抓取B站用户登录的数据包

1、设置过滤器,只抓取请求URL包含bilibili.com的数据。

2、打开浏览器,在即将点击登录按钮的页面停下来,清空会话里的所有数据,然后点击登录按钮。(当然可以打断点,我玩的还不溜)

3、在会话列表中寻找提交数据的那次会话,选中它,在右边查看数据。

4、可以看清提交密码事附带的各个参数了,其中密码被加密了。

  复制登录的URL,分析加密参数,测试提交数据,便可编写模拟登录的任务。

六、APP抓包从入门到放弃

1、常规操作

1.1、允许远程连接

  打开tools选择options,选择连接选项卡,勾选允许远程连接,注意这里的端口号,后面会用到。

1.2、查看本机电脑IP地址

  打开Windows终端,输入以下指令查看本机IP。

  (:截图中有误,是适配器的IP地址,似乎都是192.168开头的)

1
ipconfig

1.3、电脑和手机连接同一局域网

1.4、配置手机WLAN的代理

1.5、安装SSL证书

  在手机浏览器上输入IP+端口,如果正常的话就可以打开Fiddler的页面了,下载并安装证书(安装证书需要在设置中安装)

浏览器和大多数应用都无法连接网络

2、查找资料&求助大佬

3、继续折腾

3.1、刷Magisk面具

  https://magiskcn.com/

  依据教程(针对于MIUI)——>去官方申请开发版系统——>解锁手机BootLoader——>下载系统完整安装包——>提取boot.img文件——>在面具中手动安装boot.img——>生成magisk_patched…——>上传至电脑,在Fastboot模式下,刷入面具。

  小心卡米或者变砖,血泪教训哇,呜呜呜。

  (第一次尝试刷入Magisk卡住了,一直停留在小米logo的那个界面,进不去系统,折腾了几个小时,不过还好,学会了刷机。。。狗头。。。)

3.2、安装LSPosed框架

  在面具中安装图示的两个模块,然后桌面上就会多一个LSPosed的软件。

3.3、安装JustTrustMe模块

  安装JustTrustMe模块,设置作用域。

3.4、可抓取大部分应用

  有些APP的防护措施太强了,虽然kill掉了证书强校验,但APP还有其他的检测机制,检测到环境异常就会直接闪退。对该软件隐藏Magisk可以破解某些APP的防护,抓取大部分APP的数据包。

4、APP抓包总结

  https协议验证服务器身份的方式通常有三种

  一是根据浏览器或者说操作系统(Android)自带的证书链;二是使用自签名证书;三是自签名证书加上SSL Pinning特性。

  第一种需要到知名证书机构购买证书,需要一定预算。第二种多见于内网使用。第三种在是安全性最高的,但是需要浏览器插件或客户端使用了SSL Pinning特性。

  在低版本中APP均不会使用自定义的SSL证书,所以就可以正常抓取。而高版本则需要使用一些操作绕过证书强校验才可以抓取。

  同时,一些APP为了防止数据被抓取,通常具备很强的反爬机制。这涉及到安卓逆向,数据加密,网络攻防等领域。

七、后记

  一个项目引发的蝴蝶效应,过程比较艰辛,但收获也颇多,心累。。。