移动端免 Wi-Fi 代理进行抓包调试

349 天前
MegatronKing  MegatronKing

1. 前言

抓包调试是移动应用程序开发和调试中非常重要的一部分,无论是数据模拟还是恶意软件分析。我们最常见的方法是在手机上设置 Wi-Fi 代理,并将流量代理到桌面应用程序(例如 Charles 和 Fiddler )的 MITM 服务器。

但是这种工作方式不但操作繁琐,还存在一些技术障碍问题。

因此,给大家介绍一种新的移动端抓包调试方案。

2. 准备

本篇文章所讲的主要工具是 Reqable , 一款桌面端( Windows 、Mac 、Linux ) + 移动端( Android 、iOS )的全平台 API 调试工具。

image.png

下载地址: https://reqable.com/download

2.1 桌面端版本

安装完成后,启动 Reqable 桌面端应用。打开二维码页面,如下:

未命名.png

2.2 移动端版本

安装后,启动 Reqable 移动端应用。选择协作模式,并扫描上一步桌面端的二维码。

Screenshot_20240118_155629.png

连接成功后,Reqable 会自动将桌面端的根证书同步到手机端。Reqable 移动端会记住远程设备(电脑)的 IP 地址和端口,下一次启动会自动进行连接。如果远程设备(电脑)的 IP 地址和端口发生变化,在侧边栏点击扫码图标重新扫描即可。

下一步,我们开始安装根证书,这可能是整个过程最复杂的一步。

由于 Reqable 桌面端的根证书已经被同步到了移动端,因此不需要打开浏览器输入 xxx 地址下载根证书了,直接在移动端保存根证书即可。打开侧边栏,点击证书管理页面,进行证书相关的操作。

Reqable 移动的会自动检查证书的安装状态,如果未安装成功,页面上出现红色提示:证书未安装。上图是 Android 的根证书安装指引,iOS 则简单很多,按照应用内的操作提示处理即可。

注意:如果 Android 的证书安装到用户证书目录,记得在项目中配置网络安全配置 xml 文件。

最后,点击右下角的调试按钮,允许通知和 VPN 服务,进入调试模式。

同时,Reqable 桌面端也会自动进入调试模式。

可以看到,手机端的流量已经显示在 Reqable 桌面端了,后续我们可以在桌面端进行断点、重写、脚本等功能的处理。

2.3 安装辅助服务( Android )

从上图可以看到,应用程序一栏显示的是手机的 IP 地址,而不是真实的应用程序信息。除此之外,可能部分应用的流量也无法被捕获。这种情况下,我们需要安装并启用Reqable 辅助服务

重新启动调试功能,可以看到流量应用信息已经显示出来了。

3. 调试

准备工作完成之后,我们开始正式的调试。为了更好的展示功能,写了一个简单的 Android 应用My Application,嵌套一个 WebView ,加载 Reqable 的首页。

val web = findViewById<WebView>(R.id.webview)
web.webViewClient = WebViewClient()
val settings = web.settings
settings.javaScriptEnabled = true
web.loadUrl("https://reqable.com")

由于在测试的 Android 设备上根证书安装到了用户目录,我们在My Application里面配置好 xml 文件信任用户证书。另一种方式是将My Application的 targetSDK 调低至 23 。

为了去除其他应用流量的干扰,我们点击右上角菜单,并添加当前的测试应用My Application(注意,选择应用的功能只在 Android 平台上可用,iOS 平台不可用)。

接下来启动调试,可以看到 Reqable 桌面端已经捕获了手机端的流量信息。

现在我们来假定一个测试场景,需要将My Application中所有网络请求数据中的Reqable文字改成Awesome,那该怎么做呢?

只需要写一行 Python 脚本即可:

response.body.replace('Reqable', 'Awesome')

然后,我们重新加载 WebView 测试下。

OK ,没什么问题。

4. 结束

感谢大家阅读,以上演示的功能只是 Reqable 这个项目的冰山一角,有更多的功能已经实现或者正在实现,也欢迎大家下载体验并提供建议: https://reqable.com/

6401 次点击
所在节点    推广
62 条回复
Part2
349 天前
感谢,用用试试,每次设置代理有点麻烦
iMusic
349 天前
强!
ae86
349 天前
大佬,能抓 携程 app 租车 ,哈啰 app 租车 和 支付宝租车小程序 的包吗?
raycool
349 天前
社区版有限制吗?
shinession
349 天前
OP 就是作者啊, 膜拜大佬
zhouquanbest
349 天前
目测 Android 还是要 Root 来装证书
ColoThor
349 天前
不需要设代理,但是需要开启 vpn ,通常应用两个都会检测,没啥区别
chancat
349 天前
果然,前脚才刚过期,这就看到推文了
Muniesa
349 天前
昨天刚用过,Android 装证书还是有点麻烦,不知道有没有可能根据证书自动打包个 magisk 模块来导入
tool2d
349 天前
@zhouquanbest iOS 现在安装第三方 CA 很轻松吗?那不是遥遥领先安卓一大截?
MegatronKing
349 天前
@zhouquanbest #6 Android 真机基本上都没法 root 解锁 system 了,用 magisk 等模块才行。所以要么模拟器 root ,要么真机把证书安装到用户目录,android 项目里面配置 xml 或者调低 targetApi ,也能成,就是麻烦了点。
coosir
349 天前
@tool2d iOS 一直很轻松
xchaoinfo
349 天前
@Muniesa 对于 root 的手机是可以的, 开发个 zygisk 插件就行,这个事情搞过。
MegatronKing
349 天前
@Muniesa #9 CA 证书是动态生成的,每个人都不一样,所以 magisk 模块也要动态生成才行,我对 magisk 这些不了解,也不知道这个可不可行?
Muniesa
349 天前
@MegatronKing #14 magisk 模块是个 zip 包,里面有固定的结构和安装脚本文件,放到`system/etc/security/cacerts/`里的文件刷完后会出现在系统对应的路径里。动态生成应该只需要改动证书文件,然后重新 zip 打包。我昨天试过,证书可以成功复制过去,权限也和其它证书一样,但是系统设置里就是找不到,可能安装脚本文件写的有问题。后来 github 找的模块安装的 https://github.com/ys1231/MoveCertificate
linquan
349 天前
楼主这个软件,我感觉比 fiddler 好用,颜值也不错,而且惊讶于是国人开发的,刚看了楼主稀土掘金写的技术栈,文章写的也很好,读完了,竟然只有几百个粉丝。。。口头支持一波,关注下,有机会希望能合作呀
rev1si0n
349 天前
@Muniesa https://github.com/rev1si0n/lamda/wiki/%E5%AE%89%E8%A3%85%E8%AF%81%E4%B9%A6 一句 API 调用实时秒装秒卸证书,无缝支持安卓 6-14
BaiLinfeng
349 天前
这不就是小黄鸟吗?
xiaokanhongchen
349 天前
小黄鸟的新版么,记得很早之前在以前的帖子看到过。。。
SenLief
349 天前
这是小黄鸟的继承者吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1021074

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX