用戶
 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

掃一掃,登錄網站

小程序社區 首頁 教程 查看內容

最新反編譯任何微信小程序,以及獨立分包、插件的處理方式 ...

Rolan 2020-6-30 00:49

本篇文章將詳細講解如何對線上的微信小程序進行解包反編譯,并處理獨立分包加載、插件等情況下的解決方法,最終獲得他的源碼以用來學習,沒錯,就是學習。:smile:本教程也僅用于學習。 所謂工欲善其事,必先利其器, ...

本篇文章將詳細講解如何對線上的微信小程序進行解包反編譯,并處理獨立分包加載、插件等情況下的解決方法,最終獲得他的源碼以用來學習,沒錯,就是學習。:smile:本教程也僅用于學習。 所謂工欲善其事,必先利其器,我們先來準備一下需要準備的東西:

一臺具有ROOT權限的手機。(可以使用Android模擬器) Node.js環境 反編譯的腳本: github.com/141Mr-liu/w… (我們這里使用了支持分包加載的,當然普通的也能用)

獲取需要反編譯小程序的包

  1. 首先,要想反編譯獲得微信小程序源碼,那我們必須先有這個微信小程序的一個包,那我們應該怎么去獲取這個包呢?我們需要一臺具有ROOT權限的手機,但在9012年了,ROOT的手機應該很少了吧,那么我們可以通過Android模擬器來實現這一步。這里我推薦夜神模擬器,因為他對權限、文件的的管理會比較方便。
  2. 我們先打開模擬器或手機,因為手機自帶的瀏覽器看不到一些隱藏的目錄,所以我們下載RE瀏覽器,這也是要求ROOT權限的原因。打開RE瀏覽器,確認權限正常,進入 /data/data/com.tencent.mm/MicroMsg/appbrand 下,你會看到一個類似 a8b3488516c9d81e1d5f511891583cf9 的文件夾,這個是以用戶來分類的,如果有多個,可以全刪掉,進入 a8b3488516c9d81e1d5f511891583cf9 文件夾下,進入pkg文件夾下,這個文件夾就是用來防止微信小程序包的,后綴為**.wxapkg**的就是小程序的包,建議除了最大的那個(大概7-8M左右)包,其他的全部刪掉,方便后續找到我們所需要的包。
  3. 準備工作完成后,我們打開微信,打開想要反編譯的小程序,這是pkg目錄下會出現一個新的wxapkg包,將這個包復制到電腦上。夜深模擬器的話可以通過共享文件夾實現。

反編譯前準備

  1. 安裝node.js(傻瓜式安裝,不做講解)
  2. 使用CMD命令行進入到我們所下載的反編譯腳本目錄,依次輸出一下指令安裝依賴:
npm install esprima
npm install css-tree
npm install cssbeautify
npm install vm2
npm install uglify-es
npm install js-beautify
復制代碼

安裝完成后我們就可以正式開始反編譯我們的微信小程序了

  1. 建議將小程序的包放在比較好操作的位置,例如磁盤更目錄或腳本的目錄,方便后續操作
  2. CMD進入腳本目錄,使用指令 node wuWxapkg.js C:\1.wxapkg 對小程序包進行解包,其中,C:\1.wxapkg為所需要解包的小程序。
  3. 如果不出任何BUG的話在包的目錄下會出現一個包名的文件夾,這個文件夾就是最終反編譯的源碼了。
  4. 如果小程序中有獨立分包,那我們應該進行一下操作:
1. 獲得要解包的主包和子包
2. 解包主包 bingo.sh testpkg/master-xxx.wxapkg
3. 解包子包 bingo.sh testpkg/sub-1-xxx.wxapkg -s=../master-xxx 其中,sub-1-xxx.wxapkg為子包wxapkg,-s=后面為子包在主包中的路徑
復制代碼
  1. 當然,也可以直接解包主包和子包,然后把主包中子包的文件替換掉就行了。

常見問題解決

BUG1 # $gwx is not defined

使用編輯器打開 wuWxss.js 文件,找到 runVM 函數,將函數內容替換成:

let wxAppCode = {};
      let handle = {cssFile: name};
      let gg = new GwxCfg();
      let tsandbox = {
         $gwx: GwxCfg.prototype["$gwx"],
         __mainPageFrameReady__: GwxCfg.prototype["$gwx"],   //解決 $gwx is not defined
         __vd_version_info__: GwxCfg.prototype["$gwx"],  //解決 __vd_version_info__ is not defined
         __wxAppCode__: wxAppCode,
         setCssToHead: cssRebuild.bind(handle)
      }
 
      let vm = new VM({sandbox: tsandbox});
      vm.run(code);
      for (let name in wxAppCode) {
         if (name.endsWith(".wxss")) {
            handle.cssFile = path.resolve(frameName, "..", name);
            wxAppCode[name]();
         }
      }
復制代碼

重新編譯一下就好了。

BUG2: no such file or directory, open '...\plugin:\wxa75efa648b60994b....json' ,也就是插件報錯。

這個問題是你找遍全網,也不會有人告訴你的,反正我解決的時候,是baidu、google都找遍了,也沒找到解決方法,網上全是一些復制站貼的基本內容…… 其實這個問題很好解決,首先我們看報錯信息, no such file or directory, open '...\plugin:\wxa75efa648b60994b....json' ,你品,你細品,話說**\plugin:**這個目錄是啥,也就是這個目錄的原因,造成了博主在百度和谷歌上找了半天的答案,最后還是靠自己解決了。 在Windows系統中,并支持以 : 命名的文件夾,所以對應的plugin文件夾被系統重命名成了“plugin”,所以程序找不到這個文件夾,驚不驚喜,意不意外,解決方式也很簡單。解決的方式有兩種:

  1. 修改腳本中內容,將plugin: 修改成其他格式。( 這方式無效 ,不能通過腳本修改了,那個plugin:其實是微信那個wxapkg里面的東西,如果小程序引用了第三方插件的話,就會有這個文件夾)
  2. 將文件和腳本放到Linux上執行,因為Linux就沒這么多屁事。
鮮花
鮮花
雞蛋
雞蛋
分享至 : QQ空間
收藏
原作者: ?Kim 來自: 掘金
快乐十分复式