反编译获取微信小程序源码(包含错误解决办法)
PS:本文章仅用于分享自己反编译的过程以及解决办法,切勿小程序反编译成功后做一些违反人伦的事情!
一. 前言
-
最近在搞学校的一个晚签到小程序的时候遇到了一个MD5加密问题,试了好多方法都没有解决,所以就想看看小程序的源码,就Google了一些反编译教程,在反编译过程中,每次都会报一些莫名的错误,然后自己又去百度,踩了不少的坑,终于把小程序的源码给搞到手了,成功解决了MD5加密问题,自动签到成功完成。
三. 准备
- node.js运行环境 ①. ,安装node.js,一路next,安装完成后将node.js设置为环境变量。 ②. 打开cmd,测试是否安装成功,在命令行输入node -v,如下: D:>node -v 结果:v12.13.1
- 下载反编译脚本 ① 最新地址: ② 用cd命令进入到你clone或者下载好的反编译脚本目录下,下载好后将wxappUnpacker.zip文件解压出来
四. 拿到 .wxapkg包
五. 使用反编译脚本解包 wxapkg
- 打开从GitHub上clone或者下载好的反编译脚本的目录,然后按住SHIFT同时点鼠标右键,打开PowerShell。
- 依次安装以下依赖,全部安装完。 npm install esprima -g npm install css-tree -g npm install cssbeautify -g npm install vm2 -g npm install uglify-es -g npm install js-beautify -g 这些 node.js 程序之间也有一定的依赖关系 。
六. 报错
1. 未安装成功工具依赖的模块
Error: Cannot find module uglify-es at Function.Module._resolveFilename (internal/modules/cjs/loader.js:581:15) at Function.Module._load (internal/modules/cjs/loader.js:507:25) at Module.require (internal/modules/cjs/loader.js:637:17) at require (internal/modules/cjs/helpers.js:22:18) at Object.<anonymous> (/Users/whidy/webs/wxappUnpacker/wuJs.js:3:16) at Module._compile (internal/modules/cjs/loader.js:689:30)
Saving files... Unpack done. /Users/whidy/webs/wxappUnpacker/wuWxapkg.js:104 }else throw Error("This package is unrecognizable. May be this package is a subPackage which should be unpacked with -s=<MainDir>. Otherwise, please decrypted every type of file by hand.") Error: This package is unrecognizable. May be this package is a subPackage which should be unpacked with -s=<MainDir>. Otherwise, please decrypted every type of file by hand. at Array.packDone (/Users/whidy/webs/wxappUnpacker/wuWxapkg.js:104:14)
3. $gwx is not defined问题,这种报错是最多的一种
Saving files... Unpack done. /Users/whidy/webs/wxappUnpacker/wuWxapkg.js:104 }else throw Error("This package is unrecognizable. May be this package is a subPackage which should be unpacked with -s=<MainDir>. Otherwise, please decrypted every type of file by hand.") ^ ReferenceError: $gwx is not defined at vm.js:3:3 at Script.runInContext (vm.js:107:20) at VM.run (D:wxappUnpacker-master ode_modulesvm2libmain.js:208:72) at runVM (D:wxappUnpacker-masterwuWxss.js:69:6) at runOnce (D:wxappUnpacker-masterwuWxss.js:97:27)
解决方法:打开脚本wuWxss.js代码 将原来的代码
functionrunVM(name,code){ let wxAppCode={},handle={cssFile:name}; let vm=new VM({sandbox:Object.assign(new GwxCfg(),{__wxAppCode__:wxAppCode,setCssToHead:cssRebuild.bind(handle)})}); vm.run(code); for(let name in wxAppCode)if(name.endsWith(".wxss")){ handle.cssFile=path.resolve(frameName,"..",name); wxAppCode[name](); } }
替换为
functionrunVM(name,code){ let wxAppCode={},handle={cssFile:name}; let gg = new GwxCfg(); let tsandbox ={$gwx:GwxCfg.prototype["$gwx"],__mainPageFrameReady__:GwxCfg.prototype["$gwx"],__wxAppCode__:wxAppCode,setCssToHead:cssRebuild.bind(handle)}; let vm = new VM({sandbox:tsandbox}); vm.run(code); for(let name in wxAppCode)if(name.endsWith(".wxss")){ handle.cssFile=path.resolve(frameName,"..",name); wxAppCode[name](); } }
function runOnce() { }
替换为
function runOnce() { for (let name in runList) { // console.log(name, runList[name]); var start = `var window = window || {}; var __pageFrameStartTime__ = Date.now(); var __webviewId__; var __wxAppCode__={}; var __mainPageFrameReady__ = function(){}; var __WXML_GLOBAL__={entrys:{},defines:{},modules:{},ops:[],wxs_nf_init:undefined,total_ops:0}; var __vd_version_info__=__vd_version_info__||{}; $gwx=function(path,global){ if(typeof global === undefined) global={};if(typeof __WXML_GLOBAL__ === undefined) {__WXML_GLOBAL__={}; }__WXML_GLOBAL__.modules = __WXML_GLOBAL__.modules || {}; }`; runVM(name, start + " " + runList[name]); } }
上一篇:
uniapp开发微信小程序-2.页面制作
下一篇:
如何运营新零售saas系统?