您现在的位置是:首页 >学无止境 >抓包神器,特别是APP,Android和iOS | API调试+API测试一站化解决方案,Reqable介绍+使用网站首页学无止境

抓包神器,特别是APP,Android和iOS | API调试+API测试一站化解决方案,Reqable介绍+使用

尘佑不尘 2025-02-25 00:01:02
简介reqable如何抓手机安卓app的数据包

前言

抓包神器,特别是APP,Android和iOS|API调试+API测试一站化解决,Reqable使用。 Reqable是新一代API调试 + API测试一站化解决方案。Reqable具有全平台、免登录、轻量级、高性能、无广告等优点,理念是让API更快更简单,助力程序开发和测试人员提高生产力!现已支持Windows、Mac、Linux、Android和iOS五大平台。

Reqable = Fiddler + Charles + Postman

Reqable可重放、编辑、脚本、断点,替代BurpSuite或者Yakit

Reqable拥有极简的设计、丰富的功能、高效的性能和桌面手机多端平台。
在这里插入图片描述

下载地址在文末

往期推荐

oscp+:简介、考试形式、对比其他证书、政策变动

PotatoTool一款功能强大的网络安全综合工具支持免杀、自定义内存马、提权、扫描、一键解密、AI分析、溯源等等

14w+poc,nuclei全家桶:nuclei模版管理工具+Nuclei

灵兔宝盒二开 | 286渗透工具合集,新增OneCS-49_尊享版、vshell4.9.3破解版、Godzilla特战版等24款

红队武器库VulToolsKit全家桶:图形化页面+自己额外添加的一些工具

fscan全家桶:FscanPlus,fs,fscan适用低版本系统,FscanParser

ctf综合利用工具,集成多款AI,94GB大小量大管饱:ctftools-all-in-one_proV2

Reqable使用截图

多协议流量分析

基于经典的MITM中间人代理方案捕获和分析您的应用流量,自适应HTTP/HTTPS/SOCKS4/SOCKS5等多种代理协议,并全面支持HTTP2协议,助您完整还原BUG现场。
在这里插入图片描述

丰富的过滤选项

支持多种过滤器,例如应用、域名、数据类型、书签以及多条件自定义搜索,帮您在茫茫数据中准确找到想要查找的内容。
image.png

创建请求测试

您可以从流量列表、API集合、cURL等任何来源创建API测试请求,Reqable提供完整的REST API测试功能,包括编辑请求参数、请求头、请求体和授权等。
在这里插入图片描述

请求响应对比

Reqable提供了大量的内置开发工具,例如请求/响应对比工具,帮您可视化不同的请求和响应之间的数据差异,快速定位问题。
在这里插入图片描述

重写、断点和脚本

自定义重写和断点规则,或者编写Python脚本,拦截处理请求或者响应数据,修改或者模拟数据,满足各式各样的测试场景。
在这里插入图片描述

Reqable详细介绍

Reqable = Fiddler + Charles + Postman

Reqable集成了流量分析和API测试的核心功能,并深度整合,一个工具顶多个工具。Reqable基于Flutter和C++开发,相比同类产品具有极大的性能优势。

在这里插入图片描述

以上数据是在MacBook Pro 2017设备上测试,启动时间是通过录屏后计算帧差得出,内存使用为应用启动后直接置于后台再计算得出。

流量分析

Reqable采用经典的MITM代理方式进行流量分析,支持重写、脚本(Python)、断点和重放等数据调试功能。

  • 支持HTTP/1.x, HTTP2协议版本,HTTP3(QUIC)暂不支持。
  • 支持HTTP/HTTPS/Socks4/Socks4a/Socks5代理方式。
  • 支持HTTPS,TLSv1.1、TLSv1.2和TLSv1.3加密协议。
  • 支持IPv4和IPv6协议。
  • 支持基于HTTP1升级的WebSocket协议。
  • 支持HTTP/HTTPS二级代理(分析境外流量)。
  • 创建API:支持从调试列表创建API进行测试。
  • 搜索筛选:多条件搜索,应用、域名、协议、数据类型等筛选方式。
  • 重写功能:预设规则对指定请求或响应进行重定向、替换或者修改。
  • 断点功能:对请求或响应进行实时断点操作,比如屏蔽,挂起或修改替换数据等。
  • 脚本功能:支持编写Python脚本处理实时请求或响应。
  • 网关功能:对指定请求或响应进行屏蔽,挂起等操作。
  • 镜像功能:对指定域名和端口配置镜像映射。
  • 反向代理:项目配置反向代理,免证书授信调试HTTPS流量。
  • 自动高亮:支持设定自定义规则对请求进行多种颜色高亮。
  • 重发回放:支持单个或多个请求进行回放测试。
  • 请求对比:支持对比请求和相应数据,快速定位数据偏差。
  • 历史记录:自动保存抓包的流量数据,方便回溯查看。
  • 应用来源:支持流量应用来源显示和筛选,方便检测程序后门。
  • HAR支持:自动关联HAR格式文件,并支持HAR导出和导入。
  • SSL证书:导入自定义SSL证书,分析固定证书和双向验证请求。
    实测截图:

在这里插入图片描述

API测试

Reqable可以编辑和发送HTTP请求,用来测试REST API接口,同时还支持API集合存储和历史记录等功能。

  • 支持HTTP/1.1, HTTP2和HTTP3(QUIC)协议。
  • API集合:支持创建创建集合目录保存和管理API,
  • 集合支持:支持导入Postman、Hoppscotch、ApiPost和Apifox等集合。
  • 环境变量:全局环境变量和用户自定义环境变量。
  • 脚本功能:支持编写Python脚本预处理或者后处理API数据。
  • 代码生成:生成Python、Java、Node等主流语言或网络库的代码。
  • 批量编辑:支持批量编辑请求参数、请求头、表单等。
  • 授权设置:支持API KEY、Basic Auth和Bearer Token等授权方式。
  • 代理设置:支持自定义代理配置,系统代理和调试代理等。
  • 性能测试:可以查看请求在不同环节的耗时数据。
  • Cookie管理:自动保存Cookie或在请求头中自动加入关联的Cookie。
  • 历史记录:自动保存发送的请求和响应数据,方便回溯查看
  • cURL支持:从cURL创建API或者将API导出为cURL命令。

实测截图:

在这里插入图片描述

Reqable使用案例

如何在Android非Root设备上对App抓包调试

对于非Root的Android设备,CA证书只能安装到用户目录,但是在Android 7.0之后,客户端无法信任用户目录下的CA证书,出现SSL握手失败问题。那么,如何解决呢?

警告
前提条件:

  • 要求具备目标调试App的源码修改权限。
  • 本方案对Android原生App有效,对Flutter开发的App无效。

如果不符合上面的条件,应跳过本篇文章,查看Root设备的解决方案

安装CA证书到用户目录

Reqable提供了非常详细的用户目录CA证书安装过程,你可以选择通过电脑端Reqable或者手机端Reqable下载CA证书,并通过指示完成CA证书的安装。

如果是使用电脑端的Reqable,最主要的一步是将Android设备连接到和电脑设备的同一个局域网中,并在Android设备上设置Wi-Fi代理。这样才能够在Android设备上打开浏览器下载CA证书。如果无法完成这一步,可以考虑在电脑端Reqable保存证书文件,然后使用ADB工具推送证书文件到手机。

手机配置Wi-Fi代理

如果是使用手机端的Reqable,在初始化Reqable时选择协同模式并扫码连接电脑端的Reqable,然后直接在手机端的Reqable中保存CA证书文件即可。

接下来,就是在手机上将上面保存的CA证书文件,安装到用户证书目录,操作步骤是:设置-> 安全 -> 加密与凭据 -> 安装证书 -> CA证书。

配置网络安全文件

下面这一步是最最最重要的,必不可少,不然上面安装证书就白干了。

使用Android Studio打开目标调试App的源码项目,并打开app目录下面的build.gradle或者build.gradle.kts文件。

在dependencies中配置一行:

debugImplementation("com.reqable.android:user-certificate-trust:1.0.0")

gradle中配置依赖

重新编译,打出来的Debug包就可以正常抓包调试了。如果想调试Release包,把上面debug去掉或者改成release即可。

如果你是内网或者无法访问maven中央仓库,可以按照下面的方式手动配置:

第一步:新建文件 res/xml/network_security_config.xml

<?xml version="1.0" encoding="utf-8"?><network-security-config>  <base-config cleartextTrafficPermitted="true">    <trust-anchors>      <certificates src="system" />      <certificates src="user" />    </trust-anchors>  </base-config></network-security-config>

第二步:配置到 AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?><manifest>  <application android:networkSecurityConfig="@xml/network_security_config">    ...  </application></manifest>

手动配置网络安全文件

Reqable + Proxifier强制代理抓包

Reqable桌面端借助系统网络代理进行抓包,但是具有很大的局限性。例如,很多应用程序或者网络框架无视系统网络代理设置,流量不经过Reqable。针对这种情况,就需要请Proxifier出场了,本篇文章具体介绍下如何使用Proxifier和Reqable来解决这个问题。

原理

为了大家更好地理解本篇文章,我先简单讲一下Reqable桌面端工作的原理。Reqable核心原理是使用MITM(Man-in-the-Middle)技术,启动了一个本地代理服务器(监听0.0.0.0,默认端口9000)来接收网络请求。别的应用程序是不知道这个代理服务器地址的,所以需要将127.0.0.1:9000这个代理地址配置到系统设置网络代理中,别的应用程序就可以获取到了。

客户端(例如浏览器)发送网络请求时,主动连接这个代理服务器发送请求,这样一来Reqable就可以获取到客户端的流量了。缺陷也很明显,会不会读取系统的网络代理配置并连接完全要看客户端的实现,Reqable是处于被动等待连接状态的。例如,Flutter开发的应用程序默认是不会读取系统网络代理的,当然还有很多其他的应用程序也是如此。

这给我们平时开发调试带来很多不便,虽然可以通过修改代码来指定代理服务器发送请求,但是对于发行版本测试就没办法了。另外,一些恶意程序也会主动绕过系统代理设置,隐藏流量,给安全人员对流量进行分析也带来很多麻烦。

借助Proxifier我们可以强行指定应用程序的流量连接到Reqable的代理服务器。这个原理和Reqable移动端的协同模式大同小异。

Proxifier

首先,Proxifier支持三个平台,分别是Windows,Mac和Android。下面的演示我们选用Proxifier Windows版本。

Proxifier安装后直接启动,如果窗口没显示,可以从系统托盘中打开。Proxifier无法直接使用,需要做一些配置。

打开 Profile -> Proxy Servers -> Add,配置Reqable的代理服务器。Reqable和Proxifier如果在同一台设备环境上,Address填写127.0.0.1就行了,Port填写Reqable的代理端口,端口在Reqable应用的顶部可以看到。如果Reqable和Proxifier不在同一台设备环境上,Address填写Reqable所在设备的IP地址,IP地址在Reqable应用的顶部也可以看到。

Proxifier代理

接下来选择代理协议,Proxifier提供了三种协议,分别是HTTPS,SOCKS4和SOCKS5。这三种协议Reqable都支持😀,随便选一个即可,一般来说推荐HTTPS,简单不容易出错。

HTTPS代理

最后,点击OK就可以了。请注意,不要点Check按钮,结果大概率是失败,因为Proxifier会请求google.com来验证代理配置是否连通,由于某众所周知的原因,是连通不了的。一路点击确认即可,Proxifier基本的配置就完成了。

默认情况下,Proxifier会作用于所有进程,如果希望只指定某一个进程进行代理,按照下面的操作进行。

打开 Profile -> Proxification Rules -> Add,在Applications中配置应用程序的可执行文件路径,可以配置多个,英文逗号隔开。然后,在Action中配置上一步已经配置好的代理选项。

指定进程

完成这一步后,还需要将Default规则修改成Direct,表示放行其他的流量不进行代理。

指定进程

Proxifier这边的配置差不多结束了,其他更高级的配置大家查看官网文档和自行尝试,本篇文章就不一一介绍了。

实战演示

我们用Flutter Windows项目来演示,因为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 windows

Reqable桌面端点击开始进入调试状态,并配置系统代理。在Flutter应用中无论你点击多少次 + 按钮,Reqable中都收不到任何httpbin.org的流量。

Flutter应用

这时候该Proxifier登场了。如果你在前面没有给Proxifier配置指定进程代理的话,只要打开Proxifier就可以了。当然,你也可以给指定进程单独配置。

我们再次在Flutter应用中点击 + 按钮,Proxifier会跳出来一个弹窗,询问为了避免回路是否允许Reqable.exe直连。请一定要点击确认,如果不点击确认的话,网络请求会出现一个循环回路。Proxifier将流量转发给Reqable,又拦截了Reqable的出口流量,再转发给Reqable,这就是一个永不停止的流量回路。点击确认的话,Proxifier会自动给Reqable创建一个直连规则。

Proxifier上场

不出意外的话,Reqable中便可以看到httpbin.org的数据包了。由于流量是从Proxifier转发过来的,应用程序一栏显示的也是Proxifier。

数据包

如何对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到23来让应用信任用户证书,但是这个对于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设备,USB连接到电脑,Reqable可以通过ADB一键安装。

一键安装

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

Magisk模块既可以从电脑端下载(见上图Magisk),也可以从手机端证书管理 -> 安装根证书到本机 -> Magisk模块保存。

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

iOS设备

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

  • 下载描述文件。可以从Reqable手机App直接保存,也可以启动浏览器下载描述文件。
  • 设置 -> 下载的描述文件 -> 选择文件 -> 安装。
  • 设置 -> 通用 -> 关于 -> 证书信任设置 -> 打开开关。

安装证书

可以看到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握手失败的提示,说明是手机上证书没有安装成功。

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:电脑抓包端口';};

项目地址:https://reqable.com/zh-CN/download/

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。