Redian新闻
>
微信小程序反编译

微信小程序反编译

科技

0x01前言

微信小程序反编译可以通过对小程序包进行反编来获取小程序源码,在一次信息收集的过程中对某公司的APP、微信公众号、小程序进行抓包数据分析寻找接口等有用的信息时,在抓包过程中由于微信的反抓包机制实际测试过程中遇到一些问题,导致通过直接抓包的方式抓取小程序数据失败。后通过一些方式了解到小程序反编,于是想到是否可以采取这种方式反编小程序后进行源码审计。这篇文章主要介绍了微信小程序反编的方法在这里与大家进行分享一同学习。

0x02环境工具准备

  • node.js运行环境

  • 小程序解密脚本

  • 反编脚本

  • 微信小程序开发者工具

以上工具打包分享

获取链接:https://pan.baidu.com/s/1dmzs8jARjAmoNHWlUm78ew?pwd=3ksb 提取码:3ksb

下载工具包后进行解压首先安装node.js环境,安装完成后通过cmd运行node -vnpm -v查看版本是否安装成功。


0x03小程序包解密

PC端和手机端小程序在运行时会将程序包缓存到本地,但是程序包经过了加密,我们不能够直接进行反编解包,这里我们需要首先对小程序包进行解密后才能够对其进行反编。

小程序包的解密首先需要找到小程序包缓存到本地的位置,这里以PC端为例不演示手机端。打开微信设置-文件管理,打开下图中的路径找到下图路径中WeChat Files文件夹。默认微信缓存文件在系统C盘用户文档目录下,我这里微信缓存位置做了修改。



路径下Applet目录就是微信小程序缓存的位置



打开目录我们可以看到有很多以wx开头+16位16进制数命名的文件夹,每个文件夹下就是一个微信小程序的缓存。



随便打开一个目录目录下名为__APP__.wxapkg包就是微信小程序的主包。



有些小程序可能会有下面这种情况除了__APP__.wxapkg包外还有一个或多个其他.wxapkg后缀的文件,其他的文件就是也是小程序的包,可以看做是子包,对于功能比较复杂的小程序可能会有多个包。



Applet下这么多的小程序缓存我们如何快速定位到自己要进行反编的小程序,这里总结了两个方法:

第一总方法是根据首次打开小程序的时间,我们第一次打开某个小程序的时候这时小程序会缓存到本地,可根据文件的修改时间大致判断。



第二种方法更为简单,我们直接将Applet文件夹下的所有小程序缓存包删除掉,再访问一次将要准备反编的小程序,这时Applet下就只有这一个小程序的缓存包了,简单粗暴哈哈哈。


我们找到了小程序的包下一步就是对包进行解密,解密前我们先来了解一下加密。

为了保护源码微信使用加密的方式把wxapkg包源码进行加密,加密后的文件的起始为V1MMWX。



加密方法如下

  •    首先pbkdf2生成AES的key。利用微信小程序id字符串为pass,salt为saltiest 迭代次数为1000。调用pbkdf2生成一个32位的key

  •    取原始的wxapkg的包得前1023个字节通过AES通过1生成的key和iv(the iv: 16 bytes),进行加密

  •    接着利用微信小程序id字符串的倒数第2个字符为xor key,依次异或1023字节后的所有数据,如果微信小程序id小于2位,则xorkey 为 0x66

  •    把AES加密后的数据(1024字节)和xor后的数据一起写入文件,并在文件头部添加V1MMWX标识

了解了加密后或许你这时候一定有了什么想法,没错你想的肯定是手撕代码写一个解密脚本,对于微信包解密的脚本网上有很多相关的分享这里我不在摘抄了,有兴趣的小伙伴们可以自行去百度。这里我们使用 @daimaguo  师傅使用C#开发的PC微信小程序包解密工具。

下面我们就使用小程序包解密工具对包进行解密,解压小程序包解密工具如下图运行UnpackMiniApp.exe





解密成功后输出到wxpack文件夹下,文件格式不变。

0x04小程序包反编译

经过解密后的的包格式依然是.wxapkg,下一步我们需要对包进行反编译就可以获取小程序的源代码。

我们使用中的wxappUnpacker脚本对其进行反编译。步骤如下:
解压wxappunpacker 进入这个目录后在目录下运行cmd 执行命令

node wuWxapkg.js J:\Desktop\wx\decode\wx8f446acf8c4a85f5.wxapkg## “J:\Desktop\decode\wx8f446acf8c4a85f5.wxapkg”为解密后的小程序包路径位置




运行上述命令反编译完成后在包路径下生成一个同名文件夹存储源代码


如果我们需要反编的小程序中有多个包,也就是有主包和子包的情况时,主包和子包的反编过程与前面的步骤相同,先进行解密。反编的时候先对主包进行反编,再对子包进行反编,子包反编与主包略有不同。使用命令如下:

## 1.主包反编node wuWxapkg.js xxx     ## xxx为主包的路径
## 2.子包反编node wuWxapkg.js xxx1 -s= xxx2 ## xxx1为子包的文件路径,xxx2为反编主包生成的文件路径

反编译如果使用过程中出现报错缺少相关组件,在根目录下使用cmd运行以下命令进行安装,通过我分享的工具包中是已经更新安装完的在node_modules文件下,默认不需要再重新安装,如执行存在相关组件问题可尝试重装解决。

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




0x05源码查看

完成解密和反编后我们已经获取到了小程序包的源码,最后我们可以使用微信小程序开发工具进行编辑开发或查看审阅源码。

在我分享的工具包中提供了win64版本的微信小程序开发工具安装包,如需不同版本的安装包也可自行到微信开发者官方网页进行下载https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html

安装完成后我们运行工具使用游客模式登录



选择导入,进行导入小程序源码



选择要导入的小程序源码路径




导入后就可以进行审阅编辑操作了。



我在前面有提到手机端的微信小程序,实际上手机端和PC端的小程序包都是相同格式的只要我们找到手机小程序包缓存位置将包导出到电脑中也可进行反编,在PC端进行反编相对于从手机提取小程序包要方便一些。有兴趣的小伙伴可进行尝试。


参考连接:

https://www.52pojie.cn/thread-1336730-1-1.html

https://blog.csdn.net/qq_41510985/article/details/117924751

E

N

D



Tide安全团队正式成立于2019年1月,是新潮信息旗下以互联网攻防技术研究为目标的安全团队,团队致力于分享高质量原创文章、开源安全工具、交流安全技术,研究方向覆盖网络攻防、系统安全、Web安全、移动终端、安全开发、物联网/工控安全/AI安全等多个领域。

团队作为“省级等保关键技术实验室”先后与哈工大、齐鲁银行、聊城大学、交通学院等多个高校名企建立联合技术实验室。团队公众号自创建以来,共发布原创文章400余篇,自研平台达到31个,目有18个平台已开源。此外积极参加各类线上、线下CTF比赛并取得了优异的成绩。如有对安全行业感兴趣的小伙伴可以踊跃加入或关注我们

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
如何从源码编译 GNOME Shell 和应用 | Linux 中国最适合程序员的 10 款 Linux 发行版 | Linux 中国将作家变为程序员:如何做更快速、更可持续的剧情研发?摄影欣赏:江城子:大气运行天地睦经济不好,有人建议对程序员征收重税,100万收80万的税,分配给穷人!为了让我妈看懂地图,我在乡镇写了个认路小程序使用开源天文应用程序 KStars 探索夜空 | Linux 中国英拉流亡5年,他信小女儿登上泰国政坛:泰国华裔巨商家族背后,百年荣耀与流亡之路......GNOME 新终端程序尝鲜 | Linux 中国重磅!美启动对华关税加征复审程序,什么信号?恒生科技又遭重挫,A股6000亿激战,市场是否见底?维夕独家 | 背词+刷题的神器小程序,快来抢先体验!微信更新正式版!「清理缓存」功能变强,小程序终于能分享到朋友圈博士论文太水,从题目到程序,浑水摸鱼编译代码时动态地链接库 | Linux 中国老公3月12日去看急诊 留下看病记录备查微信朋友圈支持转发啦?看完我只想说,微信求求你别更新了美国“凡尔赛女王”:程序员变顶级贵妇,装修18年山寨皇宫差点变成烂尾房…端智能实践分享:模型评估和编译收购推特第一步:将Twitter打造成“海外版”微信?马斯克疯狂夸赞微信功能强大!微信小程序,可能是生活服务行业增长问题的新答案GNU C 编译器的程序员入门指南 | Linux 中国硬核观察 #683 不值得使用 -O3 来编译 Linux 内核2个抖音工程师搞出新工具,意外风靡字节内部,项目经理用上安静多了,程序员不骗程序员马克谈天下(268) 哈萨克斯坦政改启动封控32天,俄罗斯女孩成了“上海团长”:帮居民团水,教外国朋友用小程序团购纽交所启动对触宝退市程序:因市值过低 不符合上市要求第一位程序员是一位女士【招募】陌上小程序体验官第二期招募来啦!这名“业余”程序员,曾用50张1080Ti对抗癌症。大消息!微信小程序可以买基金了?六年团队Leader实战秘诀|程序员最重要的八种软技能为什么芬兰进入申请北约程序 | 今日美政(附音频)惹人爱怜的上海男人Github 有份程序员们做的菜谱,终于没有了该死的“适量”
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。