小程序越來越火,但其中的安全問題不容忽視,今天我們就來嘗試反編譯獲取騰訊視頻小程序的源碼,提醒大家注意代碼的安全和混淆,同時也希望微信能夠加大對小程序開發(fā)者源碼的保護(hù),方法僅供技術(shù)交流,請勿非法使用!
1.首先獲取微信壓縮后的源碼(.wxapkg)
方法有多種,安卓已root手機(jī)可以在/data/data/com.tencent.mm/MicroMsg/cd6fcxxx/appbrand/pkg/xx.wxapkg
這個目錄中找到,或者可以通過charles或fiddler抓包(需要下載舊版微信)直接獲取到下載的.wxapkg
2.解壓wxapkg
Github上已有公開的源碼,這里使用Python3的方式,解壓后的目錄結(jié)構(gòu)
- app-config.json 各個頁面的.json集合,分別放入各個頁面和app.json中即可
- app-service.js 所有.js集合,分別放入對應(yīng)頁面和app.js中(先js格式化一下)
- page-frame.html 所有的.wxml文件,這個需要一些技巧才能還原,下面細(xì)說
- pages/xxx 所有的.wxss
3.還原wxss
在page-frame.html的makeup方法中添加log,即可輸出wxss樣式
function makeup(file, suffix).png
在chrome開發(fā)者工具中打開,將wx-去掉即可
wxss.png
目前輸出的是app.wxss,輸出其它頁面的wxss則將pages/xxx/xxx.html中的setCssToHead替換page-frame.html中的內(nèi)容(替換黃色部分)
setCssToHead.png
4.還原wxml
按照以下操作修改page-frame.html中的方法(圖片名即方法名),建議使用sublime編輯,這里貼出部分截圖,詳細(xì)可以參考這篇博客
function $gwrt( should_pass_type_info ).png](http://upload-images.jianshu.io/upload_images/1560888-b981ad18334546f4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/200)![function $gwrt( should_pass_type_info ).png
function $gwrt( should_pass_type_info ).png
- 都修改好后,就可以在控制臺中輸入
$gwx("./pages/xxx/xxx.wxml")();
來輸出wxml了wxml.png
5.運(yùn)行
將代碼還原后就可以在編譯器中直接運(yùn)行了
運(yùn)行效果1.png
運(yùn)行效果2.png
6.總結(jié)
- 可以看到即便大如騰訊視頻,做了很多組件化,分包的操作,也可以較為輕松的反編得到源碼,更不用說一些沒有做的小程序,得到它們源碼會更為容易。愛掏網(wǎng) - it200.com
- 微信可以改進(jìn)的地方,一是需要對舊版本微信下載wxapkg做處理(剛開始留的坑),二是手機(jī)本地存放wxapkg的地方,wxapkg也需要進(jìn)一步加密,三是page-frame.html需要更多的加密,避免可以輕松得到wxml和wxss
- 開發(fā)者能做的則是將js盡量的混淆,一些重要私密的功能盡量交給服務(wù)器完成,不要寫在小程序中