微信小程序反编译wxapkg移动应用

微信小程序反编译介绍

文章转载于https://misakikata.github.io/2021/03/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F%E8%A7%A3%E5%8C%85/

转载
2024-12-28
阅读时间: 9分钟

前言

微信小程序在实际运行中并不会直接下发源码, 而是以 .wxapkg 的形式分发到客户端。 当需要进行代码分析、安全研究或技术学习时, 就不可避免地会涉及到小程序的反编译与解包过程。

本文记录一次完整的微信小程序反编译流程, 包括小程序包的获取、Windows 版加密机制说明、 wxapkg 解密与解包,以及解包后代码结构的分析。

本文仅用于技术研究与安全学习,请勿用于任何非法用途。

小程序包的位置说明

这里以 Windows 版微信 为例进行说明, Windows 与移动端的小程序包结构略有差异。

Windows 版微信小程序包的默认存储位置为:

C:\Users\user\Documents\WeChat Files\Applet
  

该目录下可以看到多个以 wx 开头的文件夹, 每一个文件夹对应一个小程序 ID。 如果不清楚目标小程序的 ID, 可以清空目录后重新打开小程序, 再按时间排序即可定位。

(移动端路径一般为: /data/data/com.tencent.mm/MicroMsg/{id}/appbrand/pkg, 本文不做演示。)

Windows 版 wxapkg 的加密说明

Windows 版微信在原始 wxapkg 外, 额外增加了一层加密, 文件名通常为 __APP__.wxapkg

该文件的文件头包含 V1MMWX 标识, 表示这是经过 Windows 客户端二次加密的包, 需要先解密才能继续分析。

wxapkg 解密流程概述

Windows 版小程序包的解密流程大致如下:

  • 使用 pbkdf2 生成 AES Key
  • pass 为小程序 AppID 字符串
  • salt 固定为 saltiest,迭代 1000 次
  • 生成 32 字节 AES Key
  • 对原始包前 1024 字节进行 AES 加密
  • 后续数据使用 AppID 倒数第二位进行 XOR
  • 最终写入文件并添加 V1MMWX 文件头

解密完成后, 即可得到一个以小程序 AppID 命名的原始 wxapkg 文件。

wxapkg 解密工具

可以使用以下开源工具完成 Windows 版 wxapkg 解密:

项目中已提供编译好的可执行文件, 直接使用即可完成解密。

小程序解包

wxapkg 并不是常规压缩格式, 需要使用专门的解包工具解析其二进制结构。

常见的解包方式包括:

解包完成后, 会生成一个以小程序 ID 命名的目录, 即小程序的“源码结构包”。

解包后的小程序结构说明

解包后的目录通常包含以下核心文件:

  • app-service.js:所有 JS 逻辑的汇总文件
  • app-config.json:汇总后的 app.json 与页面配置
  • page-frame.html:所有页面的 WXML 与 WXSS 汇总
  • static:图片、音频等静态资源

需要注意的是, 此时的代码仍然是高度压缩和混合的, 与开发阶段的源码结构存在明显差异, 需要进一步分析与拆解。

解包源码的实际风险点

在分析过程中, 经常可以发现一些不安全的实现方式, 例如:

  • 将 AppID 和 Secret 写在小程序代码中
  • 云函数权限配置不当
  • 接口鉴权逻辑完全放在前端

如果 AppID 和 Secret 可用, 攻击者可以通过官方接口获取 access_token, 进而调用小程序后台接口。

技术与合规说明

微信小程序反编译涉及较多技术细节, 同时也存在明确的法律与合规边界。

本文仅用于技术研究、安全学习和架构理解, 不鼓励、不支持任何形式的非法使用。

转载说明

本文内容整理自公开技术资料与个人学习记录, 部分内容参考并整理自网络文章, 仅用于技术交流与学习。

如涉及版权问题, 请联系作者处理。

相关文章推荐