如何反编译小程序获得腾讯视频源码-谈小程序安全
2018-02-04 本文已影响1847人
杨越Yul
小程序越来越火,但其中的安全问题不容忽视,今天我们就来尝试反编译获取腾讯视频小程序的源码,提醒大家注意代码的安全和混淆,同时也希望微信能够加大对小程序开发者源码的保护,方法仅供技术交流,请勿非法使用!
1.首先获取微信压缩后的源码(.wxapkg)
方法有多种,安卓已root手机可以在/data/data/com.tencent.mm/MicroMsg/cd6fcxxx/appbrand/pkg/xx.wxapkg
这个目录中找到,或者可以通过charles或fiddler抓包(需要下载旧版微信)直接获取到下载的.wxapkg
2.解压wxapkg
Github上已有公开的源码,这里使用Python3的方式,解压后的目录结构
- app-config.json 各个页面的.json集合,分别放入各个页面和app.json中即可
- app-service.js 所有.js集合,分别放入对应页面和app.js中(先js格式化一下)
- page-frame.html 所有的.wxml文件,这个需要一些技巧才能还原,下面细说
- pages/xxx 所有的.wxss
3.还原wxss
- 在page-frame.html的makeup方法中添加log,即可输出wxss样式 function makeup(file, suffix).png
- 在chrome开发者工具中打开,将wx-去掉即可 wxss.png
- 目前输出的是app.wxss,输出其它页面的wxss则将pages/xxx/xxx.html中的setCssToHead替换page-frame.html中的内容(替换黄色部分) setCssToHead.png
4.还原wxml
按照以下操作修改page-frame.html中的方法(图片名即方法名),建议使用sublime编辑,这里贴出部分截图,详细可以参考这篇博客
function $gwrt( should_pass_type_info ).png function $gwrt( should_pass_type_info ).png function $gwrt( should_pass_type_info ).png function $gwrt( should_pass_type_info ).png function $gwrt( should_pass_type_info ).png- 都修改好后,就可以在控制台中输入
$gwx("./pages/xxx/xxx.wxml")();
来输出wxml了 wxml.png
5.运行
- 将代码还原后就可以在编译器中直接运行了 运行效果1.png 运行效果2.png
6.总结
- 可以看到即便大如腾讯视频,做了很多组件化,分包的操作,也可以较为轻松的反编得到源码,更不用说一些没有做的小程序,得到它们源码会更为容易。
- 微信可以改进的地方,一是需要对旧版本微信下载wxapkg做处理(刚开始留的坑),二是手机本地存放wxapkg的地方,wxapkg也需要进一步加密,三是page-frame.html需要更多的加密,避免可以轻松得到wxml和wxss
- 开发者能做的则是将js尽量的混淆,一些重要私密的功能尽量交给服务器完成,不要写在小程序中