前言:

简单聊一下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 模拟器安装

  • 下载地址: http://mumu.163.com/360/
  • 下载完安装包后直接安装
  • 打开模拟器
  • 安装 微信、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 nn latestnpm update -g此时依然报错Cannot find module 'uglify-es',同时把 Error: Cannot find module 'cheerio'一起解决了npm install uglify-es --savenpm install esprima --savenpm install css-tree --savenpm install cssbeautify --savenpm install vm2 --savenpm install uglify-es --savenpm install js-beautify --savenpm install escodegen --savenpm 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

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

  1. 微信小程序反编译wxss文件缺失_如何找回微信小程序源码?2020年微信小程序反编译最新教程 小宇子李...

    前言:在网上看了找回微信小程序源码很多教程,都没法正常使用.微信版本升级后,会遇到各种报错, 以及无法获取到wxss的问题.查阅各种资料,最终解决,于是贴上完整的微信小程序反编译方案与教程. 本文章仅 ...

  2. 如何找回微信小程序源码?2020年微信小程序反编译最新教程

    前言:在网上看了找回微信小程序源码很多教程,都没法正常使用.微信版本升级后,会遇到各种报错, 以及无法获取到wxss的问题.查阅各种资料,最终解决,于是贴上完整的微信小程序反编译方案与教程. 本文章仅 ...

  3. 微信小程序反编译wxss文件缺失_如何找回微信小程序源码?2019年微信小程序反编译最新教程...

    前言:在网上看了找回微信小程序源码很多教程,都没法正常使用.微信版本升级后,会遇到各种报错, 以及无法获取到wxss的问题.查阅各种资料,最终解决,于是贴上完整的微信小程序反编译方案与教程. 本文章仅 ...

  4. 使用java反编译查看java生成的exe文件的源码

    第一次写博客,也些有些问题. 上网下载一个java反编译软件,我使用的是jd-gui这款软件. 在编译时,不能直接用编译软件打开exe执行文件,有些软件是可以打开的,不过显示的是汇编代码. 首先打开e ...

  5. 微信小程序反编译得到的是html,微信小程序“反编译”实战(一):解包

    本实践教程将一步步告诉你如何"反编译"获得其它小程序的源代码,包括"解包"和"源码还原"两篇,主要参考了看雪论坛.V2EX.GitHub 等 ...

  6. 微信小程序反编译wxss文件缺失_微信小程序反编译~2020年

    摘要 安装wxappUnpacker小程序反编译工具并使用(2020.03) 关键词: 微信小程序反编译 wxss 介绍 上次分享了web前端爬取工具 ,那么这次也同样讲讲微信小程序反编译吧,对于像博 ...

  7. 后端开发工具:反编译工具、VS插件、.NET Framework源码地址

    再学习.工作中,开发免不了要使用第三方工具.今天介绍2款反编译工具 一.dnspy 免安装.免费.可调试.可修改重新编译dll 开源项目地址:https://github.com/0xd4d/dnSp ...

  8. Java--使用反编译工具,打开jar包,查看源码

    操作系统:Windows 1.反编译工具: 链接:https://pan.baidu.com/s/1GwglWXc_lj5Q60g1t16lTA 提取码:tf5l  2.下载好后,解压至自己存放的路径 ...

  9. ajax资料收集-Ajax文章(教程和实例)---Ajax资源下载(源码和教程)---Ajax规范标准

    CSDN Blog Ajax文章搜索: http://search.csdn.net/search/ajax/1/blog/ 专题:Ajax技术应用开发 http://www.51cto.com/ht ...

最新文章

  1. java request get json数据_Java中,获取request中json数据
  2. linux7 yum安装rabbitmq,CentOS7linux下yum安装RabbitMQ以及使用顶
  3. densenet论文_DRCN论文解读
  4. EasyVS 0.3版本发布 -- 给力变换vs编辑器主题
  5. html中如何实现选择存储路径的功能_16687.VSM006分解03_如何打开HTML内嵌图像存储位置...
  6. ASP.NET中的OutOfMemoryException
  7. 【分享】一套非常简单的企业即时通讯
  8. shell编程追加1
  9. 【报告分享】GitHub 2020数字洞察报告.pdf(附下载链接)
  10. 地面控制点的作用_地下室人防预留预埋施工要点及控制点
  11. amCharts使用方式
  12. vue 不同权限显示不同页面
  13. w10计算机怎么恢复出厂设置路由器,win10无线路由器设置步骤图_win10重置路由器后怎么设置...
  14. word文件点击打印没反应
  15. 图像的形态学处理总结
  16. 独家报道|配音工具大放送|这么好听的声音居然……(教程篇)
  17. 小程序-实现左右菜单联动功能
  18. 计算机网络之七层网络模型
  19. Python爬虫爬取某小说网的教程(含全代码)#大佬勿喷
  20. Java实现 蓝桥杯VIP 算法提高 阮小二买彩票

热门文章

  1. 连接MySQL的jar包在本地哪里可以找到
  2. Windows 2008 Server搭建Radius服务器的方法
  3. 对提升开发效率的总结
  4. 2022中国企业安全与风险管理国际峰会
  5. 如何在vue项目中引入html页面
  6. opencv图像处理之图像平移
  7. 医院在线问诊源码 医院视频问诊源码 医院小程序源码
  8. 山东莱芜市民在省内91家医院就医可即时结算
  9. 做外贸究竟要怎么利用好海关数据?这里给你最好的方案
  10. 目前视频监控领域高清化的关键技术有哪些?