PS:本文章仅用于分享自己反编译的过程以及解决办法,切勿小程序反编译成功后做一些违反人伦的事情!

一. 前言

  • 最近在搞学校的一个晚签到小程序的时候遇到了一个MD5加密问题,试了好多方法都没有解决,所以就想看看小程序的源码,就Google了一些反编译教程,在反编译过程中,每次都会报一些莫名的错误,然后自己又去百度,踩了不少的坑,终于把小程序的源码给搞到手了,成功解决了MD5加密问题,自动签到成功完成。

  • 微信小程序的反编译听起来很屌,其实非常简单,就是纯粹的傻瓜式的操作。这当然得感谢大qwerty472123,他的GitHub有写好的node.js脚本!要想拿到微信小程序源码,找到源文件在手机存放的位置就行,源文件拿到,用反编译脚本跑一下,微信小程序代码包里的所有文件、资源就出来了。

二. 微信小程序的小漏洞

  • 小程序的源文件存放在哪?

    • 源文件当然是在放在了微信的服务器上。但是在微信服务器上,普通用户想要获取到,肯定是十分困难的,有没有别的办法呢?简单思考一下我们使用小程序的场景就会明白,当我们点开一个微信小程序的时候,其实是微信已经将它的从服务器上下载到了手机,然后再来运行的。所以,虽然我们没能力从服务器上获取到,但是我们应该可以从手机本地找到到已经下载过的小程序源文件
  • 小程序的源文件包在哪呢?
    • 具体目录位置直接给出:
      /data/data/com.tencent.mm/MicroMsg/XX(很长名字的一个文件夹,可根据时间来判断)/appbrand/pkg/
      在这个目录下,会发现一些 xxxxxxx.wxapkg 类型的文件,这些就是微信小程序的包
      微信小程序的格式就是:.wxapkg
      .wxapkg是一个二进制文件,有其自己的一套结构。
      但是这里有个坑,想要进入到上面这个目录的话,用手机自带的文件管理器肯定是不行的,安卓或者iPhone都要要用到第三方的文件管理器,比如:RE文件管理器,并且安卓需要取得root权限,而苹果手机肯定是要越狱的,且iphone的越狱难度>>安卓获取root,不管越狱还是root,这都太费劲,当然有能力的同学可以直接从手机上来操作,但是这里不推荐从真机上获取,可以下在一个模拟器!

三. 准备

  1. node.js运行环境
    ①. 下载地址,安装node.js,一路next,安装完成后将node.js设置为环境变量。
    ②. 打开cmd,测试是否安装成功,在命令行输入node -v,如下: D:>node -v 结果:v12.13.1

  2. 下载反编译脚本
    ① 最新地址:https://github.com/qwerty472123/wxappUnpacker/tree/0.3
    ② 用cd命令进入到你clone或者下载好的反编译脚本目录下,下载好后将wxappUnpacker.zip文件解压出来

  3. 下载模拟器
    我是用的是逍遥模拟器,当然别的模拟器也可以。进到模拟器中下载安装QQ、微信和RE文件管理器。

四. 拿到 .wxapkg包

  1. 打开微信,登录,打开要反编译的小程序,这里要强调一下,一定在小程序里面多打开几个页面,以保证源码全都下载到了本地。
  2. 打开RE文件管理器,进入小程序本地目录:/data/data/com.tencent.mm/MicroMsg/XX(很长名字的一个文件夹,可根据时间来判断)/appbrand/pkg/
    你会看到发现里面的一些.wxapkg后缀的文件,就是它们没错啦,可以根据使用的时间来判断哪个是你刚才从服务器下载过来的,一般小程序的文件不会太大,可以结合时间来判断。
    找到源文件后,长按左键 -> 点击右上角三个小点,打开菜单,选择‘压缩所选文件’->完成后,点击查看->长按,还是右上角,然后再将压缩好的包通过QQ发送到我的电脑。如果不进行压缩的话,是无法将这个文件通过QQ来发送的。
    这样几步简单操作,就成功拿到了小程序的源文件了。

五. 使用反编译脚本解包 wxapkg

  1. 打开从GitHub上clone或者下载好的反编译脚本的目录,然后按住SHIFT同时点鼠标右键,打开PowerShell。

  2. 依次安装以下依赖,全部安装完。
    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 程序之间也有一定的依赖关系 。

  3. 安装好依赖之后,就是最后一步了,反编译 .wxapkg 文件
    在当前目录下输入node wuWxapkg.js + file ,file就是你要反编译的文件路径。
    例如:我有一个需要反编译的文件 _1744304869_70.wxapkg 已经解压到了“E:\微信小程序” 的目录下,那么就输出命令 node .wuWxapkg.js E:\微信小程序_1744304869_70.wxapkg ,然后就可以等反编译完成!

六. 报错

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)

2. 未识别的包
说明拿到的两个.wxapkg文件里,当前反编译的包不是工程文件夹,再去RE文件管理器看下,是不是还有另一个文件呢!这个.wxapkg里面都是微信的基础包,是无需还原的!!! 很多博客都没说明这块,害我以为没反编译成功!

 Saving files...Unpack done./Users/whidy/webs/wxappUnpacker/wuWxapkg.js:104}else throw Error("This package is unrecognizable.\nMay be this package is a subPackage which should be unpacked with -s=<MainDir>.\nOtherwise, 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.\nMay be this package is a subPackage which should be unpacked with -s=<MainDir>.\nOtherwise, please decrypted every type of file by hand.")^
ReferenceError: $gwx is not defined    at vm.js:3:3at 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)

解决方法:打开脚本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]();}
}

4. vd_version_info is not defined错误 与第三个相类似,都是由于微信小程序升级,导致 page-frame.html 文件无法反编译,无法解开 wxss 格式文件,wxss 文件缺失。
使同样方法,在wuWxss.js代码中找到

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 + " \r\n" + runList[name]);
}
}

七.觉得文章对你有帮助就打赏一下吧!

反编译获取微信小程序源码(包含错误解决办法)相关推荐

  1. 安卓模拟器反编译获取微信小程序源码。

    认识一下.wxapkg文件 先来想想一个很简单的问题,小程序的源文件存放在哪? ● 当然是在微信的服务器上. ● 但是在微信服务器上,普通用户想要获取到,肯定是十分困难的,有没有别的办法呢? ● 简单 ...

  2. 反编译获取任何小程序源码——看这篇就够了

    一 准备工具 1 node.js 运行环境 下载地址:Node.js 2 反编译的脚本 源码链接:https://download.csdn.net/download/wanlitengfei/867 ...

  3. 获取微信小程序源码并进行反编译

    获取微信小程序源码并进行反编译 只需如下几部就可以爬取到你所想要的微信小程序源码: 第一: node.js运行环境 如果没有安装nodejs,请先安装一下 下载地址:https://nodejs.or ...

  4. 只需两步快速获取微信小程序源码

    第一次在掘金这样高大上的社区写文章,忐忑地敲下我获取小程序源码过程中的经验分享. 最近在学习微信小程序开发,半个月学习下来,很想实战一下踩踩坑,于是就仿写了某个小程序的前端实现,过程一言难尽,差不多两 ...

  5. 获取微信小程序源码教程

    最近在研究微信小程序,网上很多的小程序都是可以借鉴的,那么如何获取源码就很重要了 目录 1.安装对应环境 (Node,js) 2.下载反编译脚本 3.下载安卓模拟器获取微信小程序反编译文件 4.反编译 ...

  6. 使用node获取微信小程序源码

    具体的局限请看:qwerty472123大神的md文件 https://github.com/qwerty472123/wxappUnpacker 一.简单聊一下xxxxx.wxapkg 先来想想一个 ...

  7. win电脑解析获取微信小程序源码(分包及具体操作)

    微信小程序源码解析

  8. 云开发版高效学习微信小程序源码包含复习资料学习共享护眼精灵等功能

    ☑️ 编号:X0016 ☑️ 品牌:暂无 ☑️ 语言:微信小程序 ☑️ 数据库:无需数据库 ☑️ 类型:微信小程序 ☑️ 规格:小程序 ※ 欢迎关注私信(发消息不限制),领取福利 ※ ☑️ 源码介绍: ...

  9. 反编译微信小程序,win电脑解析获取微信小程序源码

    好不容易写的小程序然后忘记保存被删了怎么办?不要慌这里就教你怎么搞. 环境准备 1.node 环境准备 Node下载地址 安装后将nodejs设置为环境变量. 打开cmd,测试是否安装成功:在命令行输 ...

最新文章

  1. 机器学习算法与Python实践之(一)k近邻(KNN)
  2. 成功解决ImportError: Could not find 'msvcp140.dll'. TensorFlow requires that this DLL be installed in a
  3. 【Nignx】 nginx启动http服务,报错 curl: (56) Recv failure: Connection reset by peer
  4. 【Zigbee技术入门教程-02】一图读懂ZStack协议栈的核心思想与工作机理
  5. Hadoop学习总结:Map-Reduce入门
  6. 华为手机_text是什么文件_华为学习文档资料
  7. 2-1-XML和约束文档
  8. python制作合同模板带图片_办公自动化7_用Python操作Word批量生成合同
  9. 4.28考试总结(下午)
  10. 计算机模块测试题,模拟计算机基础模块测试题.doc
  11. Java编程思想笔记目录
  12. 支付宝区块链专利申请连续三年全球第一:办事效率提升1万倍
  13. 【计算机组成原理之存储系统】超级详细
  14. 单片机常用芯片总结(二)——DS1302时钟芯片
  15. 广和通L610_ADP对腾讯云通信笔记——02(STM32F411控制L610)
  16. 避免企业IT外包服务风险三大要素
  17. 用C#编写HMI界面,用USB转485和PLC通讯,PLC用的是台达的DVP-12SE系列
  18. 纯硬件无人直播手机,不需要电脑,不需要虚拟摄像头,可人工干预、可粉丝互动,半无人直播
  19. 小程序云开发,CMS内容管理系统
  20. 局域网(LAN),广域网(WAN)和互联网

热门文章

  1. 学习傅里叶变换的心得
  2. 数学通道的应用(四)-发动机转速曲线
  3. 布局粤港澳大湾区,打造AI+工业互联网新高地
  4. java手机注册获取验证码--乐信平台
  5. GitHub重磅官宣!Java开发环境搭建超全详解
  6. 最新炼数成金Oracle 12C RAC集群原理与管理实战
  7. vue + blockly 示例
  8. Matlab实现“跳动的心”动画效果(wzl)
  9. 华为研究院19级研究员几年心得终成趣谈网络协议文档,讲解
  10. 16进制(00)转字符