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

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

  •  2
     
  •   MegatronKing · 261 天前 · 5948 次点击
    这是一个创建于 261 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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