最近練習項目時想要縮短週期,想着下載個模板,可是苦耐竟然完全找不到我想要的,無奈之下只能試試反編譯來獲取我想要的小程序,試了很多方法總出現氣球愛怪的問題,要麼給的鏈接裏沒文件,經過兩個晚上的實驗,終於成功完全的編譯出來了,廢話不多說,上過程。
- 首先和很多教程一樣,找到自己需要的小程序,然後電腦上安裝安卓模擬器,本次使用的是夜神模擬器。
安裝好後安裝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了。