这里我从pc端入手,从wx设置里面可以找到文件存储路径,小程序的路径为:文件管理路径\WeChat Files\Applet。进入目录后如果发现有很多,不知道哪个是目标文件,可以全删了,重新打开小程序。小程序的包可能有一个,也可能分包有多个。
从pc端得到的wxapkg文件不能直接反编译,需要先进行解密。解密后得到新的wxapkg,才能进行反编译。
解密工具:
链接:https://pan.baidu.com/s/1qlSDpYmkQK8_2c5y1AETuA
提取码:qam3
反编译工具:https://gitee.com/ksd/wxappUnpacker
需要注意的是这里的反编译工具运行需要node环境。下载好反编译工具还需配置环境,在wxappUnpacker的目录下打开cmd,安装一些依赖(一定要cd到wxappUnpacker目录下进行安装,不然安装了也没用)。
npm install uglify-es
npm install esprima
npm install css-tree
npm install cssbeautify
npm install vm2
npm install js-beautify
安装好后可以开始进行反编译,如果小程序只有一个包,直接运行命令:node wuWxapkg.js ***.wxapkg即可。如果小程序分包,有多个wxapkg,主包还是按照刚才的命令进行反编译,子包需要运行命令:node wuWxapkg.js ***.wxapkg -s=刚才主包反编译得到的项目路径。以上路径最好写绝对地址以免出现问题。
运行反编译命令时可能会遇到两个报错问题:
报错1:Error: Cannot find module ‘escodegen’
解决方案:npm i --save-dev escodegen
报错2:Error: Cannot find module ‘cheerio’
解决方案:
npm install uglify-es --save
npm install esprima --save
npm install css-tree --save
npm install cssbeautify --save
npm install vm2 --save
npm install uglify-es --save
npm install js-beautify --save
npm install escodegen --save
npm install cheerio --save
以上命令均需要在wxappUnpacker目录下执行
遇到分包时,如何区分子包和主包,可直接运行主包反编译命令如果是子包会报错提示使用-s命令。
使用-s命令反编译子包时,可能也会报错:Error: ENOTDIR: not a directory, scandir。遇到这个报错可以不用管,运行完可以看下解出来的文件,实际上需要用到的东西已经解出来了。
最后把所有子包得到的文件全部复制到主包的项目目录下,即可得到一套完整的反编译代码。
用微信开发者工具打开,就可以开始调试啦。这里还有一点需要注意的是,如果打开的是小游戏,是没有app.json的,微信开发者工具中的appid需要写小游戏类型的appid。如果是小程序的appid会无法编译,提示找不到app.json,而小游戏走的是game.json。
当然,操作到这一步直接开始编译肯定还是会有问题的,关于代码报错的修复以及羊了个羊的详细的逆向分析,后续的文章会中再进行详细介绍。