• 请不要在回答技术问题时复制粘贴 AI 生成的内容
FloatingLeaves
V2EX  ›  程序员

记录一次小程序逆向

  •  
  •   FloatingLeaves · 20h 15m ago · 2591 views

    需求

    小区有个电动车的地下车库,需要用微信小程序扫码打开,充电也需要扫码。但是车库信号很差,经常加载不出来小程序,或者是加载出来了提示我没开会员。所以想做一个 APP ,直接把请求放我 APP 里,这样至少减小了网络流量,理论上来说应该不会再出现上面的情况了。

    实现路径

    解包

    小程序的逆向工具已经很成熟了,我去 GitHub 随便搜了下 wxapkg 关键字就搜到了,用这个工具完成解包。

    抓包

    解包的部分很顺利,拿到了相应的接口及输入输出格式。但是他的接口需要鉴权,看了下实现是用 wx.login 获取的 code 去登陆的。他的大致原理是小程序调用 wx.login 从微信获取一个 code ,code 的有效期具体多久我忘了,反正很短。用这个 code 去调用小程序服务方的接口,服务方再去微信服务器验证 code 的合法性,验证通过则登陆。

    如果要去模拟这个登陆,要么就去逆向微信或者微信开发者工具,但这个对我来说不现实,没这个技术,所以只能选择抓包看一下他服务器换取的 token 有效期是多久。

    最开始我使用的是 eCapture 配合 MuMu 模拟器,在模拟器上登陆微信去抓包。刚刚打开微信就被封号了,包确实是能抓到,但是考虑到微信号我还要用,就没用这个方案了,太危险了。

    后面我又到处找资料,无意间发现了一个工具:WMPFDebugger。这个工具的大致原理就是把微信小程序转发到一个 Chrome 调试端口上,可以实现在 Chrome 打开一个地址进入 Chrome DevTools 来调试。这下就好搞了,不管是日志还是请求都随便拿了。找到对应的请求,看返回的内容,结果发现是 JWT 鉴权,有效期是 5 个月。那到这里好像就结束了,5 个月轮换一次我也可以接受了。

    后续

    到这一步其实就没什么了,直接把接口和流程丢给 AI ,库库造一个 APP 出来就行了。

    坑点

    1. eCapture 需要 Linux 内核版本大于 5.5 。
    2. 解包的时候如果没有对应的功能,可能是因为分了子包,需要点开相应的功能,不然解包没有这部分子包。
    3. WMPFDebugger 需要微信版本支持,最新版的 WMPF 版本是 20089 ,可以在 Issues 里面找到对应的配置。

    工具

    免责声明

    1. 仅供学习与研究:本文内容仅用于网络安全技术学习、协议分析及个人研究目的,旨在探讨小程序安全机制与本地网络优化方案。
    2. 禁止非法用途:严禁将文中提及的技术、工具或思路用于任何未经授权的系统入侵、数据窃取、商业牟利、破坏计算机信息系统等违法犯罪活动。
    3. 合规使用:使用者应确保相关操作已获得系统所有者或服务提供商的明确书面授权,并严格遵守《中华人民共和国网络安全法》、《中华人民共和国数据安全法》及相关法律法规。
    4. 风险自负:因使用本文所述技术或工具而导致的任何账号封禁、设备损坏、数据丢失、法律纠纷或其他直接或间接损失,均由使用者自行承担,作者不承担任何连带责任。
    5. 尊重知识产权:逆向分析所得的接口、协议及业务逻辑版权归原作者或原服务提供商所有,请勿擅自公开传播、商业化利用或用于搭建同类竞品服务。
    6. 内容时效性:文中涉及的工具版本、接口参数及平台规则可能随时间发生变化,请使用者自行验证其有效性与安全性,作者不对内容的持续准确性作任何保证。
    17 replies    2026-07-19 00:38:14 +08:00
    Armor
        1
    Armor  
       19h 38m ago
    一个冷知识,小程序码可以拍照,插好插座,出了地库再扫码付款
    FloatingLeaves
        2
    FloatingLeaves  
    OP
       19h 25m ago
    @Armor 充电那里有个设备,要先按按钮选是哪个插座,那个插座的二维码是有时效的,60 秒就没了,而且主要是开门麻烦,每次再那个门那里等 1 分钟
    unclemcz
        3
    unclemcz  
       19h 21m ago via Android
    如果这个小程序在 pc 端微信可以用,抓包会方便很多。
    leoQaQ
        4
    leoQaQ  
       19h 11m ago
    非常肯定 OP 的折腾精神。要是我遇到这种情况就直接去找物业 battle 了,哈哈哈哈哈哈哈
    ShineyWang
        5
    ShineyWang  
       18h 59m ago via Android
    L 站有人发帖说逆向了 code 生成
    Armor
        6
    Armor  
       18h 57m ago
    @FloatingLeaves 做过几个这种项目,都是把小程序码印刷成背胶贴在现场的
    xiangyuecn
        7
    xiangyuecn  
       17h 57m ago
    分包解包后,有没有发现里面塞的整部小猪佩奇😂
    FloatingLeaves
        8
    FloatingLeaves  
    OP
       16h 39m ago via Android
    @xiangyuecn 那倒是没有,其实我只解了包,后续都是 ai 分析的
    FloatingLeaves
        9
    FloatingLeaves  
    OP
       16h 38m ago via Android
    @ShineyWang 这么厉害
    FloatingLeaves
        10
    FloatingLeaves  
    OP
       16h 38m ago via Android
    @unclemcz 对,最终就是在电脑上抓的
    peakchao
        11
    peakchao  
       13h 0m ago
    这和我去年做的事一样,不过我手机 root 了,具体步骤:
    1.用 wxapkg 拿到小程序代码,用作参考。
    2.直接在手机抓包选择充电口、支付、续费等接口。
    3.编写原生 app ,打开后获取充电订单列表,触发 401 说明授权到期,直接跳转到支付宝/微信小程序进行授权并返回。
    4.直接跳转支付宝/微信调用支付。
    这种方式需要手机 root ,支持 xposed,因为授权时,需要通过 hook 代码将 token 截取然后存储到自己的 app ,支付完成需要 hook 支付状态用于返回自己的 app ,现在终于不用忍受小程序的广告和各种长流程充电流程了。
    suibianHe
        12
    suibianHe  
       12h 47m ago
    reqable 可以直接抓小程序的请求
    lxh0412
        13
    lxh0412  
       10h 24m ago
    @ShineyWang 吹牛逼的那玩意,没这么简单
    BeiChuanAlex
        14
    BeiChuanAlex  
       8h 28m ago
    有 ai 你只要把源码弄下来,剩下的问一下 ai 不就行了
    FloatingLeaves
        15
    FloatingLeaves  
    OP
       7h 26m ago
    @BeiChuanAlex AI 也不能把 token 变给我呀
    FloatingLeaves
        16
    FloatingLeaves  
    OP
       7h 26m ago
    @peakchao 大佬太有实力了
    bxb100
        17
    bxb100  
       4h 8m ago
    我记得 mmtls 有人逆向过
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   904 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 20:46 · PVG 04:46 · LAX 13:46 · JFK 16:46
    ♥ Do have faith in what you're doing.