小程序反編譯百分百成功心得分享

最近練習項目時想要縮短週期,想着下載個模板,可是苦耐竟然完全找不到我想要的,無奈之下只能試試反編譯來獲取我想要的小程序,試了很多方法總出現氣球愛怪的問題,要麼給的鏈接裏沒文件,經過兩個晚上的實驗,終於成功完全的編譯出來了,廢話不多說,上過程。

  1. 首先和很多教程一樣,找到自己需要的小程序,然後電腦上安裝安卓模擬器,本次使用的是夜神模擬器。​​​​​​

安裝好後安裝RE管理器,qq,微信。然後進設置把超級用戶開上。

2.         登錄微信運行一遍要編譯的小程序,然後退出,進RE管理器/data/data/com.teccent.mm/MicroMsg/(這一層目錄是很奇怪的一串,類似於58d2d9dcc8dad646328ae8d9f1aa0576這樣的文件夾,小程序運行的不止一個的話看生成時間找)/appbrand/pkg/***.wxapkg(大小不大,小於2M的),然後長按,右上角打包成zip文件通過qq傳到電腦上(不打包文件不識別,qq傳不了)。

3.         拿到文件了接成功了三分之一,然後下載反編譯工具,隨便解壓在哪,(電腦上要有node.js的環境,具體node的安裝網上教程很多,此處省略。)然後cmd進入解壓的路徑運行npm install下載依賴包,也可以分開下載(也可以去掉-g)

  • npm install esprima -g
  • npm install css-tree -g
  • npm install cssbeautify -g
  • npm install vm2 -g
  • npm install uglify-es -g

下載好後把依賴放到腳本的文件夾裏,node_modules,把獲取到的wxapkg也放進來,再次cmd進去到此目錄下

運行指令,此處爲例:node wuWxapkg.js _-789017489_3.wxapkg(.js後有空格),然後等待編譯。

有小夥伴可能回遇到編譯出來沒有wxss文件有報錯:

只需要進wuWxss.js文件裏修改一下方法就行,找到function runOnce() 方法,修改成

function runOnce() {
		for (let name in runList) {
			var start = `var window = window || {}; var __pageFrameStartTime__ = Date.now(); var __webviewId__; var __wxAppCode__={}; var __mainPageFrameReady__ = function(){}; var __WXML_GLOBAL__={entrys:{},defines:{},modules:{},ops:[],wxs_nf_init:undefined,total_ops:0}; var __vd_version_info__=__vd_version_info__||{};

			$gwx=function(path,global){

				if(typeof global === 'undefined') global={};if(typeof __WXML_GLOBAL__ === 'undefined') {__WXML_GLOBAL__={};

			}__WXML_GLOBAL__.modules = __WXML_GLOBAL__.modules || {};

			}`;

		runVM(name, start + " \r\n" + runList[name]);

		}
	}

wxss文件丟失的情況下修改wxWxss文件的runVm函數 ,改爲

function runVM(name, code) {
      // let wxAppCode = {}, handle = {cssFile: name};
      // let vm = new VM({
      //    sandbox: Object.assign(new GwxCfg(), {
      //       __wxAppCode__: wxAppCode,
      //       setCssToHead: cssRebuild.bind(handle)
      //    })
      // });
      // vm.run(code);
      // for (let name in wxAppCode) if (name.endsWith(".wxss")) {
      //    handle.cssFile = path.resolve(frameName, "..", name);
      //    wxAppCode[name]();
      // }
 
      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]();
         }
      }
   }

 保存,刪掉運行失敗的再次運行一遍就ok了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章