【技术】【小程序】微信小程序解包工具

接上次小程序的基础知识,分享一个小程序解包工具wxunpacker(base64 解码跳转新链接)。

小程序包结构

上篇文章提到过,小程序的 wxapkg 文件实际上是个二进制文件,没有加密等复杂操作。
其结构可以分为三个部分,header、index 及 data。

  • 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 从中索引

解包

环境与工具

  1. node
  2. 前面提到的微信 unpacker

操作

  1. 区分主包与子包
    子包解包后得到的文件内容与主包差别较大,缺少几个主要文件:app-service.js、app.json、app-config.json 等,是关于整个包的配置。因此如果直接使用解主包的指令解子包,工具将报错(虽然目录下的内容仍然可以获得)。

  2. 解主包
    {main_package.wxapkg} 直接执行下面指令

    1
    node wuWxapkg.js main_package.wxapkg
  3. 解子包
    {sub_package.wxapkg} 执行下面指令,其中 -s 用于指示主包的位置

    1
    node wuWxapkg.js sub_package.wxapkg -s=main_package

解包后就可以得到源代码,解包后的文件结构及不同文件作用见前文