IOS13.2.3获取微信小游戏/小程序资源文件+代码

有时候看别的小程序/小游戏有些功能不知道如何实现,想参考下,但是没有源码,或者看到一些游戏的资源做的不错,想拿下来改改。怎么办?
今天就来看看怎么拿到资源文件和代码(虽然代码是加密过的),不过一般js的加密也就是混淆压缩,做了变量名替换,资源文件就没有压缩的了。
(之前网上也有很多人写过怎么弄,但是实际上很多都不可用了,所以自己也记录下。)

  1. 先试玩一下觉得可以的小游戏或者小程序,让微信先把包下下来。
    一般情况下开发微信小游戏/小程序的时候,会把一个包上传到微信服务器,但是这个包有一定的大小限制,一般都在几MB,但是微信给了一些动态加载资源的方式,自己可以从自己的服务器或者cdn上面去拉取新的资源包来更新自己的小程序/小游戏,这个就俗称热更新。当然代码中也会去加载一些动态的资源。

简单总结下一共有三种资源需要获取:

  • 基础包中资源(微信服务器拉到微信本地)
  • 热更新加载包中的资源(从开发者服务器拉到微信本地)
  • 动态资源(从开发者服务器拉到微信本地)
2. ssh到越狱手机获取
1ssh root@localhost -p 2222
3. 进入cydia调试微信
1cyrun -b com.tencent.xin -e
4. 找到微信沙盒Library目录
1[[NSFileManager defaultManager] URLsForDirectory:NSLibraryDirectory inDomans:NSUserDomainMask][0]2我的手机是这个目录:3file:///var/mobile/Containers/Data/Application/38BF9699-C8DE-4570-95CF-09876BE91D41/Library/
5. 退出cydia,进入沙盒Library目录find一下wxapkg文件
1cd /var/mobile/Containers/Data/Application/38BF9699-C8DE-4570-95CF-09876BE91D41/Library/; find -name "*.wxapkg";
6. 退出手机,scp把wxapkg拉回来。
1scp -P2222 root@localhost:/var/mobile/Containers/Data/Application/38BF9699-C8DE-4570-95CF-09876BE91D41/Library/WechatPrivate/9454ac8b05a1983e8255ea94d91cc7b2/WeApp/LocalCache/release/wxb92d4d650d51eda8/117.wxapkg .
7. 拉回来的是一个wxapkg文件,其实也只是一种文件格式。git上找个工具解析出来就行。
1php ./parse.php 117.wxapkg

我看git上有用php写的也有用go写的,我本地有php所以就用php了,自己也可以用go来弄个下。
给一个git连接:https://github.com/Clarence-pan/unpack-wxapkg
源码有兴趣可以看看。其实也就是按照固定格式解析二进制文件。
最终获得的文件有这些:

2. ssh到越狱手机获取
1ssh root@localhost -p 2222
3. 进入cydia调试微信
1cyrun -b com.tencent.xin -e
4. 找到微信沙盒Library目录
1[[NSFileManager defaultManager] URLsForDirectory:NSLibraryDirectory inDomans:NSUserDomainMask][0]2我的手机是这个目录:3file:///var/mobile/Containers/Data/Application/38BF9699-C8DE-4570-95CF-09876BE91D41/Library/
5. 退出cydia,进入沙盒Library目录find一下wxapkg文件
1cd /var/mobile/Containers/Data/Application/38BF9699-C8DE-4570-95CF-09876BE91D41/Library/; find -name "*.wxapkg";
6. 退出手机,scp把wxapkg拉回来。
1scp -P2222 root@localhost:/var/mobile/Containers/Data/Application/38BF9699-C8DE-4570-95CF-09876BE91D41/Library/WechatPrivate/9454ac8b05a1983e8255ea94d91cc7b2/WeApp/LocalCache/release/wxb92d4d650d51eda8/117.wxapkg .
7. 拉回来的是一个wxapkg文件,其实也只是一种文件格式。git上找个工具解析出来就行。
1php ./parse.php 117.wxapkg

我看git上有用php写的也有用go写的,我本地有php所以就用php了,自己也可以用go来弄个下。
给一个git连接:https://github.com/Clarence-pan/unpack-wxapkg
源码有兴趣可以看看。其实也就是按照固定格式解析二进制文件。
最终获得的文件有这些:
1578503504247

为了避免麻烦,每次还得上手机,我写了一个脚本,连上手机直接拉,拉完直接抽文件,哈哈,请允许我卖弄一下。(记得把parse.php放到脚本同目录下)代码如下:

 #########################################################################
 # File Name: get_wxapkg.sh
 # Author: 小马的爸爸
 # mail: 我还没有伊妹儿
 # Created Time: 2020-01-09
 #########################################################################
 #!/bin/bash
 wxapkgs=`ssh root@localhost -p2222 "find /var/mobile/Containers/Data/Application/ -name '*.wxapkg'"`
 for wxapkg in $wxapkgs;
do

    echo "COPYING $wxapkgs"
    scp -P2222 root@localhost:/$wxapkg .
    php ./parse.php ./${wxapkg##*/}
done

最后,我今天编辑文章用的一个在线的markdown编辑器,share一下~
最后希望能和大家多多交流,有兴趣可以加我微信一起学习讨论哈。nicholas_mcc

1 Like

你这 markdown 用的, 我傻了. (帮你改了下

2 Likes

这是发公众号的文章上复制的,之前markdown编辑的没保存,比较尴尬😅

谢谢啦~~

  1. ?这不是拿了所有小程序/游戏的基础包吗?
  2. 其实更精准的,可以通过界面分析,最后定位到接口去获取特定的小程序下载地址的

对的,你说的也是一种方法,我还没验证可行不。不知道现在改了没改拉取方式

cycript 不是cydia 吧…

对,谢谢指正。

你说的我今天看了,已经被加密分割了。获取下来还得解密。你看下面这个host里面:szextshort.weixin.qq.com对于/mmtls/
下面的应该就是小程序的包了

我说的是通过微信代码去调用获取 GetWxaAppCDNDownloadUrlRequest这个接口,你看错了

直接通过Charles抓包工具获取呢?