反编译小程序详细教程,处理各种异常报错

news/2024/12/23 1:08:49/

文章目录
一、准备工作
(一)安装Nodejs
(二)解密和逆向工具
二、小程序缓存文件解密
(一)定位小程序缓存路径
(二)源码解密
(三)源码反编译
三、小结
四、异常处理
1.TypeError: subPackage.pages is not iterable 异常
2.function(env,dd,global){$gwxc=0;var root={“tag”:“wx-page”};root.children=[] 异常
3.SyntaxError: Unexpected token ‘}‘ 异常处理
一、准备工作
(一)安装Nodejs
Node.js是一个基于 Chrome V8 引擎的 JavaScript 运行环境,通常是运行在服务端的 JavaScript。本文需要nodejs的环境提供npm工具来安装相关依赖,因此需要首先安装nodejs。
Node.js 官方下载地址:
https://nodejs.org/zh-cn/download/
之后根据自己使用的操作系统选择相应的版本即可,这里我选择windows版:

设置好安装路径后一路点击next即可。
之后在cmd中输入:

node -v

在这里插入图片描述

出现版本信息即表示安装成功。
注意:在执行例如npm install xxx -g等命令全局安装的时候,默认会将模块安装在C:\Users\用户名\AppData\Roaming路径下的npm和npm_cache中,不方便管理且占用C盘空间,所以这里我参考了别人的配置,自定义的全局模块安装目录,在node.js安装目录下新建两个文件夹 node_global和node_cache。
然后在cmd中执行以下命令(注意前两条命令改成你们自己的路径):

设置镜像源为淘宝npm镜像,可提高下载速度

npm config set registry=https://registry.npm.taobao.org

本文只是为了使用npm来安装东西,实际上到这里就可以结束了。如果需要更多的功能,则后续还需要配置环境变量,请参考其他文章,本文不过多涉及。
这里顺便提一下,如果需要进行版本相关的操作,请参考以下命令:

命令 说明

nvm install 14.15.5 安装指定的版本的nodejs
nvm use 10.5.0  使用指定版本的nodejs
nvm list	查看已经安装的版本
nvm list installed	查看已经安装的版本
nvm list available	查看网络可以安装的版本
nvm arch	查看当前系统的位数和当前nodejs的位数
nvm install [arch]	安装制定版本的node 并且可以指定平台 version 版本号 arch 平台
nvm on	打开nodejs版本控制
nvm off	关闭nodejs版本控制
nvm proxy [url]	查看和设置代理
nvm node_mirror [url]	设置或者查看setting.txt中的node_mirror,如果不设置的默认是 https://nodejs.org/dist/
nvm npm_mirror [url]	设置或者查看setting.txt中的npm_mirror,如果不设置的话默认的是:https://github.com/npm/npm/archive/.
nvm uninstall	卸载制定的版本
nvm use [version] [arch]	切换制定的node版本和位数
nvm root [path]	设置和查看root路径
nvm version	查看当前的版本

(二)解密和逆向工具
在获得小程序的缓存文件之后,需要先使用解密工具进行一轮解密,之后才能进行逆向。
解密工具下载地址:
「小程序包解密」
链接:https://pan.quark.cn/s/1f14cc35d208
提取码:jVVm

逆向工具下载地址:
链接:https://pan.quark.cn/s/0d4b2e30868d
提取码:8NAV

注:以上地址若失效,可及时私信我。

三、小程序缓存文件解密
(一)定位小程序缓存路径
首先确定小程序的缓存目录,在微信上打开设置,然后找到文件管理:

点击打开文件夹,打开Applet文件夹:

这里面即存储了小程序的本地缓存文件:

(二)源码解密
接着打开一个小程序,这里不便透露具体用的是哪个小程序,大家可以自行去寻找感兴趣的小程序玩一下。
首先打开目标小程序,然后多点一些页面,让小程序在本地产生缓存文件,之后查看本地文件夹,会看到产生了一个文件夹,通过文件夹创建的时间可以判断出哪个文件夹里的数据是属于刚访问小程序的缓存目录:

那么之后,我们需要先对这些缓存数据进行一次解密,方法很简单,打开解密工具:

然后点击’选择加密小程序包’,并选中自己刚才定位出来的小程序的缓存目录。如图所示,已经解密成功:

解密后的文件在解密程序同目录下的wxpack文件夹中:
在这里插入图片描述

(三)源码反编译
首先解压已下载好的wxappUnpacker,然后进入该文件夹,复制该文件夹的地址,然后以管理员身份打开cmd窗口(直接按win+R打开运行窗口,然后输入cmd,按ctrl+shift+enter),然后跳转到wxappUnpacker内,如下所示:

注意一定要管理员身份运行cmd窗口,否则后面可能造成命令执行出错。
然后开始安装依赖,按顺序执行以下命令:

npm install
npm install esprima
npm install css-tree
npm install cssbeautify
npm install vm2
npm install uglify-es
npm install js-beautify

我这里因为已经有安装过了,所以和你们的会不太一样。执行以后不要出现error的报错信息即可。
然后根据前面解密的文件构造命令如下:

node ./wuWxapkg.js E:\WeiXinXiaoChengXu\wxpack\wx3b25611579a1b7ec.wxapkg 

这条命令的格式是:

node ./wuWxapkg.js 主包路径

另外就是分包的的反编译 指令:

node ./wuWxapkg.js 分包路径 -s=主包路径

有时候我们解密后得到的是主包后的分包(具体为什么我也不清楚,看情况),那么这时候就可以很方便的用到-s参数来指定存放的路径。
现在我们将根据第一种命令格式构造的命令在cmd中执行;

此时可以看到已经生成了一个文件夹,当前内容如下:
在这里插入图片描述

此时就可以自由导入到微信开发者工具中进行学习观摩了

三、小结
本文分享了从微信小程序本地缓存文件中反编译获得源码的方法,其中安装依赖时需要用到npm,而npm不需要单独安装,因为在安装 Node 的时候,会连带一起安装 npm。因此我们需要安装一个nodejs,之后使用解密和反编译工具按照先解密后反编译的步骤即可获得小程序的源码,不足之处敬请谅解。

四、异常总结处理

1.TypeError: subPackage.pages is not iterable 异常

 for (let page of subPackage.pages) {
^TypeError: subPackage.pages is not iterable

这个异常其实就是简单的subPackage参数为空导致出现的异常,只需要简单修改为下面内容即可

if(subPackage.pages){for (let page of subPackage.pages) {let items = page.replace(root, '');newPages.push(items);let subIndex = pages.indexOf(root + items);if (subIndex !== -1) {pages.splice(subIndex, 1);}}}

2.function(env,dd,global){$gwxc=0;var root={“tag”:“wx-page”};root.children=[] 异常
这个原因是因为现目前网上大多的wxappUnpacker-master 包都已经是旧的了,新开发出来的小程序或者升级后的小程序使用旧版本的wxappUnpacker-master 都是难以进行解析了的,主要错误原因就在于,解析page-frame.html文件时候,提取出来的内容导入到VM.run函数中不是一个合法的JavaScript代码格式的内容,导致出现的异常,这种问题就需要使用到魔法进行处理了,想要了解魔法处理的可以私信喔,或者可以有偿帮忙解析喔

3.SyntaxError: Unexpected token ‘}‘ 异常处理
出这个异常其实和上面第二个异常的原因一模一样,都是截取出来的字符串传入到JavaScript中不是一段合法的代码导致的,这种如果需要协助处理,可以私信喔

更多异常处理方式持续更新中


http://www.ppmy.cn/news/1103424.html

相关文章

超级等级福利礼包

文章目录 一、 介绍二、 设计等级礼包的目的1. 提升游戏玩家活跃度2. 提升游戏用户吸引力3. 提高游戏用户留存率4. 实现间接收入5. 持续营收 三、 玩家心理总结四、总结该模式的赢利点五、 该模式的应用场景举例 一、 介绍 超级等级福利礼包,玩家每升级5级即可获得…

Brief. Bioinformatics2021 | sAMP-PFPDeep+:利用三种不同的序列编码和深度神经网络预测短抗菌肽

文章标题:sAMP-PFPDeep: Improving accuracy of short antimicrobial peptides prediction using three different sequence encodings and deep neural networks 代码:https://github.com/WaqarHusain/sAMP-PFPDeep 一、问题 短抗菌肽(sAMPs)&#x…

lv4 嵌入式开发-6 格式化输入输出

目录 1 标准I/O – 格式化输出 2 标准I/O – 格式化输入 3 小结 4 标准I/O – 思考和练习 1 标准I/O – 格式化输出 #include <stdio.h> int printf(const char *fmt, …); int fprintf(FILE *stream, const char *fmt, …); int sprintf(char *s, const char *f…

基于Jetty9的Geoserver配置https证书

1.环境准备 由于Geoserver自带的jetty版本不具备https模块&#xff0c;所以需要下载完整版本jetty。这里需要先查看本地geoserver对应的jetty版本&#xff0c;进入geoserver安装目录&#xff0c;执行如下命令。 java -jar start.jar --version Jetty Server Classpath: -----…

7、Spring之依赖注入源码解析(下)

resolveDependency()实现 该方法表示,传入一个依赖描述(DependencyDescriptor),该方法会根据该依赖描述从BeanFactory中找出对应的唯一的一个Bean对象。 @Nullable Object resolveDependency(DependencyDescriptor descriptor, @Nullable String requestingBeanName,@Null…

基于ubuntu构建jdk镜像

背景 Docker Hub 上有很多官方的 JDK 镜像&#xff0c;但是它们都不是基于 ubuntu 的&#xff0c;而是基于更小的 Linux 发行版&#xff0c;在使用一些命令行工具的之后老师报找不到&#xff0c;而且自己对 ubuntu 也更加熟悉。 Dockerfile # 以ubuntu为基础镜像 FROM ubunt…

第6篇 vue的打包工具webpack

一 webpack 1.1 webpack的作用 webpack是一个打包工具&#xff0c;可以把多个静态资源文件打包成一个文件。如图所示&#xff1a; 1.2 版本依赖对照关系 PS E:\vue-project\vue-demo0902\wp-demo> npm -v 6.4.1 PS E:\vue-project\vue-demo0902\wp-demo> node -v v10.…

力扣1、两数之和

转到力扣 题目 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你可…