前言
最近有一個任務,就是讓我試下反編譯微信小程序,搞起。事先說明,寫這篇博客,只是為了記錄過程,不建議大家都去反編譯,畢竟都是別人的勞動成果。然后反編譯的這個事例,也打了碼。如果貴公司的人發現了,希望及早更新處理下,以免接口的泄露。
準備工具
1、node.js環境,https://nodejs.org/en/
2、反編譯腳本,https://github.com/qwerty472123/wxappUnpacker
3、夜神模擬器,https://www.yeshen.com/ 主要是用來登錄微信,運行小程序,然后再拿到小程序的安裝包 wxapkg
1、獲取小程序的安裝包
1、我試了小米手機是拿不了小程序的安裝包的,即使是root了也不行,目錄是空的。所以,用夜神模擬器吧。打開夜神模擬器,里面有個應用中心,直接搜索微信下載安裝吧。安裝好微信后,登錄微信,打開你想要反編譯的小程序。ok,打開后,回到桌面,打開桌面的“ES文件瀏覽器”:
然后找到這個路徑:/data/data/com.tencent.mm/MicroMsg/1bd6b8205e3a41715b8e2cca72bc50f0/appbrand/pkg/
里面有你運行過的小程序安裝包,把它復制到主目錄,然后再通過微信發到你的電腦吧,然后就拿到了小程序的安裝包。
2、下載反編譯腳本到本地,并安裝相關配置
打開命令窗口,cd到上面這個目錄,然后輸入以下:
npm install esprima
npm install css-tree
npm install cssbeautify
npm install vm2
npm install uglify-es
npm install js-beautify
npm install escodegen
完了后,就到最后一步,輸入:node wuWxapkg.js +空格+安裝包目錄,如下圖
然后就會自動反編譯,在安裝包目錄生成一個文件夾:
3、打開項目編譯
打開微信開發工具,自己在后臺創建一個小程序,拿到appid,并填進去。
點擊確定后,就能進去頁面了,這個時候,會提示以下錯誤:
這個是因為小程序的請求域名,都需要在后臺配置的。所以,你需要把這個域名,在你創建的那個小程序開發設置那里,填上。填上后,重新啟動開發者工具,這時,應該就正常了。如下圖:
然后,我們可以看到里面的代碼,都非常的清晰。
連接口都能看出來,這樣別人就能直接調用這個接口了。
總結
局限(包括但可能不限于以下內容)
1、實現中很多功能基于特定的版本(wcc-v0.6vv_20180111_fbi, 且不考慮面向低版本適配)和字符串搜索,所以不能很好的適應各種特殊情況。
2、wxml 文件擁有不同于 xml 和 html 文件的字符轉義規則,且尚未公開(并非"沒有"),因此未能很好的還原相關內容。
3、js 文件被壓縮后會丟失原始變量名等信息內容無法還原;wxss 文件壓縮后的注釋也會丟失。
4、wxs 文件會將所有的變量如 Math 改為 nv_Math ,這里僅通過字符串替換去除。
5、一些被引用 wxss 文件本身的源文件丟失,因此無法恢復原始目錄。
6、有些項目開啟了難以復原的es6轉es5選項,檢驗本項目結果是否正確時需要關閉項目中的es6轉es5選項。
7、wxml 中一些無法找到相對應 的正向語句的內容無法還原。
8、json 中components項丟失,僅會標注被其他包引用的自定義組件。
最后說兩句
大家可以利用這個工具,試試自己的小程序,是否能被反編譯出來,然后采取一些混淆措施等等。
盡量別動壞心機,造成商業犯罪就不好了。