> 想学习别的公司的微信小程序,从网络层入手结果发现小程序的请求一点也看不懂,都是同一个接口,参数居然是二进制格式的。这瞬间激发我的探索欲,于是我发誓一定要找到小程序的原始请求,一定要找到源站,一定要。。。。。。 ## 抓包 > **提供一些可靠方案,具体教程请google** > > 1. **windows平台使用Fiddler+Proxifier** > 2. **mac使用proxyman+Proxifier** > 3. **windows+android**:电脑使用Fiddler开启代理,android配置代理::8080,手机访问Fiddler监听的地址并配置证书,然后就可以监听所有流量了 > 4. **mac+iphone**:mac安装proxman后,具体操作教程可以在proxyman应用程序中的“证书”菜单中找到,非常方便。 对小程序抓包发现流量都是通过微信网关走,只有少量静态资源走原始站点。同时微信安全网关将**原始接口及数据**加密为`application/octet-stream` 格式数据了。 看来得稍微了解了解 安全网关是个什么东西了。 ## 微信安全网关 > **参考:** > > [https://developers.weixin.qq.com/miniprogram/dev/framework/quickstart](https://developers.weixin.qq.com/miniprogram/dev/framework/quickstart) > > [https://developers.weixin.qq.com/miniprogram/security/gateway/](https://developers.weixin.qq.com/miniprogram/security/gateway/)  微信安全网关是一项面向小程序、公众号H5、APP、WEB的安全加速服务。主要功能就这两点:**数据及接口二次封装加密传输**;**识别黑灰产技术及手段** **网关示例**:`https://a1d39jf9d-wx84728475843r8324f847.sh.wxgateway.com/__wx__/call?token=95F_YawNBFuueYs-KHr1gbv0X7QGIpd_aN&callid=175152332-987dfd&devtools_ignore=true` **网关区域**:**sh**.wxgateway.com中的 **sh**代表上海,此外还有诸如天津(tj),深圳(sz)等区域。 **链路ID**:请求参数中的`callid` 代表当前请求处于哪个网关链路,用于排查问题时微信方快速定位 **所有请求都通过一个网关传输,请求内容包含了(数据+源站域名对应的接口地址)。**  根据上图的安全网关防护架构图,我假设大部分数据都会通过微信服务器,旧版本的微信会走普通HTTPS,**但是实际测试发现Wechat3.2.1已经无法打开大部分小程序了,因为有些小程序有版本限制**。既然没法从网关入手,那么只能通过源码来探求出路了。 ## 微信小程序解包 > **参考:** > > [通过越狱iphone或者root后的安卓手机获取小程序的 `.wxapkg` 包文件](https://kangzubin.com/wxapp-decompile-1/) > > [windows PC端wxapkg解密工具(go语言)](https://github.com/BlackTrace/pc_wxapkg_decrypt) > > [解包工具汇总(可能过时了)](https://github.com/leo9960/wechat-app-unpack) > > [一个有名的解包工具](https://github.com/BruceFooo/wxappUnpacker) > > [解包工具:windows端自动扫描+解密+解包.wxapkg 文件](https://github.com/wux1an/wxapkg) > > [将微信小程序(.wxapkg)解包及将包内内容还原为"编译"前的内容的"反编译"器](https://bbs.kanxue.com/thread-225289.htm) > > [源码还原,解包后的压缩混淆代码怎么还原成原始代码](https://kangzubin.com/wxapp-decompile-2/) > > [KillWxapkg](https://github.com/Ackites/KillWxapkg) > > [[微信小程序测试解密与解包 ](https://www.cnblogs.com/fuchangjiang/p/17864094.html)](https://www.cnblogs.com/fuchangjiang/p/17864094.html) 找到wxapkg文件,直接使用 [开源工具](https://github.com/Ackites/KillWxapkg) 解密并还原工程目录 `.\KillWxapkg_2.4.1_windows_amd64.exe -id="wx7878e855bec324c1" -in="__APP__.wxapkg" -restore`。 上面操作后,得到了微信小程序源码,再通过微信开发者工具打开即可运行。 > **如果小程序启动报错,可能是源码缺失,直接删掉报错部分即可** **此时就能在开发者工具中的Network面板看到原始请求了。** ## 网关配置 > [小程序手动接入](https://developers.weixin.qq.com/miniprogram/security/gateway/start/manual.html) > 想要启动小程序还需要修改一些配置,使用自己的appid并申请自己的网关 1. 在 [微信公众平台](https://mp.weixin.qq.com/) - 管理 - 开发管理 - [开发设置](https://mp.weixin.qq.com/wxamp/devprofile/get_profile) - 服务器域名 里,将源站域名添加到**request合法域名**中。 2. 登录 [微信网关控制台](https://developers.weixin.qq.com/console/services/donut?donut=%2Fconsole%2Fmanager%2Fgateway%3Futm_source%3Dgateway_homepage_hero&csrfRand=1875100942),在对应小程序业务配置中-高级设置,配置要手动接入的域名列表(这里的域名是业务域名) 3. 为了防止其他人利用新的网关来请求源站,源站在接收到网关请求时还需要核查网关地址。配置网关会携带到源站的 Header,可以用来区分流量是否来源于网关。  到此我知道了,没法通过运行小程序来获取原始请求,因为源站对网关进行了校验,所以我无法在本地运行成功。看来只能从js逆向入手了。 ## deWebpack > 参考: > > [manus-open](https://github.com/BruceFooo/manus-open) > 心路历程: > [ChatGPT辅助的webpack解包反压缩实践](https://tautcony.xyz/2023/09/13/unpack-webpack-by-chatgpt/) > 大部分小程序都是webpack压缩后,但是没有很好的工具能够还原其处理的代码。使用chatgpt不仅可以提升可读性还能还原函数名字,但当文件过大时就无法处理了,因为文件中包含了很多基础模块(如加密)的代码,所以文件会非常大。看来只能手动挑取模块代码再喂给AI了。没想到仅仅不到1MB的文件,工作量如此之大,模块关联性太强,就算手动删减代码最终代码也过大,所以我考虑使用ai智能体,希望它能处理得了大文件。manus.im似乎确实能够处理,但是有积分限制,每天只有300积分,处理到一半就停止了,所以我考虑自己搭建一个ai智能体。 待更新 Loading... > 想学习别的公司的微信小程序,从网络层入手结果发现小程序的请求一点也看不懂,都是同一个接口,参数居然是二进制格式的。这瞬间激发我的探索欲,于是我发誓一定要找到小程序的原始请求,一定要找到源站,一定要。。。。。。 ## 抓包 > **提供一些可靠方案,具体教程请google** > > 1. **windows平台使用Fiddler+Proxifier** > 2. **mac使用proxyman+Proxifier** > 3. **windows+android**:电脑使用Fiddler开启代理,android配置代理:<windows\_ip>:8080,手机访问Fiddler监听的地址并配置证书,然后就可以监听所有流量了 > 4. **mac+iphone**:mac安装proxman后,具体操作教程可以在proxyman应用程序中的“证书”菜单中找到,非常方便。 对小程序抓包发现流量都是通过微信网关走,只有少量静态资源走原始站点。同时微信安全网关将**原始接口及数据**加密为`application/octet-stream` 格式数据了。 看来得稍微了解了解 安全网关是个什么东西了。 ## 微信安全网关 > **参考:** > > [https://developers.weixin.qq.com/miniprogram/dev/framework/quickstart](https://developers.weixin.qq.com/miniprogram/dev/framework/quickstart) > > [https://developers.weixin.qq.com/miniprogram/security/gateway/](https://developers.weixin.qq.com/miniprogram/security/gateway/)  微信安全网关是一项面向小程序、公众号H5、APP、WEB的安全加速服务。主要功能就这两点:**数据及接口二次封装加密传输**;**识别黑灰产技术及手段** **网关示例**:`https://a1d39jf9d-wx84728475843r8324f847.sh.wxgateway.com/__wx__/call?token=95F_YawNBFuueYs-KHr1gbv0X7QGIpd_aN&callid=175152332-987dfd&devtools_ignore=true` **网关区域**:**sh**.wxgateway.com中的 **sh**代表上海,此外还有诸如天津(tj),深圳(sz)等区域。 **链路ID**:请求参数中的`callid` 代表当前请求处于哪个网关链路,用于排查问题时微信方快速定位 **所有请求都通过一个网关传输,请求内容包含了(数据+源站域名对应的接口地址)。**  根据上图的安全网关防护架构图,我假设大部分数据都会通过微信服务器,旧版本的微信会走普通HTTPS,**但是实际测试发现Wechat3.2.1已经无法打开大部分小程序了,因为有些小程序有版本限制**。既然没法从网关入手,那么只能通过源码来探求出路了。 ## 微信小程序解包 > **参考:** > > [通过越狱iphone或者root后的安卓手机获取小程序的 `.wxapkg` 包文件](https://kangzubin.com/wxapp-decompile-1/) > > [windows PC端wxapkg解密工具(go语言)](https://github.com/BlackTrace/pc_wxapkg_decrypt) > > [解包工具汇总(可能过时了)](https://github.com/leo9960/wechat-app-unpack) > > [一个有名的解包工具](https://github.com/BruceFooo/wxappUnpacker) > > [解包工具:windows端自动扫描+解密+解包.wxapkg 文件](https://github.com/wux1an/wxapkg) > > [将微信小程序(.wxapkg)解包及将包内内容还原为"编译"前的内容的"反编译"器](https://bbs.kanxue.com/thread-225289.htm) > > [源码还原,解包后的压缩混淆代码怎么还原成原始代码](https://kangzubin.com/wxapp-decompile-2/) > > [KillWxapkg](https://github.com/Ackites/KillWxapkg) > > [[微信小程序测试解密与解包 ](https://www.cnblogs.com/fuchangjiang/p/17864094.html)](https://www.cnblogs.com/fuchangjiang/p/17864094.html) 找到wxapkg文件,直接使用 [开源工具](https://github.com/Ackites/KillWxapkg) 解密并还原工程目录 `.\KillWxapkg_2.4.1_windows_amd64.exe -id="wx7878e855bec324c1" -in="__APP__.wxapkg" -restore`。 上面操作后,得到了微信小程序源码,再通过微信开发者工具打开即可运行。 > **如果小程序启动报错,可能是源码缺失,直接删掉报错部分即可** **此时就能在开发者工具中的Network面板看到原始请求了。** ## 网关配置 > [小程序手动接入](https://developers.weixin.qq.com/miniprogram/security/gateway/start/manual.html) > 想要启动小程序还需要修改一些配置,使用自己的appid并申请自己的网关 1. 在 [微信公众平台](https://mp.weixin.qq.com/) - 管理 - 开发管理 - [开发设置](https://mp.weixin.qq.com/wxamp/devprofile/get_profile) - 服务器域名 里,将源站域名添加到**request合法域名**中。 2. 登录 [微信网关控制台](https://developers.weixin.qq.com/console/services/donut?donut=%2Fconsole%2Fmanager%2Fgateway%3Futm_source%3Dgateway_homepage_hero&csrfRand=1875100942),在对应小程序业务配置中-高级设置,配置要手动接入的域名列表(这里的域名是业务域名) 3. 为了防止其他人利用新的网关来请求源站,源站在接收到网关请求时还需要核查网关地址。配置网关会携带到源站的 Header,可以用来区分流量是否来源于网关。  到此我知道了,没法通过运行小程序来获取原始请求,因为源站对网关进行了校验,所以我无法在本地运行成功。看来只能从js逆向入手了。 ## deWebpack > 参考: > > [manus-open](https://github.com/BruceFooo/manus-open) > 心路历程: > [ChatGPT辅助的webpack解包反压缩实践](https://tautcony.xyz/2023/09/13/unpack-webpack-by-chatgpt/) > 大部分小程序都是webpack压缩后,但是没有很好的工具能够还原其处理的代码。使用chatgpt不仅可以提升可读性还能还原函数名字,但当文件过大时就无法处理了,因为文件中包含了很多基础模块(如加密)的代码,所以文件会非常大。看来只能手动挑取模块代码再喂给AI了。没想到仅仅不到1MB的文件,工作量如此之大,模块关联性太强,就算手动删减代码最终代码也过大,所以我考虑使用ai智能体,希望它能处理得了大文件。manus.im似乎确实能够处理,但是有积分限制,每天只有300积分,处理到一半就停止了,所以我考虑自己搭建一个ai智能体。 待更新 最后修改:2025 年 07 月 14 日 © 允许规范转载 赞 别打赏,我怕忍不住购买辣条与续命水