第一次在掘金這樣高大上的社區寫文章,忐忑地敲下我獲取小程序源碼過程當中的經驗分享。php
最近在學習微信小程序開發,半個月學習下來,很想實戰一下踩踩坑,因而就仿寫了某個小程序的前端實現,過程一言難盡,差很少兩週時間過去了,發現小程序的坑遠比想象的要多的多!!在實際練手中,徹底是黑盒的,純靠推測,部分效果在各類嘗試後能能作出大體的實現,可是有些細節,實在不知道如何去實現。這種時候,真的很想一窺源碼,查看究竟,看看大廠的前端大神們是如何規避了小程序的一些比較奇葩的坑。css
因而就想到獲取到小程序地源文件,而後嘗試對其進行反編譯還原爲源代碼,來做爲學習參考。我百度了各類關於小程序地反編譯教程,可是感受都不太適合像我這樣地初學小白,踩了挺多坑。在這裏把我從新簡化好的,快速地獲取一個微信小程序源碼的方式記錄下來。前端
xxxxx.wxapkg
先來想一想一個很簡單的問題,小程序的源文件存放在哪?node
普通用戶想要直接獲取到在微信服務器去獲取,確定是十分困難的,有沒有別的辦法呢?python
手機本地
找到到已經下載過的小程序文件那麼小程序文件存儲在手機的什麼位置呢?git
/data/data/com.tencent.mm/MicroMsg/{{一串32位的16進制字符串名文件夾}}/appbrand/pkg/
xxxxxxx.wxapkg
類型的文件,這些就是微信小程序的包微信小程序的格式就是:.wxapkg
es6
.wxapkg是一個二進制文件,有其本身的一套結構。github
微信小程序源碼閱讀筆記lrdcq大神的這篇博文有對.wxapkg的詳細介紹,固然你也不能夠不看npm
這裏有個小坑,想要進入到上面這個目錄的話,用手機自帶的文件管理器是不行的,須要使用到第三方的文件管理器,好比:RE文件管理器
,而且安卓須要取得root權限,蘋果手機要求越獄,且iphone的越獄難度>>安卓獲取root,無論越獄仍是root,這都太費勁,固然有能力的同窗能夠直接從手機上來操做,可是在這裏不推薦從真機上獲取。json
qwerty472123
大神寫的node.js版本的,固然也有其它版本的,例如python
版本,這裏我只是簡單地用node.js版本舉例夜神模擬器
,你也能夠自選不用越獄,不用root,使用電腦端的安卓模擬器來獲取是一個很是簡單快捷的獲取方式,具體步驟以下:
QQ
、微信
、RE管理器
QQ
、微信
在模擬器自帶的應用商店裏搜索下載安裝便可RE管理器
的下載地址:pan.baidu.com/s/1PPBx08rN…夜神模擬器
舉例RE管理器
順利的獲取到ROOT權限/data/data/com.tencent.mm/MicroMsg/{{一串32位的16進制字符串文件夾}}/appbrand/pkg/
用cd命令進入到你clone或者下載好的反編譯腳本目錄下
在node命令窗口中依次安裝以下依賴(依次把每條安裝命令複製到命令行回車就能夠):
npm install esprima
npm install css-tree
npm install cssbeautify
npm install vm2
npm install uglify-es
npm install js-beautify
複製代碼
安裝好依賴以後,就是最後一步了,反編譯 .wxapkg 文件
在當前目錄下輸入
node wuWxapkg.js [-d] <files...> //files 就是你想要反編譯的文件名
複製代碼
例如:我有一個須要反編譯的文件 _163200311_32.wxapkg
已經解壓到了D盤根目錄下,那麼就輸出命令
node .\wuWxapkg.js D:\_163200311_32.wxapkg
複製代碼
小技巧:注意這裏斜杆別打反了,你能夠輸入文件名前幾個字符,而後Tab鍵會自動補全文件名
反編譯腳本就能一步將.wxapkg 文件還原爲微信開發者工具可以運行的源文件,目錄地址和你反編譯的文件地址是同樣的
看到這些文件結構,是否是很是熟悉!咱們在微信開發者工具新增項目便可打開
運行成功,源碼獲取完成
若是運行出現了點問題:能夠試試,點擊開發者工具 詳情 去掉 es6轉es5 的勾,勾上不校驗安全域名
勾選了仍是沒法運行?那麼請在詳情裏把基礎版本庫調低至1.8左右,再試試
出現找不到某些文件的狀況怎麼辦?我只能告訴:刪!刪!刪!app.json裏面,提示找不到那個文件,就將pages下注冊的該頁面語句暫時刪除掉。刪到能夠運行爲止
仍是沒法運行?那你能夠在個人博客裏找到個人聯繫方式,申請加我好友,我會嘗試幫你解決,這是免費的,就當交個朋友
至此咱們就經過很是簡單的方式獲取到了一個想要的小程序源文件,並對其進行了反編譯還原 之後想要再反編譯其餘的小程序,很是快速,只須要兩步
使用此方法,絕大部分的小程序都能正常反編譯出來,可是也會有一些特殊的狀況,具體能夠查看
qwerty472123
大神Github的readme.md
文件
早在跳一跳小遊戲火的時候,就有人經過小程序的appid和版本號,構造URL直接從服務器端下載該小程序的源碼wxapkg文件。可是這種方法很快就被封了。
上線的源代碼能如此簡單的被獲取到,不得不說小程序的源碼安全存在一些隱患,不過如今的小程序開發框架會用babel這樣的打包工具把js邏輯代碼揉在一個js文件裏,轉編譯成看不懂的代碼,這樣,即便被獲取了源碼,也很難窺得蛛絲馬跡。
這裏介紹的方法只想提供給像我同樣的小程序新手用來學習和仿寫練手,獲取仿寫素材。
小程序做爲微信生態內的新生力量,不只被官方,也被不少開發者和內容創業者寄予厚望,處於對代碼的安全性的考慮,這裏的獲取方式,不肯定之後是否還行得通。