V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MegatronKing
V2EX  ›  推广

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

  •  2
     
  •   MegatronKing · 2024-03-06 13:30:06 +08:00 · 6484 次点击
    这是一个创建于 365 天前的主题,其中的信息可能已经有所发展或是发生改变。

    1. 前言

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

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

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

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

    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 地址下载根证书了,直接在移动端保存根证书即可。打开侧边栏,点击证书管理页面,进行证书相关的操作。

    image.png

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

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

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

    image.png

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

    未命名 2.png

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

    2.3 安装辅助服务( Android )

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

    image.png

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

    未命名 3.png

    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 这个项目的冰山一角,有更多的功能已经实现或者正在实现,也欢迎大家下载体验并提供建议: https://reqable.com/

    62 条回复    2024-06-03 15:17:14 +08:00
    Part2
        1
    Part2  
       2024-03-06 13:50:42 +08:00
    感谢,用用试试,每次设置代理有点麻烦
    iMusic
        2
    iMusic  
       2024-03-06 13:54:03 +08:00
    强!
    ae86
        3
    ae86  
       2024-03-06 13:56:03 +08:00
    大佬,能抓 携程 app 租车 ,哈啰 app 租车 和 支付宝租车小程序 的包吗?
    raycool
        4
    raycool  
       2024-03-06 14:03:38 +08:00
    社区版有限制吗?
    shinession
        5
    shinession  
       2024-03-06 14:04:50 +08:00
    OP 就是作者啊, 膜拜大佬
    zhouquanbest
        6
    zhouquanbest  
       2024-03-06 14:14:52 +08:00
    目测 Android 还是要 Root 来装证书
    ColoThor
        7
    ColoThor  
       2024-03-06 14:24:02 +08:00   ❤️ 1
    不需要设代理,但是需要开启 vpn ,通常应用两个都会检测,没啥区别
    chancat
        8
    chancat  
       2024-03-06 14:32:01 +08:00 via Android
    果然,前脚才刚过期,这就看到推文了
    Muniesa
        9
    Muniesa  
       2024-03-06 14:36:15 +08:00 via Android
    昨天刚用过,Android 装证书还是有点麻烦,不知道有没有可能根据证书自动打包个 magisk 模块来导入
    tool2d
        10
    tool2d  
       2024-03-06 14:41:30 +08:00
    @zhouquanbest iOS 现在安装第三方 CA 很轻松吗?那不是遥遥领先安卓一大截?
    MegatronKing
        11
    MegatronKing  
    OP
       2024-03-06 14:42:54 +08:00
    @zhouquanbest #6 Android 真机基本上都没法 root 解锁 system 了,用 magisk 等模块才行。所以要么模拟器 root ,要么真机把证书安装到用户目录,android 项目里面配置 xml 或者调低 targetApi ,也能成,就是麻烦了点。
    coosir
        12
    coosir  
       2024-03-06 14:44:05 +08:00   ❤️ 1
    @tool2d iOS 一直很轻松
    xchaoinfo
        13
    xchaoinfo  
       2024-03-06 14:49:06 +08:00
    @Muniesa 对于 root 的手机是可以的, 开发个 zygisk 插件就行,这个事情搞过。
    MegatronKing
        14
    MegatronKing  
    OP
       2024-03-06 14:49:36 +08:00
    @Muniesa #9 CA 证书是动态生成的,每个人都不一样,所以 magisk 模块也要动态生成才行,我对 magisk 这些不了解,也不知道这个可不可行?
    Muniesa
        15
    Muniesa  
       2024-03-06 15:14:28 +08:00
    @MegatronKing #14 magisk 模块是个 zip 包,里面有固定的结构和安装脚本文件,放到`system/etc/security/cacerts/`里的文件刷完后会出现在系统对应的路径里。动态生成应该只需要改动证书文件,然后重新 zip 打包。我昨天试过,证书可以成功复制过去,权限也和其它证书一样,但是系统设置里就是找不到,可能安装脚本文件写的有问题。后来 github 找的模块安装的 https://github.com/ys1231/MoveCertificate
    linquan
        16
    linquan  
       2024-03-06 15:19:47 +08:00
    楼主这个软件,我感觉比 fiddler 好用,颜值也不错,而且惊讶于是国人开发的,刚看了楼主稀土掘金写的技术栈,文章写的也很好,读完了,竟然只有几百个粉丝。。。口头支持一波,关注下,有机会希望能合作呀
    rev1si0n
        17
    rev1si0n  
       2024-03-06 15:25:38 +08:00
    @Muniesa https://github.com/rev1si0n/lamda/wiki/%E5%AE%89%E8%A3%85%E8%AF%81%E4%B9%A6 一句 API 调用实时秒装秒卸证书,无缝支持安卓 6-14
    BaiLinfeng
        18
    BaiLinfeng  
       2024-03-06 15:33:47 +08:00
    这不就是小黄鸟吗?
    xiaokanhongchen
        19
    xiaokanhongchen  
       2024-03-06 15:45:37 +08:00
    小黄鸟的新版么,记得很早之前在以前的帖子看到过。。。
    SenLief
        20
    SenLief  
       2024-03-06 16:25:36 +08:00
    这是小黄鸟的继承者吗?
    echoyangjx
        21
    echoyangjx  
       2024-03-06 16:43:36 +08:00
    支持一个
    darcyC
        22
    darcyC  
       2024-03-06 20:38:27 +08:00
    支持
    just1
        23
    just1  
       2024-03-06 20:50:11 +08:00
    有个很奇怪的问题是为什么好多 CONNECT 包,感觉不太对啊。证书装了,也有一小部分的 https 包能看到(正常,非 CONNECT ),但是大部分都是 CONNECT 的。没 root 。
    而且有个现象是 CONNECT target.domain.com 这个显示连接断开,然后再过个 0.2s 就会有一个正常的 GET /uri Host: target.domain.com
    是 vpn server 是一个 http proxy 然后把这个 connect request 显示出来了吗
    MegatronKing
        24
    MegatronKing  
    OP
       2024-03-06 22:02:49 +08:00
    @just1 vpn 其实没有 CONNECT 握手这个过程,只是统一以这种方式显示而已。你看到的现象基本可以判断是证书信任问题。
    guanzhangzhang
        25
    guanzhangzhang  
       2024-03-06 22:59:27 +08:00
    @MegatronKing #24 那这种咋整,只能反编译吗,之前 fiddler 就是看到好多 CONNECT 的,只有少部分流量能抓到
    just1
        26
    just1  
       2024-03-07 00:27:43 +08:00
    @MegatronKing #24 但是我是浏览器访问 baidu.com 也会这样,不应该有信任问题。而且 request 都正常
    https://i2.100024.xyz/2024/03/07/foqtj.webp
    connect 下一个就是 https get
    azio7
        27
    azio7  
       364 天前
    支持
    Vindroid
        28
    Vindroid  
       364 天前
    好东西,正愁要怎么抓包微信小程序,finddler 要收费,Wireshark 又难用。这个好,抓到的数据显示非常清晰,还集成了类似 postman 的 api 调试,超方便
    qy0316
        29
    qy0316  
       364 天前
    不错哦
    neochen13
        30
    neochen13  
       364 天前
    现在很多手机不能 root 了……太难了
    neochen13
        31
    neochen13  
       364 天前
    小黄鸟知名度比老哥你现在这个高很多啊,我知道老哥是小黄鸟作者

    老哥是否可以在酷安社区推一推呢
    lsearsea
        32
    lsearsea  
       364 天前
    根证书和用户证书都已经安装,手机已经识别到,但是应用就是提示证书未安装,mi6
    https://imgur.com/a/dji2v2z
    root71370
        33
    root71370  
       364 天前
    @Vindroid 能抓微信小程序的包吗
    pepesii
        34
    pepesii  
       364 天前   ❤️ 1
    我现在用的是
    https://github.com/emanuele-f/PCAPdroid
    https://github.com/emanuele-f/PCAPdroid-mitm
    主要是因为我可以直接用 python addon
    orangutan92
        35
    orangutan92  
       364 天前
    @SenLief #20 Reqable 的前身是 HttpCanary (一款 Android 平台应用程序),但是我们推翻了所有的技术栈,并用 C++和 Flutter 重写,只保留了 logo 和主题色,所以两者并没有太多关联。当然,Reqable 的使命之一,就是完全替代 HttpCanary 。预计在 2023 年底,Reqable 将会推出桌面端 + 移动端的多平台独立应用程序。
    [介绍 | Reqable]( https://reqable.com/zh-CN/docs/introduction)
    wangofjian
        36
    wangofjian  
       364 天前
    支持,小黄鸟老用户
    lemon6
        37
    lemon6  
       364 天前
    小白求问,charles 下载证书并信任就可以了,为什么这个安装证书要这么麻烦?
    waytodelay
        38
    waytodelay  
       364 天前
    @ColoThor 请问下这种怎么绕过去?或者不被 app 知道呢?有些 app 打开了代理或者 VPN 就网络连接中断。。。
    eleba
        39
    eleba  
       364 天前
    android 有木有修改系统 api 内置证书的哦
    eleba
        40
    eleba  
       364 天前
    @MegatronKing 作者能否讲解一下为啥证书是动态生成的不能固定嘛。 我自己编译 rom 内置证书后发现每次证书都不对
    TechOrange
        41
    TechOrange  
       364 天前
    谢谢,先熟悉一下,前几天还在用着 httpcanary
    Aurorataro
        42
    Aurorataro  
       364 天前
    小黄鸟?
    zzznow
        43
    zzznow  
       364 天前
    有时候手机端抓的包和电脑不同步。感觉不够稳定
    Bigbelly
        45
    Bigbelly  
       364 天前
    在 2.2 移动端扫码桌面端连接就一直连接失败了,手动输入也不行,这怎么解决呢
    MegatronKing
        46
    MegatronKing  
    OP
       364 天前
    @lemon6 iOS 都不麻烦,Android 是都麻烦,而 Reqable 麻烦则少一点。
    MegatronKing
        47
    MegatronKing  
    OP
       364 天前
    @eleba #40 安全问题。众所周知,证书私钥钥是不能泄漏的,万一泄漏了也要可以更换,固定就意味着违背这个原则。
    MegatronKing
        48
    MegatronKing  
    OP
       364 天前
    @neochen13 #48 虽然酷安很棒,但是不太喜欢酷安的一部分人,不是要拿来搞这个就是要拿来搞那个,唯恐避之不及。
    MegatronKing
        49
    MegatronKing  
    OP
       364 天前
    @orangutan92 #35 哈,你不提我都忘记修改官网文档的资料了。
    dj721xHiAvbL11n0
        50
    dj721xHiAvbL11n0  
       363 天前
    真不错,转小程序的包现在就可以实现了,OP 棒棒哒
    @waytodelay 我也想知道
    dj721xHiAvbL11n0
        51
    dj721xHiAvbL11n0  
       363 天前
    @root71370 可以的,但是如果小程序作者设置了检测,可能就悬了
    BaiLinfeng
        52
    BaiLinfeng  
       363 天前
    httpcanary 是 OP 开发的吗?最近我发现 httpcanary 为什么在强制弹广告添加扣扣群,这是被劫持了吗,还是啥情况
    xz410236056
        53
    xz410236056  
       360 天前
    你这跟用小飞机转发流量到 whistle 有啥区别。。。
    MegatronKing
        54
    MegatronKing  
    OP
       359 天前
    @BaiLinfeng #52 httpcanary 不维护了,你下的应该是被别人逆向工程后二次开发的,谨慎使用。
    BaiLinfeng
        55
    BaiLinfeng  
       357 天前
    @MegatronKing 哦那原版在哪里下载?各大应用商店?
    KuiLei
        56
    KuiLei  
       335 天前
    能利用 root 权限一键安装证书或者一键生成 magisk 模块吗?
    MegatronKing
        57
    MegatronKing  
    OP
       328 天前
    @KuiLei 最新的版本已经实现一键生成 magisk 模块,但是还没发布。
    lxml
        58
    lxml  
       327 天前
    偶然间刚看见这个 app ,感觉作者做的挺爽的,最近正好 rapidAPI 和 insomnia 都用的挺不习惯的,想换一个,proxyman 没什么意见,看见 五一半价 299 咬咬牙感觉也能支持

    不过这个授权设备也太抠了吧,我个人用 两台 mac ,公司一台,家里一台,看见 授权 1 Mac + 1 Windows + 1 Linux 这个点开付款的手都松了下来,为啥不能整成授权 6 个设备干脆点,其实也用不到,你弄个 3 个桌面平台自己选都行,用这个是为了多平台用,但是 1Mac 1 Windows 1Linux 这谁家目标用户会这么搞啊。

    🤩🤩🤩🤩
    lxml
        59
    lxml  
       327 天前
    另外,这个付费版,可以同步不同设备的请求嘛,看了下文档,没看见有说这个的,不知道作者有没有搭建自己的服务器进行同步,insomnia 让我劝退的原因就是同步 git 麻烦的要死
    MegatronKing
        60
    MegatronKing  
    OP
       324 天前
    @lxml 你说的有道理的,但是目前是可以授权 2 台 Mac 设备的,或者两台 Windows 设备的等。这个设计主要是想让大家组团合用,互不干扰,固定设备位置,我用 mac ,他用 windows ,不然就会相互踢下线。另外云服务规划是在下半年的 3.x 版本上线,目前 2.x 还没做。
    airmour
        61
    airmour  
       321 天前
    在协作模式下 电脑 win10 开热点,Android13 系统 手机连接热点,使用 Reqable 扫描 pc 端生成的二维码 总是提示 [连接失败,请重试] , 是什么原因呢 如何排查?
    lhyannis
        62
    lhyannis  
       276 天前
    电脑端安装好证书,打开二维码,用手机端扫描,连接成功,
    但 Reqable 没有自动将桌面端的根证书同步到手机端呀,
    手机上全盘搜索了证书名称 reqable-ca.crt ,找不到呀~
    测试手机是 vivo 旗下的 iqoo z9 turbo
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   966 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 21:53 · PVG 05:53 · LAX 13:53 · JFK 16:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.