空手套小程序源码

重大漏洞(已修复)

只要获取到小程序的appid和版本号,即可通过构造URL直接下载该小程序的源码wxapkg文件

关于 xxxxx.wxapkg

  1. 小程序的源文件存放在哪?
  2. 源文件怎么获取?
  3. 拿到.wxapkg了,然后怎么用?

然而并没有完全解决

  1. 使用安卓模拟器安装微信,打开对应的小程序

  2. 设置root权限,打开RE管理器
  3. /com.tencent.mm/MicroMsg/x/appbrand/pkg/xx.wxapkg
  4. 压缩并发送至电脑
  5. 使用反编译脚本解包wxapkg

具体步骤

让我们来试一下

举个栗子:

玩转故宫

小程序wxapkg包结构

Hex Fiend分析wxapkg文件

大部分字段是没有被加密的,可以直接看到文件的路径

如何拆解

  1. 相同格式的文件对比,找到文件结构和意义;
  2. 观察特殊形式,英文字符串或者PNG、ZIP格式的固定文件头,定位数据区的位置;
  3. 对特定区域的二进制推理猜测,利用offset和size作为数据段索引;
  4. 开发者工具的代码中的pack.js很容易发现一些对wx格式封装的痕迹;
  5. wxapkg格式就是将wx格式的二进制文件进行了转化:Wxml -> Html、 Wxml -> JS、Wxss -> Css,其二进制格式跟后缀名与wx二进制格式完全一致

解包后--提取页面逻辑

app-service.js

意外彩蛋:未开放的API

  1. openUrl - 在小程序中打开外部网页;
  2. getGroupInfo - 获得群的名称,群内成员的昵称等数据;
  3. getOpenidToken - 获得用户openid;
  4. chooseWeChatContact - 选择微信联系人;
  5. checkIsSupportFacialRecognition - 检查是否支持面部识别
  6. ........

其实并没有想象的那么完美

  • wxml 文件拥有不同于 xml 和 html 文件的字符转义规则;

  • js 文件被压缩后会丢失原始变量,wxss 文件压缩后的注释也会丢失;

  • 一些被引用 wxss 文件本身的源文件丢失,无法恢复原始目录;

  • 有些项目开启了es6转es5选项;

  • wml 中一些无法找到相对应 的正向语句的内容无法还原;

  • json 中components项丢失,仅会标注被其他包引用的自定义组件。

如何防止自己代码被盗

1.使用Uglify等工具打包

2.使用mpvue、wepy等小程序框架

 

 

最主要:还是要靠微信给力

 

前端代码安全

1.精简(minify):ESLint , UglifyJs,YUI compressor ...

2.混淆(obfuscation):编码混淆、标识符混淆、控制逻辑混淆

3.加密(encryption):base64、复杂化表达式、混合加密

4.编译(compile) : 字节码标准webAssembly

5.防止被调试 : 监控是否打开了控制台

6.前后端协作 : 不要在前端放敏感数据

小程序开发tips

  1. 没有重构,要自己写样式 --UI库
  2. 小程序开发框架 mpvue/wepy
  3. 接口鉴权
  4. 小程序登录openid和code校验
  5. 有大量“半开源”代码

 

参考:

GitHub : wxappUnpacker

GitHub :wechat-app-unpack

Made with Slides.com