新世代的移动端抓包调试工具(免Wi-Fi代理)

1,778 阅读4分钟

1. 前言

桌面端的开发工具不断推陈出新,但是移动端开发工具的发展却是举步维艰。原因可能在于移动端不是生产平台,无论是知名的Android平台的HttpCanary还是iOS的Thor,往往都沦为玩具应用。最后开发者依然不得不借助Wi-Fi代理,将流量转发到桌面端抓包程序(例如Fiddler、Charles等)进行处理。

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

  • 在Wifi中配置代理非常麻烦,调试完后还需要再改回来。
  • 某些网络框架不会读取系统代理,无法捕获到流量。
  • 安装根证书的时候,将证书同步到手机不方便。
  • Wifi代理是全局的,无法选择指定应用生效。

因此,我写了这篇文章,给大家介绍一种新的移动端抓包调试方案。

2. 准备

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

image.png

下载地址:reqable.com/download

2.1 桌面端版本

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

未命名.png

2.2 移动端版本

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

Screenshot_20240118_155629.png

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

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

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

image.png

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

由于系统限制,Android的证书安装步骤相对复杂。Reqable提供了多个场景的证书安装指引,开发者可选择最合适的进行操作。

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

image.png

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

未命名3.png

Reqable可以获取到Android的应用信息,iOS因技术限制不支持。

可以看到,手机端的流量已经显示在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平台不可用)。

image.png

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

未命名4.png

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

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

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

image.png

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

image.png

OK,没什么问题。

4. 结束

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