当前位置: 首页 > news >正文

Reqable实战系列:Flutter移动应用抓包调试教程

Flutter应用网络请求调试一直是业内难题,原因在于Dart语言标准库的网络请求不会走Wi-Fi代理,常规通过配置Wi-Fi代理来抓包的方式行不通。这给我们日常开发测试造成了很大的阻碍,严重降低工作效率。因此写一篇教程,讲解如何使用Reqable对Flutter移动应用进行抓包调试。

1. 环境准备

电脑:Windows/Mac/Linux机器,安装Reqable客户端(建议2.18.0以上版本)。

手机:Android/iOS设备,安装Reqable移动端App(要求最低2.19.0版本)。

2. 安装证书

首先,启动Reqable电脑客户端,完成初始化进入主界面。点击顶部手机图标,打开二维码。

接下来,手机连接到和电脑所在的同一个Wi-Fi局域网。打开Reqable手机App,选择协同模式,扫码上面电脑端二维码进行连接。

连接成功后,开始下一步,安装证书。由于是对手机抓包,需要在手机安装证书,而不是在电脑安装证书,所以电脑上的证书可以选择不安装。

Reqable在上面选择协同模式初始化的时候,已经自动将电脑的根证书同步到了手机,安装证书只需要在手机上操作即可,无需将证书手动从电脑拷贝传输到手机。注意:手机抓包,必须安装电脑证书到手机。如果App是以独立模式初始化,App会生成和电脑不同的根证书,扫码连接电脑后需要手动同步证书到手机再安装。

Android设备

注意,Flutter应用程序只信任Android系统目录的证书,不会信任用户证书。Native应用我们可以通过配置 network_security_config.xml 文件或者降低targetSdkVersion到33来让应用信任用户证书,但是这个对于Flutter应用是不行的。

因为Dart SDK中已经强行写死了只信任系统目录下的证书。这个逻辑定义在 runtime/bin/security_context_linux.cc 中,有兴趣可以去翻看源码。

// On Android, we don't compile in the trusted root certiicates. Instead,// we use the directory of trusted certificates already present on the// device. This saves ~240KB from the size of the binary. This has the// drawback that SSL_do_handshake will synchronously hit the filesystem// looking for root certs during its trust evaluation. We call// SSL_do_handshake directly from the Dart thread so that Dart code can be// invoked from the "bad certificate" callback called by SSL_do_handshake.const char* android_cacerts = "/system/etc/security/cacerts";LoadRootCertCache(android_cacerts);

Android设备上要安装证书到系统目录,目前只有两种方式:

方式一:Root设备,解锁System分区,将证书复制到 /system/etc/security/cacerts 目录。可以按照Reqable中的提示进行操作。

adb rootadb shell avbctl disable-verificationadb remountadb push reqable-ca.crt /system/etc/security/cacerts/证书hash.0

方式二:设备刷Magisk环境,从Reqable手机App中下载证书模块,安装即可。

根证书安装成功后,Reqable手机App会有证书已安装的提示。如果已经安装,但仍然提示证书未安装,可能是操作出错,请复查安装步骤。不要怀疑检测有问题!

iOS设备

iOS安装证书要简单很多,标准三个步骤。

a. 下载描述文件。可以从Reqable手机App直接保存,也可以启动浏览器下载描述文件。

b. 设置 -> 下载的描述文件 -> 选择文件 -> 安装。

c. 设置 -> 通用 -> 关于 -> 证书信任设置 -> 打开开关。

可以看到iOS设备安装证书要简单很多,所以我们一般推荐使用iOS设备调试。

更多有关证书安装的说明,可以查阅Reqable官网文档。

3. 增强模式

在手机App上,Reqable提供了两种网络流量捕获模式,一种是常规模式,一种是增强模式。这里先简单介绍下两种模式的区别。

常规模式,和配置Wi-Fi代理效果一样,但是不需要用户去手动配置Wi-Fi代理。可以对绝大多数应用的流量分析,包括浏览器等。

增强模式,强制捕获所有的流量,包括不走Wi-Fi代理的网络请求流量,例如我们需要解决的Flutter应用。在Android设备上,增强模式还可以获取到流量来源的应用信息。

默认情况下,Android是自动开启增强模式的,用户无需手动开启。iOS设备有些特殊,手机在飞协同模式下无法开启增强模式,必须连接协同设备(电脑),并在标题菜单中手动开启。

对于Flutter应用,请一定要开启增强模式。增强模式开启后,标题后面会出现一个钥匙🔑标记。

4. 实战演示

首先,创建一个Flutter空项目,这个项目我们简单改改代码作为测试应用。

flutter create capture_test

加点代码,比如点击 按钮,发送一次HTTP请求。​​​​​​​

void _incrementCounter() async {final HttpClient httpClient = HttpClient();final HttpClientRequest request = await httpClient.getUrl(Uri.parse('https://httpbin.org/get'));request.close();
}

通过下面的命令,启动Flutter应用。

flutter run -d 设备ID

接下来,我们开始测试。Reqable手机App中开启调试,电脑端同时会进入调试状态,如果电脑没有自动开启调试,那么手动启动一下。

正常情况下,应该能成功抓到HTTP请求了,如下图。

如果出现下图这种客户端SSL握手失败的提示,说明是手机上证书没有安装成功。

这种情况,在命令行控制台中也能看到Flutter的报错。

E/flutter (24436): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: HandshakeException: Handshake error in client (OS Error: 
E/flutter (24436):   CERTIFICATE_VERIFY_FAILED: unable to get local issuer certificate(handshake.cc:393))
E/flutter (24436): #0      _SecureFilterImpl._handshake (dart:io-patch/secure_socket_patch.dart:99:46)
E/flutter (24436): #1      _SecureFilterImpl.handshake (dart:io-patch/secure_socket_patch.dart:143:25)
E/flutter (24436): #2      _RawSecureSocket._secureHandshake (dart:io/secure_socket.dart:920:54)
E/flutter (24436): #3      _RawSecureSocket._tryFilter (dart:io/secure_socket.dart:1049:19)
E/flutter (24436): <asynchronous suspension>

Q:只有Android设备,且无法将证书安装到系统证书目录,那么该怎么办?

修改代码强行信任任意证书,通过这个还可以跳过前面证书安装那一步,真正的无门槛,但就是不安全。所以请注意:应用正式发行版本务必删除或者绕过此项设置。

httpClient.badCertificateCallback = (X509Certificate cert, String host, int port) => true;

Q:只想用电脑,不想用Reqable手机App协同,怎么办?

同样要修改代码,配置网络请求必须走代理:​​​​​​​

httpClient.findProxy = (url) {  return 'PROXY 电脑IP:电脑抓包端口';};

好了,本篇教程到这里基本就结束了。

本文作者:MegatronKing

相关文章:

Reqable实战系列:Flutter移动应用抓包调试教程

Flutter应用网络请求调试一直是业内难题&#xff0c;原因在于Dart语言标准库的网络请求不会走Wi-Fi代理&#xff0c;常规通过配置Wi-Fi代理来抓包的方式行不通。这给我们日常开发测试造成了很大的阻碍&#xff0c;严重降低工作效率。因此写一篇教程&#xff0c;讲解如何使用Req…...

乾元通渠道商中标吴忠市自然灾害应急能力提升项目

近日&#xff0c;乾元通渠道商中标宁夏回族自治区吴忠市自然灾害应急能力提升项目&#xff0c;乾元通作为设备厂家&#xff0c;为项目提供通信指挥类装备&#xff08;多链路聚合设备&#xff09;QYT-X1。 青岛乾元通数码科技有限公司作为国家应急产业企业&#xff0c;深耕于数据…...

护网蓝队面试

一、sql注入分类 **原理&#xff1a;**没有对用户输入项进行验证和处理直接拼接到查询语句中 查询语句中插⼊恶意SQL代码传递后台sql服务器分析执行 **从注入参数类型分&#xff1a;**数字型注入、字符型注入 **从注入效果分&#xff1a;**报错注入、布尔注入、延时注入、联…...

【高考志愿】金融学

目录 一、金融学类专业概述 二、主要课程 三、就业前景与方向 四、适合人群 五、金融学学科排名 六、总结 高考志愿选择金融学&#xff0c;无疑是一个既充满挑战又极具前景的决策。金融学&#xff0c;作为经济学门类下的重要分支&#xff0c;不仅涵盖了广泛的金融领域知识…...

返利App的用户行为分析与数据驱动决策

返利App的用户行为分析与数据驱动决策 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨返利App中的用户行为分析与数据驱动决策的技术细节和实…...

python基础:高级数据类型:集合

1、集合的定义 集合是一个无序且无重复元素的列表。其定义与数学定义一致。其无序和不重复和字典特征类似&#xff0c;但是无“值”。 2、集合的创建 集合一般由列表创建&#xff0c;在初始化列表时保证其元素唯一性&#xff0c;即为集合。 创建方法&#xff1a;x set(list…...

idk17配置

只需要把zip包解压&#xff0c;然后配置环境变量&#xff1a; bin目录路径粘到path里面就好了 然后打开cmd窗口分别输入 java javac java -version 验证...

Java实现日志全链路追踪.精确到一次请求的全部流程

广大程序员在排除线上问题时,会经常遇见各种BUG.处理这些BUG的时候日志就格外的重要.只有完善的日志才能快速有效的定位问题.为了提高BUG处理效率.我决定在日志上面优化.实现每次请求有统一的id.通过id能获取当前接口的全链路流程走向. 实现效果如下: 一次查询即可找到所有关…...

你敢相信吗,AI绘画正在逐渐取代你的工作!

前言 在当今信息技术高速发展的时代&#xff0c;AI绘画技术的崛起已引起了广泛关注和讨论。许多人开始担心AI技术是否会逐渐取代传统绘画师的工作。人类无疑是感性的动物&#xff0c;创作出来的艺术作品常常带有浓郁的个人风格和情感。但AI绘画在某些方面的突破&#xff0c;使…...

博途PLC轴工艺对象随动误差监视功能

S7-1200PLC和V90总线伺服通过工艺对象实现定位控制时在组态工艺对象里有这样的随动误差监视功能介绍,关于这个功能,今天我们解读下,工艺对象组态编程可以参考下面文章链接: S7-1200PLC和V90总线伺服通过工艺对象实现定位控制(标准报文3应用)_v90工艺对象3号报文-CSDN博客文…...

《昇思25天学习打卡营第24天 | 昇思MindSporeResNet50图像分类》

24天 本节学习了使用ResNet50网络对CIFAR-10数据集进行分类。 步骤&#xff1a; 1.数据集准备与加载 2.构建网络 残差网络结构(Residual Network)是ResNet网络的主要亮点&#xff0c;ResNet使用残差网络结构后可有效地减轻退化问题&#xff0c;实现更深的网络结构设计&#x…...

糟糕的管理者都有这几个特征

在我们的职业生涯中&#xff0c;我们都期望能遇到一位英明睿智、引领团队走向辉煌的管理者。然而&#xff0c;现实往往并非总是如此美好&#xff0c;总会有一些管理能力差的人混迹其中&#xff0c;给团队带来诸多困扰。今天&#xff0c;我们就来看看糟糕的管理者身上都有哪些特…...

Python (Ansbile)脚本高效批量管理服务器和安全

1、简介 在现代 IT 基础设施中&#xff0c;管理大量服务器是一项复杂而繁琐的任务。特别是在检查服务器的存活状态以及 SSH 登录等任务上&#xff0c;手动操作非常耗时且容易出错。本文将介绍如何使用 Python 脚本实现对多台服务器的批量检查和管理&#xff0c;包括检查服务器…...

《数字图像处理与机器视觉》案例三 (基于数字图像处理的物料堆积角快速测量)

一、前言 物料堆积角是反映物料特性的重要参数&#xff0c;传统的测量方法将物料自然堆积&#xff0c;测量物料形成的圆锥表面与水平面的夹角即可&#xff0c;该方法检测效率低。随着数字成像设备的推广和应用&#xff0c;应用数字图像处理可以更准确更迅速地进行堆积角测量。 …...

Postman接口测试工具的原理及应用详解(四)

本系列文章简介&#xff1a; 在当今软件开发的世界中&#xff0c;接口测试作为保证软件质量的重要一环&#xff0c;其重要性不言而喻。随着前后端分离开发模式的普及&#xff0c;接口测试已成为连接前后端开发的桥梁&#xff0c;确保前后端之间的数据交互准确无误。在这样的背景…...

扛鼎中国AI搜索,天工凭什么?

人类的创作不会没有瓶颈&#xff0c;但AI的热度可不会消停。 大模型之战依旧精彩&#xff0c;OpenAI选择在Google前一天举行发布会&#xff0c;两家AI企业之间的拉扯赚足了热度。 反观国内&#xff0c;百模大战激发了大家对于科技变革的热切期盼&#xff0c;而如今行业已逐渐…...

【Ant Design Vue的更新日志】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…...

Elasticsearch环境搭建|ES单机|ES单节点模式启动|ES集群搭建|ES集群环境搭建

文章目录 版本选择单机ES安装与配置创建非root用户导入安装包安装包解压配置JDK环境变量配置single-node配置JVM参数后台启动|启动日志查看启动成功&#xff0c;访问终端访问浏览器访问 Kibana安装修改配置后台启动|启动日志查看浏览器访问 ES三节点集群搭建停止es服务域名配置…...

System.currentTimeMillis() JAVA 转C#

JAVA中的System.currentTimeMillis() &#xff0c;指获取当前时间与1970年1月1日00:00:00 GMT之间所差的毫秒数的方法。 这个方法返回的是一个long类型的值&#xff0c;表示从某个固定时间点&#xff08;通常是UNIX纪元&#xff0c;即1970年1月1日00:00:00 GMT&#xff09;到…...

人机交互新维度|硕博电子发布双编码器操作面板、无线操作面板等新品

6月15日&#xff0c;硕博电子召开了一场新品发布会&#xff0c;向业界展示了多项前沿技术成果&#xff0c;其中备受瞩目的当属SPM-KEYP-D08双编码器操作面板、SPM-KEYP-D16W无线操作面板、SPR-HT-XK12A无线手持发射端以及SPQ-WT-B01洒水车专用控制面板。这些创新产品的亮相&…...

从晶体管到CPU:CMOS反相器延迟如何决定你的电脑主频

从晶体管到CPU&#xff1a;CMOS反相器延迟如何决定你的电脑主频 当你按下电脑电源键的瞬间&#xff0c;数十亿个晶体管在芯片上开始协同工作。这些微观开关的切换速度&#xff0c;直接决定了处理器主频的上限。而构成所有数字电路基础的CMOS反相器&#xff0c;其动态响应特性就…...

腾讯云+Astrbot个人AI部署,接入QQ机器人

1、腾讯云创建云服务器 之所以选择腾讯云是因为可以领一个月免费服务器 地址&#xff1a;https://cloud.tencent.com/ 服务器配置情况&#xff1a; 这里我获取的是轻量应用服务器&#xff08;Lighthouse&#xff09;&#xff0c;适合网站搭建、开发测试等多种场景。以下是详细…...

GIL已死,GIL万岁?——2024大厂Python并发岗面试题库首发(含性能压测对比数据)

第一章&#xff1a;GIL已死&#xff0c;GIL万岁&#xff1f;——2024大厂Python并发岗面试题库首发&#xff08;含性能压测对比数据&#xff09;一道高频真题&#xff1a;为什么 asyncio.run() 启动的协程无法被 multiprocessing.Process 并发执行&#xff1f; 该问题直指 Pyth…...

Anything V5图像生成效果实测:高清画质与丰富风格展示

Anything V5图像生成效果实测&#xff1a;高清画质与丰富风格展示 1. 引言&#xff1a;惊艳的二次元创作体验 1.1 模型核心能力概述 Anything V5作为Stable Diffusion生态中的明星模型&#xff0c;专为动漫风格图像生成优化。经过大规模高质量二次元数据训练&#xff0c;它能…...

LaTeX排版踩坑记:用了soul包高亮,为什么一加\cite就报错?

LaTeX排版进阶&#xff1a;soul包高亮冲突的底层原理与系统化解决方案 当你正在用LaTeX优雅地排版论文&#xff0c;突然在引用文献时遭遇神秘的报错——这种体验就像穿着正装踩到香蕉皮。soul包作为文本装饰的瑞士军刀&#xff0c;其高亮和删除线功能深受喜爱&#xff0c;但一旦…...

Python AI 用例工具部署踩坑实录:Docker镜像体积暴增300%、GPU显存泄漏、模型热加载失败的5个根因与秒级修复方案

第一章&#xff1a;Python AI 用例工具部署的典型失败图谱在真实生产环境中&#xff0c;Python AI 工具链&#xff08;如 LangChain、LlamaIndex、FastAPI 封装的推理服务&#xff09;的部署失败往往并非源于模型能力缺陷&#xff0c;而是由基础设施、依赖冲突与配置漂移引发的…...

CentOS 7下OnlyOffice离线部署全攻略:从依赖包下载到一键配置(避坑指南)

CentOS 7下OnlyOffice离线部署全攻略&#xff1a;从依赖包下载到一键配置&#xff08;避坑指南&#xff09; 在企业内网或安全隔离环境中部署文档协作平台时&#xff0c;OnlyOffice凭借其开源特性和丰富的编辑功能成为首选方案。本文将深入探讨如何在CentOS 7系统中实现完全离线…...

Spring Boot 3.1 新特性解析与实践

Spring Boot 3.1 新特性解析与实践 前言 核心新特性 1. 虚拟线程支持 Spring Boot 3.1 基于 Java 21&#xff0c;正式支持虚拟线程&#xff08;Virtual Threads&#xff09;&#xff1a; Configuration public class ThreadConfig {Beanpublic ExecutorTaskExecutor taskExecut…...

4 大平台 “免费拿” 玩法大拆解,看完不踩坑

现在很多平台都有 “0元领东西” 的活动&#xff0c;玩法不一样&#xff0c;难度也差很多。今天用大白话对比拼dd、淘b、京d、全能锦鲤&#xff0c;简单易懂&#xff0c;看完就知道该选哪个。一、各平台免费拿怎么玩&#xff1f;1. 拼dd&#xff08;老牌砍价&#xff09;玩法&a…...

Comsol 中微环谐振腔的环形波导耦合:波束包络与波动光学模块对比

Comsol微环谐振腔&#xff0c;环形波导耦和。 对比波束包络和波动光学两个不同模块。在光学领域&#xff0c;微环谐振腔因其独特的光学特性在众多应用中发挥着关键作用&#xff0c;比如光滤波、光传感等。而 Comsol 作为一款强大的多物理场仿真软件&#xff0c;为我们深入研究微…...