需求
小区有个电动车的地下车库,需要用微信小程序扫码打开,充电也需要扫码。但是车库信号很差,经常加载不出来小程序,或者是加载出来了提示我没开会员。所以想做一个 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 出来就行了。
坑点
- eCapture 需要 Linux 内核版本大于 5.5 。
- 解包的时候如果没有对应的功能,可能是因为分了子包,需要点开相应的功能,不然解包没有这部分子包。
- WMPFDebugger 需要微信版本支持,最新版的 WMPF 版本是 20089 ,可以在 Issues 里面找到对应的配置。
工具
免责声明
- 仅供学习与研究:本文内容仅用于网络安全技术学习、协议分析及个人研究目的,旨在探讨小程序安全机制与本地网络优化方案。
- 禁止非法用途:严禁将文中提及的技术、工具或思路用于任何未经授权的系统入侵、数据窃取、商业牟利、破坏计算机信息系统等违法犯罪活动。
- 合规使用:使用者应确保相关操作已获得系统所有者或服务提供商的明确书面授权,并严格遵守《中华人民共和国网络安全法》、《中华人民共和国数据安全法》及相关法律法规。
- 风险自负:因使用本文所述技术或工具而导致的任何账号封禁、设备损坏、数据丢失、法律纠纷或其他直接或间接损失,均由使用者自行承担,作者不承担任何连带责任。
- 尊重知识产权:逆向分析所得的接口、协议及业务逻辑版权归原作者或原服务提供商所有,请勿擅自公开传播、商业化利用或用于搭建同类竞品服务。
- 内容时效性:文中涉及的工具版本、接口参数及平台规则可能随时间发生变化,请使用者自行验证其有效性与安全性,作者不对内容的持续准确性作任何保证。