一、引言
有时候我们很想看看竞争对手的小程序表现如何,但绞尽脑汁也只能猜到部分表现,有些细节怎么也实现不了,很想看看源码,看看大公司的前端高手是如何规避小程序各种奇葩坑的。
于是就想到获取小程序源文件,然后反编译还原成源代码,作为学习的参考。在百度上搜索了各种反编译小程序的教程,但感觉不太适合我这样的初学者,踩了不少坑。这里就把我简化了一下,快速获取微信小程序源码的方法记录下来。
第二,我们简单聊一下。
我们先来思考一个很简单的问题:小程序的源文件存放在哪里?
当然是在微信的服务器上。
但是普通用户想要在微信服务器上获取肯定是很难的,还有其他办法吗?
如果我们简单思考一下我们使用小程序的场景就会明白,当我们点击一个微信小程序的时候,其实微信已经把它从服务器下载到手机上然后运行了。
因此,虽然我们无法从服务器获取,但是我们应该可以在手机本地找到下载的小程序源文件。
那么如何在手机上找到小程序的源文件包呢?
直接给出具体目录位置:
/数据/数据/通信..mm////pkg/
在这个目录下,你会发现一些.文件,它们就是微信小程序的包。
微信小程序的格式为:。
. 是一个具有自身结构的二进制文件。
更多细节请参考大神的博文:微信小程序源码阅读笔记
但是这里有一个坑,如果想进入上面的目录,是不能用手机自带的文件管理器的。安卓还是需要用第三方的文件管理器,比如:RE文件管理器,而且安卓需要获取root权限,而苹果手机必须越狱,越狱难度>>安卓获取root,不管是越狱还是root,这个太难了。当然有能力的同学可以直接从手机上操作,但是这里不建议从真机上获取。
3.准备材料
Node.js运行环境下载地址
若未安装,请先安装
反编译脚本。下载地址
这里是某位高手写的node.js版本,当然还有其他版本,这里我只是以node.js版本为例
模拟器(需要root权限)下载地址百度
我使用获取小程序源文件
RE管理器下载地址是百度
然后将其拖到模拟器上
4.详细步骤
使用模拟器获取。
无需越狱或root,使用电脑上的安卓模拟器是一种非常简单、快速且通用的获取方式,具体步骤如下:
打开安装好的安卓模拟器,在模拟器中安装QQ、微信、RE管理器
QQ、微信可以在模拟器自带的应用商店中搜索、下载并安装。
QQ、微信可以在模拟器自带的应用商店中搜索、下载并安装。
RE管理器下载地址百度
下载完成后,只要将其拖入打开的模拟器窗口即可自动安装。
设置模拟器
以我个人觉得比较好用的夜神模拟器为例
首先,在模拟器内部设置超级用户权限

这些操作的目的是为了让RE管理器能够成功获得ROOT权限
接下来在模拟器中打开微信,然后在微信中运行想要获取的程序(这个其实是让微信从服务器下载小程序的源文件包到本地电脑上)
就拿我刚才提到的淘宝小程序来说吧。
在模拟器微信中运行完后,切换回模拟器桌面,运行RE浏览器到目录
/数据/数据/通信..mm////pkg/
已到达目标文件夹
你会看到里面有一些以 . 为后缀的文件,就是你刚才从服务器下载的文件,你可以根据使用时间来判断。
一般小程序文件体积都不会太大,你可以通过时间来判断,长按压缩选中的文件,然后把压缩包通过QQ发送到我的电脑里。
如果不压缩的话,这个文件就无法通过QQ发送。
所以QQ的这个功能可以让我们很方便的获取源文件而不用去电脑目录下寻找模拟器的文件目录。
解压即可,简单几步就可以成功获取小程序源文件了。
5.使用反编译脚本解包
此时您应该已经下载了反编译的脚本或将其移动到本地目录。
打开命令窗口,按住 + 右键单击
cd 到你下载的反编译脚本的目录
在节点命令窗口中安装以下依赖项:
npm
npm css 树
npm
npm v2 复制代码
npm-es
安装依赖项后,最后一步是反编译.文件
在当前目录下输入node.js[-d] //为要反编译的文件名,比如我有一个需要反编译的文件,已经解压到C盘根目录了,所以输入命令node..js C:\。
输入运行
反编译脚本可以一步将.文件还原为微信开发者工具可以运行的源文件,目录地址和你反编译的文件地址一致。然后在微信开发者工具中添加新项目即可打开。
运行成功,源代码获取完成
六、结论
至此,我们很简单的就得到了想要的一个源文件,并且对其进行了反编译和还原。如果要反编译其他的,也非常快,两步就可以完成。
使用模拟器找到.file
使用反编译脚本来反编译。
使用这种方法,大部分小程序都能正常反编译,但也存在一些特殊情况,具体可以参考大师的文档
.apk 这样的文件想要反编译难度很大,但是小程序的源代码却可以如此轻松随意的获取。根本原因是小程序的开发团队没有对小程序的可执行文件进行有效的保护,也就是加密。因此,我们可以利用别人写的脚本直接进行反编译,过程和解压类似。
其实小程序只是将图片、js、json文件一起压缩了而已,压缩过程为Wxml -> Html、Wxml -> JS、Wxss -> Css。转换后的文件二进制格式和后缀为wx的二进制格式是完全一样的。
这么容易就能拿到源码,不得不说小程序的源码安全存在着很大的风险,很多开发者应该也知道这一点,因此发现有些小程序会把重要的js逻辑代码放在一个js文件中,这样一来,即便拿到了源码,也不容易读懂,但还是难免被偷窥。小程序作为微信生态中的新生力量,不仅被官方寄予厚望,也受到很多开发者和内容创业者的青睐。考虑到代码的安全性,这个漏洞迟早会被修复(封堵)。
因此,这里介绍的小程序源码获取方法应该不会持续太长时间。