反编译获取线上小程序源码

4,987 阅读2分钟

注意:本方法亲测适用于安卓手机,ios机型未知适用性。当然也可以用PC夜神模拟器抓取小程序包。

通过反编译获取微信小程序源码,网上一堆教程,这里简单说下操作步骤。

准备环境

可在PC和手机任一环境中获取小程序源码。

  • PC端:

    请安装夜神模拟器,完成后开启root权限。如下:

    之后于夜神上下载RE管理器、微信即可。

  • 安卓手机:

    请越狱获取root权限。鉴于目前大多数root软件都已不支持安卓高版本系统,推荐搞ji者使用Magisk Manager一劳永逸,获取后的root权限也稳定可靠(有变砖风险,小白慎重,富人随意)。获取root权限后,一样下载RE管理器、微信即可。

开始获取

  • 获取小程序源文件包“xxxxx.wxapkg”

    1. 访问过的线上的微信小程序包目录为:/data/data/com.tencent.mm/MicroMsg/{此处为一串16进制字符}/appbrand/pkg/

    2. 授予RE管理器Root权限,用RE管理器打开此目录,会发现可能不止一个的 xxxxxxx.wxapkg 类型的文件,这都是微信小程序的源文件包。

    3. 长按该包,然后点右上角选项将其压缩为zip包,然后再将压缩好的包发送到你的电脑上,解压缩得到xxxxxxx.wxapkg

  • node执行反编译脚本

    • 点下载反编译脚本,在node中执行npm install安装依赖,或单独安装依赖(建议):

      npm install esprima
      npm install css-tree
      npm install cssbeautify
      npm install vm2
      npm install uglify-es
      npm install js-beautify
      
    • 重点:下载的反编译脚本代码存在问题,需修改!

      将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 = {};
      		let handle = {cssFile: name};
      		let gg = new GwxCfg();
      		let tsandbox = {
      			$gwx: GwxCfg.prototype["$gwx"],
      			__mainPageFrameReady__: GwxCfg.prototype["$gwx"], //解决 $gwx is not defined
      			__vd_version_info__: GwxCfg.prototype["$gwx"], //解决__vd_version_info__ is not defined
      			__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]();
      			}
      		}
      	}
      
    • 执行node wuWxapkg.js [-d] <files...> 即可。files就是你想要反编译的wxapkg文件名。

      成功后如图:

      1594045289879