最新‘微信小程序’反编译最新教程(如何找回微信小程序源码手把手教程)

前言:

简单聊一下xxxxx.wxapkg
先来想想一个很简单的问题,小程序的源文件存放在哪?

当然是在微信的服务器上
但是在微信服务器上,普通用户想要获取到,肯定是十分困难的,有没有别的办法呢?

简单思考一下我们使用小程序的场景就会明白,当我们点开一个微信小程序的时候,其实是微信已经将它的从服务器上下载到了手机,然后再来运行的。
所以我们应该可以从手机本地找到到已经下载过的小程序文件
那么如何才能在手机里找到小程序的源文件包呢?

这里只以安卓手机为例
具体目录位置直接给出:
根目录/data/data/com.tencent.mm/MicroMsg/{一串16进制字符}/appbrand/pkg/
在这个目录下,会发现一些 xxxxxxx.wxapkg 类型的文件,这些就是微信小程序的包

微信小程序的格式就是:.wxapkg


这里重要声明一下:虽然微信小程序的包后缀是.wxapkg,但有一些包的依赖后缀也是.wxapkg,真正的小程序包大小1M左右,而依赖包大小2、3M甚至更多。所以一股脑的反编译.wxapkg 类型的文件可能会报错: Error: This Package is unrecognizable, please decrypted every type of file by hand.,遇见这个问题的小伙伴请自知,你可能没找

对包哦!

.wxapkg是一个二进制文件,有其自己的一套结构。

微信小程序源码阅读笔记lrdcq大神的这篇博文有对.wxapkg的详细介绍,当然你也不可以不看
但是这里有个坑,想要进入到上面这个目录的话,用手机自带的文件管理器肯定是不行的,安卓或者iPhone都要要用到第三方的文件管理器,比如:RE文件管理器,并且安卓需要取得root权限,而苹果手机肯定是要越狱的,且iphone的越狱难度>>安卓获取root,不管越狱还是root,这都太费劲,当然有能力的同学可以直接从手机上来操作,但是这里不推荐从真机上获取。


下面我们来讲讲具体的操作步骤:

一、准备材料
1.node.js运行环境

如果没有安装nodejs,请先安装一下
下载地址:https://nodejs.org/en/
2.反编译的脚本

这里提供一个Github上qwerty472123大神写的node.js版本的,当然也有其它版本的,例如python版本,这里我只是简单地用node.js版本举例
地址:https://github.com/nieyangyang712/wxApp-Unpacker

3.安卓模拟器(要求自带root权限)

我使用的是夜神模拟器,下载地址:https://www.yeshen.com/cn/download/fullPackage

你也可以自选 或者:

网易 Mumu 模拟器安装

  • 安装 微信、RE文件管理器
  • 设置Root 权限
  • 打开 RE文件管理器,提示请求超级用户访问权限,选择允许

详细步骤
使用安卓模拟器获取到.wxapkg文件

不用越狱,不用root,使用电脑端的安卓模拟器来获取是一个非常简单快捷的获取方式,具体步骤如下: 
1.打开安装好的安卓模拟器,并在模拟器中安装QQ、微信、RE管理器

QQ、微信在模拟器自带的应用商店里搜索下载安装即可
RE管理器的下载地址:https://pan.baidu.com/s/1PPBx08rNutXxhlMMJbuTpQ

提示一下:RE管理器在模拟器的应用商店一般也能搜到!!可以直接下载

下载好后直接拖拽进打开的模拟器窗口就会自动安装

2.设置一下模拟器

以我个人认为比较好用的夜神模拟器举例
首先到模拟器内部设置超级用户权限

先找到设置:

然后找到超级用户:

 

 è¿éåå¾çæè¿°

这些操作的目的都是为了能让RE管理器顺利的获取到ROOT权限


3.接下来在模拟器里打开微信,然后在微信中运行你想要获取的下程序(这其实是让微信把小程序的源文件包从服务器下载到了本地了)

就以我说的这款共享单车的小程序举例
在模拟器微信中运行一下后,直接切回模拟器桌面,运行RE浏览器 来到目录
根目录/data/data/com.tencent.mm/MicroMsg/{一串16进制字符}/appbrand/pkg/
就抵达了目的文件夹 :

或者直接在搜索框内搜索:/data/data/com.tencent.mm/MicroMsg/...    找到wxapkg的文件就是你要找的

打开文件管理器,找到/data/data/com.tencent.mm/MicroMsg 目录 ,然后找到一个很长的用户随机码,

  继续找到/appbrand/pkg/xxx,接下来会出现小程序A的wxapkg包

 压缩apkg包,然后长按发送到QQ,微信。接收到后存在本地就行了

然后:到此我们获取到了小程序的包 ,打开node.js , 路径切换到我们下载的反编译脚本的目录,

我这里是visual code 编辑器,github 上的 脚本源码,如图:

提示:  (  路径不要包含中文名称,否则反编译时可能因编码不对 造成异常 )

4 切换到反编译脚本的目录后 ,在node命令窗口中依次安装以下依赖:

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

下面讲解需要更改的源码和操作步骤:

这时可能会报一个错误、【找不到escodegen模块】、莫紧张  ,  否则容易秃头......   

运行如下命令:npm i --save-dev escodegen

然后再输入命令:node .\wuWxapkg.js D:\2019\709\1\_497193109_61.wxapkg

在本地文件夹查看:

 

 

打开小程序的编辑器开启项目:

 

如果运行出现了点问题:

1、可以试试,点击开发者工具详情去掉 es6转es5的勾,勾上不校验安全域名 
2、 勾选了还是无法运行?那么请在详情里把基础版本库调低至1.5左右,再试试 
3、出现找不到某些文件的情况怎么办?我只能告诉:删!删!删! app.json 
里面,提示找不到那个文件,就将pages下注册的该页面语句暂时删除掉。删 
到可以运行为止 
4、还是无法运行?那就自己想办法吧!

 问题一:反编译微信小程序错误: $gwx is not defined和__vd_version_info__ is not defined 已解决

修改wxappUnpacker文件中的 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]();
      // }
 
      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]();
         }
      }
   }

 问题二:Cannot find module 'uglify-es'


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

问题三:$gwx is not defined

__vd_version_info__ is not defined

修改wxappUnpacker文件中的 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]();
		//}
 
      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]();
         }
      }
   }

问题四、报错

vm.js:3612
return function(env,dd,global){$gwxc=0;var root={"tag":"wx-page"};root.children=[]
^^^^^^

SyntaxError: Illegal return statement

SyntaxError: Illegal return statement



出现类似错误在网上找了很久,发现有一篇文章原文链接:wxappUnpacker 微信小程序反编译 2019 9月使用问题总结 讲到一位大佬给出了解决方案,larack8

他提出了https://github.com/qwerty472123/wxappUnpacker/issues/215

然后github地址https://github.com/larack8/wxappUnpacker

但是这里面有几个问题 Cannot find module 'uglify-es',本来都装好了,但是还报这个错误??

Error: Cannot find module 'uglify-es'

at Function.Module._resolveFilename (module.js:547:15)

at Function.Module._load (module.js:474:25)

at Module.require (module.js:596:17)

at require (internal/module.js:11:18)

at Object.<anonymous> (/home/wq57885/wxappUnpacker2/wuJs.js:3:18)

at Module._compile (module.js:652:30)

at Object.Module._extensions..js (module.js:663:10)

at Module.load (module.js:565:32)

at tryModuleLoad (module.js:505:12)

at Function.Module._load (module.js:497:3)

后来找到一个大佬的解决思路,需要升级到最新的nodejs,再重新安装库,这边仅供参考

npm install -g n

n latest

npm update -g

此时依然报错Cannot find module 'uglify-es',同时把 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

再次完美执行,久违的界面

或者选择dev分支的这个新的版本吧:

 最近老有粉丝问我反编译失败了:

Illegal return statement

【问题说明】反编译其他的包可以,但是反编译这个包就报错了
【解决】我觉得可能是 wxappUnpacker 不支持反编译新开发的小程序;去gitub上查找最新的 wxappUnpacker,重新安装依赖,就可以避免这个问题。

gitub地址:https://github.com/nieyangyang712/wxappUnpacker

最后为了方便大家的沟通与交流请加QQ群: 625787746

请进QQ群交流:【IT博客技术分享群①】:https://jq.qq.com/?_wv=1027&k=DceI0140

  • 8
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT博客技术分享

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值