本文就微信小程序如何进行反编译,查看源码,使用工具和过程进行分析

使用工具

一.找到小程序wxapkg包

Windows下微信小程序wxapkg包存放目录

# 微信 -> 设置 -> 文件管理 -> 可以看到文件保存的位置,点击打开文件夹 -> 小程序相关包存放在 默认保存位置中的 Applet 目录
# 如果文件管理的位置是: D:\Users\username\Documents\WeChat Files\WeChat Files
# 存放小程序 wxapkg 包的 Applet 目录
D:\Users\username\Documents\WeChat Files\WeChat Files\Applet

1.先删除所有 wx + 数字 这类的目录(wx75d1********5933),方便等下找到最新运行的小程序文件。

因为不是按照小程序名称存储的,不知道哪个小程序对应哪个目录中的包

Applet 目录中的小程序包目录名称示例

wx75d1********5933
wx7cdb********dc9c
wx8303********0900
wx8bcf********2e03
wx91d2********ff74
wx9a71********11cb
wxa4b8********1cfc
wxa581********4686

查看删除后,每次小程序打开的文件名称是否唯一

第一次打开 *** 小程序
wxbd30********46e2

删除后再次打开小程序,还是这个名字,具体命名规则未知
wxbd30********46e2

2.进入微信,打开要获取 wxapkg 包的小程序

3.返回刚才存在小程序 wxapkg 文件的 Applet 目录

可以看到有个新生成的目录 wxbd30********46e2,这个就是存储对应小程序 wxapkg 文件的目录

目录结构示例

$ tree wxbd30********46e2/
wxbd30********46e2/
└── 199
    ├── __APP__.wxapkg
    ├── _book-offline_.wxapkg
    ├── _sub-pkg-card_.wxapkg
    ├── _sub-pkg-common_.wxapkg
    ├── _sub-pkg-consult_.wxapkg
    ├── _sub-pkg-global-sdk_.wxapkg
    ├── _sub-pkg-online-reg_.wxapkg
    ├── _sub-pkg-settings_.wxapkg
    └── _sub-pkg-todo_.wxapkg

而我们需要的是其中的 __APP__.wxapkg 文件

二.使用UnpackMiniApp对小程序包解密

使用 UnpackMiniApp.exe 解密小程序包 __APP__.wxapkg

注意: UnpackMiniApp.exe 同层目录需要存在 wxpack 目录,用于存放解密后的包

运行 UnpackMiniApp.exe,选中刚才获取的 __APP__.wxapkg 文件,进行解密

会在 wxpack 目录 生成 wxbd30********46e2.wxapkg 文件

三.使用wxappUnpacker对解密后的小程序包进行反编译

wxappUnpacker 需要node环境,正式反编译之前,确保安装了node。node.js 的安装这里就不进行赘述了。

1.安装node.js

已安装node

> node -v
v18.16.0

2.安装 wxappUnpacker 所需依赖

# 提速可以使用国内源
# npm config set registry https://registry.npmmirror.com/
npm install esprima
npm install css-tree
npm install cssbeautify
npm install vm2
npm install uglify-es
npm install js-beautify

3.安装依赖后,进行反编译

报错

PS D:\src\微信小程序解密\wxappUnpacker> node .\wuWxapkg.js D:\src\微信小程序解密\wxpack\wxbd30********46e2.wxapkg
Unpack file D:\src\微信小程序解密\wxpack\wxbd30********46e2.wxapkg...

Header info:
  firstMark: 0xbe
  unknownInfo:  0
  infoListLength:  3824
  dataLength:  2537561
  lastMark: 0xed

File list info:
  fileCount:  80
Saving files...
Unpack done.
Split app-service.js and make up configs & wxss & wxml & wxs...
deal config ok
deal js ok
deal wxss.js ok
deal css ok
D:\src\微信小程序解密\wxappUnpacker\wuConfig.js:49
                for (let page of subPackage.pages) {
                                            ^

TypeError: subPackage.pages is not iterable
    at D:\src\微信小程序解密\wxappUnpacker\wuConfig.js:49:45
    at D:\src\微信小程序解密\wxappUnpacker\wuLib.js:103:14
    at agent (D:\src\微信小程序解密\wxappUnpacker\wuLib.js:66:23)
    at FSReqCallback.readFileAfterClose [as oncomplete] (node:internal/fs/read_file_context:68:3)

Node.js v18.16.0

解决方法:

https://github.com/system-cpu/wxappUnpacker/issues/7

在for前面加个判断 if (subPackage.pages)

亲测有效,非常感谢!

https://www.cnblogs.com/Wei-notes/p/17932722.html

TypeError: subPackage.pages is not iterable 异常
  这个异常其实就是简单的subPackage参数为空导致出现的异常,打开报错的文件找到对应的报错位置,外层加个判断就ok了,如下例:

  

复制代码
    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);
         }
     }
     }    

处理实践

修改wxappUnpacker\wuConfig.js文件

                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);
                    }
                }

# 调整为
                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);
                        }
                    }
                }

成功

PS D:\src\微信小程序解密\wxappUnpacker> node .\wuWxapkg.js D:\src\微信小程序解密\wxpack\wxbd30********46e2.wxapkg
Unpack file D:\src\微信小程序解密\wxpack\wxbd30********46e2.wxapkg...

Header info:
  firstMark: 0xbe
  unknownInfo:  0
  infoListLength:  3824
  dataLength:  2537561
  lastMark: 0xed

File list info:
  fileCount:  80
Saving files...
Unpack done.
Split app-service.js and make up configs & wxss & wxml & wxs...
deal config ok
deal js ok
deal wxss.js ok
deal css ok
=======================================================
这个小程序采用了分包
子包个数为:  54
=======================================================
Decompile ./base.wxml...
Decompile success!
Decompile ./comp.wxml...
Decompile success!
Decompile ./pages/home/index.wxml...
Decompile success!
Decompile ./pages/index/index.wxml...
Decompile success!
Decompile ./pages/me/index.wxml...
Decompile success!
Decompile ./pages/news-list/index.wxml...
Decompile success!
splitJs: D:\src\微信小程序解密\wxpack\wxbd30********46e2\app-service.js
D:\src\微信小程序解密\wxpack\wxbd30********46e2 common.js
D:\src\微信小程序解密\wxpack\wxbd30********46e2 runtime.js
D:\src\微信小程序解密\wxpack\wxbd30********46e2 taro.js
D:\src\微信小程序解密\wxpack\wxbd30********46e2 vendors.js
D:\src\微信小程序解密\wxpack\wxbd30********46e2 app.js
D:\src\微信小程序解密\wxpack\wxbd30********46e2 comp.js
D:\src\微信小程序解密\wxpack\wxbd30********46e2 pages/index/index.js
D:\src\微信小程序解密\wxpack\wxbd30********46e2 pages/home/index.js
D:\src\微信小程序解密\wxpack\wxbd30********46e2 pages/news-list/index.js
D:\src\微信小程序解密\wxpack\wxbd30********46e2 pages/me/index.js
Splitting "D:\src\微信小程序解密\wxpack\wxbd30********46e2\app-service.js" done.
Guess wxss(first turn)...
Import count info: {}
Guess wxss(first turn) done.
Generate wxss(second turn)...
Generate wxss(second turn) done.
Save wxss...
saveDir: D:\src\微信小程序解密\wxpack\wxbd30********46e2
Split and make up done.
Delete files...
Deleted.

File done.
Total use: 3.962s

反编译后的文件位于 wxpack 目录中的 wxbd30********46e2

四.通过微信开发者工具打开

微信开发者工具下载页面,进入下载页面下载安装即可

接下来使用微信开发者工具打开反编译后的文件夹D:\src\微信小程序解密\wxpack\wxbd30********46e2即可

打开微信开发者工具,需要登录,可以先用游客模式进入,点击导入,选择位于 wxpack 目录中的 wxbd30********46e2,开发模式 小程序

五.总结

这样关于微信小程序的反编译就结束了,可以通过微信开发者工具查看相关代码

标签: none

添加新评论