接上次小程序的基础知识,分享一个小程序解包工具wxunpacker(base64 解码跳转新链接)。
小程序包结构
上篇文章提到过,小程序的 wxapkg 文件实际上是个二进制文件,没有加密等复杂操作。
其结构可以分为三个部分,header、index 及 data。
Header
- 8 位:firstMark,总为 190(0xbe)
- 32 位:未知含义,目前来看总为 0
- 32 位:Index 段长度
- 32 位:Data 段长度
- 8 位:lastMark,总为 237(0xed)
- 32 位:文件数目,fileCount
Index
单个文件的字段如下,一个 wxapkg 中有 fileCount 个这样的字段
- 32 位:文件名长度 nameLength
- 长度为 nameLength 的文件名
- 32 位:offset,文件在数据段中的位置
- 32 位:文件大小
Data
所有的文件数据,上述 index 中的 offset 从中索引
解包
环境与工具
- node
- 前面提到的微信 unpacker
操作
区分主包与子包
子包解包后得到的文件内容与主包差别较大,缺少几个主要文件:app-service.js、app.json、app-config.json 等,是关于整个包的配置。因此如果直接使用解主包的指令解子包,工具将报错(虽然目录下的内容仍然可以获得)。解主包
{main_package.wxapkg} 直接执行下面指令1
node wuWxapkg.js main_package.wxapkg
解子包
{sub_package.wxapkg} 执行下面指令,其中 -s 用于指示主包的位置1
node wuWxapkg.js sub_package.wxapkg -s=main_package
解包后就可以得到源代码,解包后的文件结构及不同文件作用见前文