剛剛get到一個新技能,趁着熱乎趕忙整理出來分享給你們。本教程適用於任何小程序的反編譯,但大多數項目都作了代碼的壓縮混淆,尤爲是使用第三方框架的。並且小程序開發工具也會作一層編譯,因此破解獲得的項目實際是最終編譯過的,但這並不影響代碼的可讀性,畢竟主要邏輯仍是在。並且若是是純原生開發的小程序通過破解獲得的破解包不論是項目結構仍是可讀性與原項目基本沒差。html
以新浪微博小程序爲例進行實戰操做
1、下載網易mumu模擬器,安裝微信與re文件瀏覽器;
下載地址:網易mumu官網 前端
2、登陸微信在小程序頁搜索小程序名稱,找到並打開小程序,模擬器打開小程序有可能閃退,但沒關係,由於小程序包已經開始後臺下載了;
3、回到模擬器桌面打開RE文件管理器,提示請求超級用戶訪問權限,點擊永久記住選擇,容許其獲取root權限。(注意:必定要容許root權限!)
4、按此路徑進入目錄:/data/data/com.tencent.mm/MicroMsg
- MicroMsg會保存你的用戶相關信息,每登陸一個微信號就會產生一個哈希值做爲用戶標識進行對應, 看時間找到最新的一個用戶點進去;
- 找到appbrand目錄,裏面包含2個文件夾,一個是pkg(執行文件),一個是jscache(緩存文件)
流程圖: es6
5、.wxapkg 解包
兜兜轉轉繞了一圈咱們終於拿到小程序的 .wxapkg 包,接下來就是如何將它反編譯成爲一個完整的項目了,首先 .wxapkg 文件究竟是什麼呢?你可能會認爲它就是相似 Android 的 .apk 或者 iOS 的 .ipa 安裝包,本質上是一個 .zip 壓縮包?其實不是的,它是一個二進制文件,實際的文件結構以下圖(圖片取自文章 微信小程序源碼閱讀筆記):github
如何編譯:npm
- 打開終端,用git下載代碼
git clone https://github.com/qwerty472123/wxappUnpacker.git
- 切換到wxappUnpacker目錄使用cnpm i安裝依賴,安裝以前須要安裝Node環境(自行安裝);
- 解壓獲得的tar文件,獲得wxapkg的路徑,在wxappUnpacker目錄下執行
node node wuWxapkg.js + wxapkg文件路徑
便可。
- 看到如下輸出說明反編譯成功,這時候你就會獲得一個項目文件了。
5.使用編輯器打開文件夾開心的看大神們怎麼實現各類功能的吧,總會對你有所啓發,微博的這個小程序源碼可讀性特別高,除了樣式文件,感受已經全了,有圖有真相。
目錄結構: json
代碼片斷:
侷限(包括但可能不限於如下內容)
- 實現中不少功能基於特定的版本(wcc-v0.6vv_20180111_fbi, 且不考慮面向低版本適配)和字符串搜索,因此不能很好的適應各類特殊狀況。 wxml 文件擁有不一樣於 xml 和 html
- 文件的字符轉義規則,且還沒有公開(並不是"沒有"),所以未能很好的還原相關內容。
- js 文件被壓縮後會丟失原始變量名等信息內容沒法還原;wxss 文件壓縮後的註釋也會丟失。
- wxs 文件會將全部的變量如 Math 改成 nv_Math ,這裏僅經過字符串替換去除。
- 一些被引用 wxss 文件自己的源文件丟失,所以沒法恢復原始目錄。
- 有些項目開啓了難以復原的es6轉es5選項,檢驗本項目結果是否正確時須要關閉項目中的es6轉es5選項。
- wxml 中一些沒法找到相對應 的正向語句的內容沒法還原。
- json 中components項丟失,僅會標註被其餘包引用的自定義組件。
最後歡迎你們關注公衆號前端小苑,我會按期在這裏發表原創文章。 小程序