反编译获取微信小程序源码教程

一、准备工具

  • node.js运行环境反编译脚本基于node.js编写,如果没有安装需要先安装。
    node.js官网:https://nodejs.org/en/

二、工具使用

  • 安装node.js不作细述,按提示安装即可。安装完成后在命令窗口输入:node -v,能查看到版本号即可。
  • 打开脚本地址下载反编译脚本,解压。
  • 安装依赖在脚本目录下shift+鼠标右键,打开命令窗口,逐条命令安装:
    npm install esprima
    npm install css-tree
    npm install cssbeautify
    npm install vm2
    npm install uglify-es
    npm install js-beautify
    npm install escodegen
  • 获取小程序.wxapkg文件雷电模拟器安装好RE管理器获取root权限,进入存放路径,
    安卓存放路径:/data/data/com.tencent.mm/MicroMsg/{User}/appbrand/pkg
    其中{User}为当前用户的用户名,类似于2bc*************b65一串。

    1.png

    将文件打包发送到电脑本地。

    请输入图片描述

    请输入图片描述

    请输入图片描述

三、开始反编译

  • 在脚本目录下shift+鼠标右键,打开命令窗口,输入命令:node wuWxapkg.js <files...><files...>是指小程序.wxapkg文件存放目录。

    请输入图片描述

    请输入图片描述

  • 比如我的文件存放在D:\小程序解包\_820332684_36.wxapkg
  • 那就在命令窗口输入:node wuWxapkg.js D:\小程序解包\_820332684_36.wxapkg请输入图片描述
  • 解包成功请输入图片描述
  • 小程序存放目录下新增反编译好的小程序源码请输入图片描述

    1.png

  • 打开微信开发者工具导入,成功打开小程序,反编译完成。请输入图片描述

    请输入图片描述

 

反编译微信小程序$gwx is not defined报错解决方法

 

错误提示

1.png

错误提示代码:

ReferenceError: $gwx is not defined
    at vm.js:3:3
    at Script.runInContext (vm.js:107:20)
    at VM.run (D:\wxappUnpacker-master\node_modules\vm2\lib\main.js:208:72)
    at runVM (D:\wxappUnpacker-master\wuWxss.js:69:6)
    at runOnce (D:\wxappUnpacker-master\wuWxss.js:97:27)
    at Array.preRun (D:\wxappUnpacker-master\wuWxss.js:177:5)
    at CntEvent.decount (D:\wxappUnpacker-master\wuLib.js:17:43)
    at ioLimit.runWithCb.err (D:\wxappUnpacker-master\wuLib.js:73:11)
    at agent (D:\wxappUnpacker-master\wuLib.js:54:14)
    at FSReqWrap.oncomplete (fs.js:141:20)

解决方法

修改反编译脚本wuWxss.js代码

将原代码

function runVM(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]();
    }
}

修改为

function runVM(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]();
    }
}

相关教程

 

https://www.yuchunlai.com/index.php/archives/33/

https://www.yuchunlai.com/index.php/archives/11/