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

文章目录
一、准备工作
(一)安装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中不是一段合法的代码导致的,这种如果需要协助处理,可以私信喔(G众号:程序员吴同学)

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/131515.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go 异常处理

代码在执行的过程中可能因为一些逻辑上的问题而出现错误 func test1(a, b int) int {result : a / breturn result } func main() {resut : test1(10, 0)fmt.Println(resut) }panic: runtime error: integer divide by zero goroutine 1 [running]: …

华为云arm架构的linux系统中通过docker部署python环境

背景 有时候需要在无互联网的环境安装部署python环境,虽然可以在linux系统中直接安装python环境,但是比较复杂乱,特别是环境多的时候,其实可以通过docker打包安装的方式来实现 1、租用华为云arm加载的服务器 https://www.huaweicloud.com/product/ecs.html 2、安装doc…

请明星出席品牌周年庆活动:巧妙策略与成功之道

品牌的周年庆典是一次展示实力、感谢客户和吸引更多关注的机会。在这个特殊时刻,让明星出席活动演出无疑是让庆典更加引人注目和难忘的方式。明星的存在不仅能增加活动的知名度,还能为品牌增色不少。然而,邀请明星出席活动是一项复杂的任务&a…

phpcmsV9.6.0sql注入漏洞分析

目录 前言 环境准备 漏洞点 看一看parse_str函数 看一看sys_auth函数 看一看get_one函数 全局搜索sys_auth($a_k, ENCODE) 查看哪里调用了 set_cookie 查看safe_replace函数 判断登录绕过 index的业务 加载modules/wap/index.php 加载modules/attachment/attachme…

免费版Photoshop2024智能人像磨皮插件

Portraiture是一款智能磨皮插件,为Photoshop和Lightroom添加一键磨皮美化功能,快速对照片中皮肤、头发、眉毛等部位进行美化,无需手动调整,大大提高P图效率。全新4版本,升级AI算法,并独家支持多人及全身模式…

vue手写提示组件弹窗

1、弹框展示 2、message组件 新建一个message.vue <template><div class"wrapper" v-if"isShow" :class"showContent ? fadein : fadeout">{{ text }}</div> </template> <script></script> <style s…

微信怎么定时发圈?

定时发圈的妙用 在合适的时间点发布新的产品、促销活动&#xff0c;不仅能够及时提醒用户品牌的存在&#xff0c;还可以引发用户的兴趣&#xff0c;增加品牌的曝光率。 选择最佳的发朋友圈时间段&#xff0c;以确保推广内容得到最大的曝光和关注&#xff0c;提高广告投放的效果…

python元组

元组tumple tumple_python1.元组的创建2.元组是不可变序列3.元组的遍历 tumple_python -元组(tuple)是是一个有序、不可变的序列。元组用小括号 () 表示&#xff0c;其中的元素可以是任意类型&#xff0c;并且可以通过索引访问。 不可变序列与可变序列 1>不可变序列&#x…

MySQL中分区与分表的区别

MySQL中分区与分表的区别 一、分区与分表的区别 分区和分表是在处理大规模数据时的两种技术手段&#xff0c;尽管它们的目标都是提升系统的性能和数据管理的效率&#xff0c;但它们的实现方式和应用场景略有不同。 1. 分区 分区是将一个大表分割为多个更小的子表&#xff0c…

【WEB3】区块链开发入门项目之「简易NFT交易市场」

参考文章 教程英文版&#xff1a;https://docs.alchemy.com/docs/how-to-build-an-nft-marketplace-from-scratch 教程中文版&#xff1a;https://zhuanlan.zhihu.com/p/557479922?utm_id0 以太坊测试币领取&#xff1a;https://goerlifaucet.com/ 入门项目地址&#xff1…

【C++杂货铺】优先级队列的使用指南与模拟实现

文章目录 一、priority_queue的介绍二、priority_queue的使用2.1 数组中的第k个最大元素 三、priority_queue模拟实现3.1 仿函数3.2 成员变量3.3 成员函数3.3.1 构造函数3.3.2 AdjustDown3.3.3 push3.3.4 AdjustUp3.3.5 pop3.3.6 empty3.3.7 size 四、结语 一、priority_queue的…

苏州融资融券(两融)开户利率最低能做到多少?5%!

两融利率是指投资者在证券交易所通过融资买入和融券卖出股票时所支付的利息费用。两融包括融资和融券两部分&#xff0c;而融资和融券则是两种常见的金融杠杆运作方式。融资是指投资者通过向券商借入资金来买入股票。在融资中&#xff0c;投资者需要支付给券商一定的利息费用。…

面了一个测试工程师要求月薪26K,总感觉他背了很多面试题...

最近有朋友去华为面试&#xff0c;面试前后进行了20天左右&#xff0c;包含4轮电话面试、1轮笔试、1轮主管视频面试、1轮hr视频面试。 据他所说&#xff0c;80%的人都会栽在第一轮面试&#xff0c;要不是他面试前做足准备&#xff0c;估计都坚持不完后面几轮面试。 其实&…

Linux系统离线安装RabbitMQ

安装rabbitmq 1、下载安装包 首先进入官网进行安装包的下载&#xff0c;在下载时一定要注意erlong版本和rabbitmq-server版本匹配 rabbitmq版本对应关系&#xff1a;传送门 Erlong下载地址:传送门 rabbitmq-server下载地址:传送门 socat 不同版本 centos7:传送门 cent…

【Unity3D】UI Toolkit数据动态绑定

1 前言 本文将实现 cvs 表格数据与 UI Toolkit 元素的动态绑定。 如果读者对 UI Toolkit 不是太了解&#xff0c;可以参考以下内容。 UI Toolkit简介UI Toolkit容器UI Toolkit元素UI Toolkit样式选择器UI Toolkit自定义元素 本文完整资源见→UI Toolkit数据动态绑定。 2 数据…

【办公软件】微信占用C盘空间如何释放

C盘又满了&#xff0c;如果微信QQ用得多的话&#xff0c;很可能微信就占用了很多空间。当然就算安装目录选择到了其他盘&#xff0c;但是软件的缓存也有可能占用C盘。 因为微信或是其他常用软件的缓存路径都会默认保存在C盘&#xff0c;随着传输文件较多&#xff0c;每次都会自…

编码转换流

同理&#xff0c;创建f1和f2方法&#xff0c;分别测试OutputStreamWriter和InputStreamReader 也是主要分三步&#xff0c;即1创建流 2使用流 3关流 OutputStreamWriter f1方法 因为要操作流&#xff0c;所以先创建一个try-catch-finally结构&#xff0c;创建流对象Out…

ARTS 打卡 第一周,初试ARTS

前言 认识三掌柜的想必都知道&#xff0c;我持续创作技术博客已经有6年时间了&#xff0c;固定每个月发布不少于6篇博文。同时&#xff0c;自己作为一名热爱分享的开发者&#xff0c;像ARTS这样的活动自然少不了我。由于我是打算挤在一起分享&#xff0c;之前都是做了本地文档记…

在PHP8中统计数组元素个数-PHP8知识详解

在php8中&#xff0c;统计数组元素的个数&#xff0c;有下面几个函数&#xff1a;使用count()函数统计数组元素个数、使用sizeof()函数统计数组元素个数。还讲到了&#xff0c;使用array_count_values()函数来统计数组中每个元素出现的次数。 1、使用count()函数统计数组元素个…

大数据知识点之大数据5V特征

大数据的特征可以浓缩为五个英文单词&#xff0c;Volume(大量&#xff09;、Variety(多样性&#xff09;、Velocity(速度&#xff09;、Value(价值&#xff09;、Veracity(准确性&#xff09;。因为是5个特征都是以“V”开头的英文单词&#xff0c;又叫大数据5V特征。 概述&…