Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于重新打包wxapkg提示加载小程序代码包失败的研究。 #67

Open
poxiao33 opened this issue Dec 29, 2024 · 0 comments
Open

Comments

@poxiao33
Copy link

image

使用repack重新打包对应有分包的小程序 会提示 加载小程序代码包失败,无法使用,不过对于没有没分包的小程序可以使用。

我研究了下,分包的小程序有数据完整校验,小程序从服务器加载分包的时候会验证完整性,而没有分包的小程序则不会加载分包,所以也就不会验证完整性,所以对于有分包的小程序能重新打包但是不能修改其内容,就连文件 索引区的文件列表顺序和数据区的写入顺序都不可以修改,一旦修改就会提示分包加载失败。
经过研究发现数.wxapkg文件的据格式为:

[文件头 14字节] + [索引区] + [数据区]

  1. 文件头 (14字节)
    起始标记:1字节 (0xBE)
    版本号:4字节
    索引区大小:4字节
    数据区大小:4字节
    结束标记:1字节 (0xED)

2.索引区
文件总数:4字节
每个文件的索引信息:
文件名长度:4字节
文件名:变长字节
文件在数据区的偏移量:4字节
文件大小:4字节

3.数据区
存储所有基础文件的实际内容
按照文件的依赖关系组织

注意数据区,采用了"压缩"技术,这不是传统意义上的压缩算法,而是一种特殊的存储优化技术:文件重用机制,通过识别文件间的包含关系,例如 文件A的内容完整地出现在文件B中,文件C的内容也完整的出现在文件B中,则文件A和文件C可以复用文件B中的内容,通过偏移量和大小来引用已存在的内容,数据区只存储文件B作为基础内容。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants