空手套小程序源码
重大漏洞(已修复)
只要获取到小程序的appid和版本号,即可通过构造URL直接下载该小程序的源码wxapkg文件
关于 xxxxx.wxapkg
- 小程序的源文件存放在哪?
- 源文件怎么获取?
- 拿到.wxapkg了,然后怎么用?
然而并没有完全解决
-
使用安卓模拟器安装微信,打开对应的小程序
- 设置root权限,打开RE管理器
- /com.tencent.mm/MicroMsg/x/appbrand/pkg/xx.wxapkg
- 压缩并发送至电脑
- 使用反编译脚本解包wxapkg
具体步骤
让我们来试一下
举个栗子:
玩转故宫
小程序wxapkg包结构
Hex Fiend分析wxapkg文件
大部分字段是没有被加密的,可以直接看到文件的路径
如何拆解
- 相同格式的文件对比,找到文件结构和意义;
- 观察特殊形式,英文字符串或者PNG、ZIP格式的固定文件头,定位数据区的位置;
- 对特定区域的二进制推理猜测,利用offset和size作为数据段索引;
- 开发者工具的代码中的pack.js很容易发现一些对wx格式封装的痕迹;
- wxapkg格式就是将wx格式的二进制文件进行了转化:Wxml -> Html、 Wxml -> JS、Wxss -> Css,其二进制格式跟后缀名与wx二进制格式完全一致
解包后--提取页面逻辑
app-service.js
意外彩蛋:未开放的API
- openUrl - 在小程序中打开外部网页;
- getGroupInfo - 获得群的名称,群内成员的昵称等数据;
- getOpenidToken - 获得用户openid;
- chooseWeChatContact - 选择微信联系人;
- checkIsSupportFacialRecognition - 检查是否支持面部识别
- ........
其实并没有想象的那么完美
-
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
- 没有重构,要自己写样式 --UI库
- 小程序开发框架 mpvue/wepy
- 接口鉴权
- 小程序登录openid和code校验
- 有大量“半开源”代码
参考:
GitHub : wxappUnpacker
GitHub :wechat-app-unpack
wxapp
By christyma
wxapp
- 2,518