100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 微信小程序反编译wxss文件缺失_微信小程序反编译 wxss 丢失问题

微信小程序反编译wxss文件缺失_微信小程序反编译 wxss 丢失问题

时间:2022-03-03 11:55:51

相关推荐

微信小程序反编译wxss文件缺失_微信小程序反编译 wxss 丢失问题

鉴于同事执行了删除代码的疯狂操作,并多次覆盖后,硬盘恢复文件的几率几乎为零,只能另辟蹊跷,所幸之前看到过微信小程序反编译的一篇文章。通过简单的搜索,就找到了相关的文章。根据文章所写,其他的都还算顺利,但是样式文件就迟迟弄不出来。

1反编译

执行wxss反编译程序后获得如下错误:Guess wxss(first turn)...

/Users/aimuz/workspace/web/wxappUnpacker/node_modules/vm2/lib/main.js:214

throw this._internal.Decontextify.value(e);

^

ReferenceError: $gwx is not defined

at vm.js:3:3

at Script.runInContext (vm.js:134:20)

at VM.run (/Users/aimuz/workspace/web/wxappUnpacker/node_modules/vm2/lib/main.js:208:72)

at runVM (/Users/aimuz/workspace/web/wxappUnpacker/wuWxss.js:69:6)

at runOnce (/Users/aimuz/workspace/web/wxappUnpacker/wuWxss.js:86:27)

at Array.preRun (/Users/aimuz/workspace/web/wxappUnpacker/wuWxss.js:166:5)

at CntEvent.decount (/Users/aimuz/workspace/web/wxappUnpacker/wuLib.js:17:43)

at ioLimit.runWithCb (/Users/aimuz/workspace/web/wxappUnpacker/wuLib.js:81:11)

at agent (/Users/aimuz/workspace/web/wxappUnpacker/wuLib.js:54:14)

at FSReqCallback.readFileAfterClose [as oncomplete] (internal/fs/read_file_context.js:53:3)

在翻阅相关的资料后,发现不少人遇到了相同的问题

这简直和我的一毛一样啊。可惜没有解决方法。

偌大的互联网竟然还没有人找到解决问题。

2 分析文件

到了这里可以确认,微信小程序官方应该对小程序进行了升级,导致原反编译工具失效。可是这并不能为难我胖虎,通过 / 工具对 page-frame.html 进行简单的反混淆后。获得了较为清晰的文件

通过仔细阅读代码后发现了 page-frame.html 文件,包含了样式信息。__wxAppCode__["components/menu/menu.wxss"] = setCssToHead([".", [1], "menuBox{ width: 100%; height: ", [0, 100], "; position: fixed; bottom: ", [0, 0], "; left: ", [0, 0], "; display: -webkit-flex; display: flex; background: #fff; padding-top: ", [0, 10], "; border-top: ", [0, 2], " solid #ccc; }\n.", [1], "menuBox .", [1], "menu{ width: ", [0, 250], "; text-align: center; font-size: ", [0, 22], "; color: #8a8a8a }\n.", [1], "menuBox wx-image{ width: ", [0, 50], "; height: ", [0, 50], "; }\n.", [1], "menuBox .", [1], "menu wx-view{ }\n",], undefined, { path: "./components/menu/menu.wxss" });

setCssToHead 函数 定义var setCssToHead = function (file, _xcInvalid, info) {

通过查看 setCssToHead 函数,发现其中有一个 makeup 方法,这个方法是对原来的wxss中rpx进行单位转换,换成通用型的px。

makeup 方法相关的代码function makeup(file, opt) {

var _n = typeof(file) === "number";

if (_n && Ca.hasOwnProperty(file)) return "";

if (_n) Ca[file] = 1;

var ex = _n ? _C[file] : file;

var res = "";

for (var i = ex.length - 1; i >= 0; i--) {

var content = ex[i];

if (typeof(content) === "object") {

var op = content[0];

if (op == 0) res = transformRPX(content[1], opt.deviceWidth) + "px" + res;

else if (op == 1) res = opt.suffix + res;

else if (op == 2) res = makeup(content[1], opt) + res;

} else res = content + res

}

return res;

}

在这之后又找到了一个 rewritor

rewritor 相关代码var rewritor = function(suffix, opt, style) {

opt = opt || {};

suffix = suffix || "";

opt.suffix = suffix;

if (opt.allowIllegalSelector != undefined && _xcInvalid != undefined) {

if (opt.allowIllegalSelector) console.warn("For developer:" + _xcInvalid);

else {

console.error(_xcInvalid + "This wxss file is ignored.");

return;

}

}

Ca = {};

css = makeup(file, opt);

if (!style) {

var head = document.head || document.getElementsByTagName("head")[0];

window.__rpxRecalculatingFuncs__ = window.__rpxRecalculatingFuncs__ || [];

style = document.createElement("style");

style.type = "text/css";

style.setAttribute("wxss:path", info.path);

head.appendChild(style);

window.__rpxRecalculatingFuncs__.push(function(size) {

opt.deviceWidth = size.width;

rewritor(suffix, opt, style);

});

}

if (style.styleSheet) {

style.styleSheet.cssText = css;

} else {

if (style.childNodes.length == 0) style.appendChild(document.createTextNode(css));

else style.childNodes[0].nodeValue = css;

}

}

并发现setCssToHead最后就是返回了rewritor 方法,由此以及根据上述代码可以猜出,该方法应该主要是还原wxss文件。

3 分析代码

rewritor 拥有三个参数,阅读代码可以得出 suffix 参数是给样式添加前缀,例如原来样式名是 .abc, suffix 参数是 a,那么会拼接成 .aabc。

opt 看代码结构应该是一个对象

style 应该是一个document.node的对象。

通过浏览器直接打开page-frame.html文件,在控制台中输入 __wxAppCode__["components/menu/menu.wxss"], 看看其返回值

微信小程序反编译 wxss 丢失问题

看出,确实是返回一个方法,先不传任何参数,再次输入测试 __wxAppCode__["components/menu/menu.wxss"]()

微信小程序反编译 wxss 丢失问题

直接返回了 undefined

由此说明参数应该必填的,现在输入正确的参数类型尝试 __wxAppCode__["components/menu/menu.wxss"]("",{},document.body)

微信小程序反编译 wxss 丢失问题

微信小程序反编译 wxss 丢失问题

微信小程序反编译 wxss 丢失问题

把代码复制到小程序中,,像素比例竟然放大了。再次翻看一下代码,rewritor又调用了makeup方法,并且用到了设备宽度

微信小程序反编译 wxss 丢失问题

改变浏览器宽度后,确实发生了改变.menuBox{ width: 100%; height: 50px; position: fixed; bottom: 0px; left: 0px; display: -webkit-flex; display: flex; background: #fff; padding-top: 5px; border-top: 1px solid #ccc; }

.menuBox .menu{ width: 125px; text-align: center; font-size: 11px; color: #8a8a8a }

.menuBox wx-image{ width: 25px; height: 25px; }

.menuBox .menu wx-view{ }

把设备宽度调成了iPhone 6的宽度,然后复制小程序里面

微信小程序反编译 wxss 丢失问题

再把代码过了一遍之后,了解到 opt 会使用到一个 deviceWidth 属性,传入iPhone 6的宽度像素,也得到了__wxAppCode__["pages/index/cardDetail/carsDetail.wxss"]("",{deviceWidth:375},document.body)

wxss 代码.menuBox{ width: 100%; height: 50px; position: fixed; bottom: 0px; left: 0px; display: -webkit-flex; display: flex; background: #fff; padding-top: 5px; border-top: 1px solid #ccc; }

.menuBox .menu{ width: 125px; text-align: center; font-size: 11px; color: #8a8a8a }

.menuBox wx-image{ width: 25px; height: 25px; }

.menuBox .menu wx-view{ }

但是这个只能在iPhone 6上适配啊,需要改成rpx,方能适配其他的设备终端。rpx和px 的转换公式,rpx = px * 2

px = rpx / 2

经过转换后,问题就完美解决了。

更多有关

小程序

鉴于同事执行了删除代码的疯狂操作,并多次覆盖后,硬盘恢复文件的几率几乎为零,只能另辟蹊跷,所幸之前看到过微信小程序反编译的一篇文章。通过简单的搜索,就找到了相关的文章。根据文章所写,其他的都还算-11-12 04:06:57

鉴于同事执行了删除代码的疯狂操作,并多次覆盖后,硬盘恢复文件的几率几乎为零,只能另辟蹊跷,所幸之前看到过微信小程序反编译的一篇文章。通过简单的搜索,就找到了相关的文章。根据文章所写,其他的都还算-11-12 04:31:50

鉴于同事执行了删除代码的疯狂操作,并多次覆盖后,硬盘恢复文件的几率几乎为零,只能另辟蹊跷,所幸之前看到过微信小程序反编译的一篇文章。通过简单的搜索,就找到了相关的文章。根据文章所写,其他的都还算-11-12 11:03:35

鉴于同事执行了删除代码的疯狂操作,并多次覆盖后,硬盘恢复文件的几率几乎为零,只能另辟蹊跷,所幸之前看到过微信小程序反编译的一篇文章。通过简单的搜索,就找到了相关的文章。根据文章所写,其他的都还算-11-12 09:13:27

鉴于同事执行了删除代码的疯狂操作,并多次覆盖后,硬盘恢复文件的几率几乎为零,只能另辟蹊跷,所幸之前看到过微信小程序反编译的一篇文章。通过简单的搜索,就找到了相关的文章。根据文章所写,其他的都还算-11-12 10:08:28

鉴于同事执行了删除代码的疯狂操作,并多次覆盖后,硬盘恢复文件的几率几乎为零,只能另辟蹊跷,所幸之前看到过微信小程序反编译的一篇文章。通过简单的搜索,就找到了相关的文章。根据文章所写,其他的都还算-11-12 11:15:33

鉴于同事执行了删除代码的疯狂操作,并多次覆盖后,硬盘恢复文件的几率几乎为零,只能另辟蹊跷,所幸之前看到过微信小程序反编译的一篇文章。通过简单的搜索,就找到了相关的文章。根据文章所写,其他的都还算-11-11 05:18:26

鉴于同事执行了删除代码的疯狂操作,并多次覆盖后,硬盘恢复文件的几率几乎为零,只能另辟蹊跷,所幸之前看到过微信小程序反编译的一篇文章。通过简单的搜索,就找到了相关的文章。根据文章所写,其他的都还算-11-11 03:20:25

鉴于同事执行了删除代码的疯狂操作,并多次覆盖后,硬盘恢复文件的几率几乎为零,只能另辟蹊跷,所幸之前看到过微信小程序反编译的一篇文章。通过简单的搜索,就找到了相关的文章。根据文章所写,其他的都还算-11-11 04:15:51

鉴于同事执行了删除代码的疯狂操作,并多次覆盖后,硬盘恢复文件的几率几乎为零,只能另辟蹊跷,所幸之前看到过微信小程序反编译的一篇文章。通过简单的搜索,就找到了相关的文章。根据文章所写,其他的都还算-11-11 11:07:24

鉴于同事执行了删除代码的疯狂操作,并多次覆盖后,硬盘恢复文件的几率几乎为零,只能另辟蹊跷,所幸之前看到过微信小程序反编译的一篇文章。通过简单的搜索,就找到了相关的文章。根据文章所写,其他的都还算-11-11 05:28:20

鉴于同事执行了删除代码的疯狂操作,并多次覆盖后,硬盘恢复文件的几率几乎为零,只能另辟蹊跷,所幸之前看到过微信小程序反编译的一篇文章。通过简单的搜索,就找到了相关的文章。根据文章所写,其他的都还算-11-11 09:19:45

鉴于同事执行了删除代码的疯狂操作,并多次覆盖后,硬盘恢复文件的几率几乎为零,只能另辟蹊跷,所幸之前看到过微信小程序反编译的一篇文章。通过简单的搜索,就找到了相关的文章。根据文章所写,其他的都还算-11-09 09:30:07

鉴于同事执行了删除代码的疯狂操作,并多次覆盖后,硬盘恢复文件的几率几乎为零,只能另辟蹊跷,所幸之前看到过微信小程序反编译的一篇文章。通过简单的搜索,就找到了相关的文章。根据文章所写,其他的都还算-11-10 09:56:01

鉴于同事执行了删除代码的疯狂操作,并多次覆盖后,硬盘恢复文件的几率几乎为零,只能另辟蹊跷,所幸之前看到过微信小程序反编译的一篇文章。通过简单的搜索,就找到了相关的文章。根据文章所写,其他的都还算-11-11 11:45:35

鉴于同事执行了删除代码的疯狂操作,并多次覆盖后,硬盘恢复文件的几率几乎为零,只能另辟蹊跷,所幸之前看到过微信小程序反编译的一篇文章。通过简单的搜索,就找到了相关的文章。根据文章所写,其他的都还算-11-08 06:12:35

鉴于同事执行了删除代码的疯狂操作,并多次覆盖后,硬盘恢复文件的几率几乎为零,只能另辟蹊跷,所幸之前看到过微信小程序反编译的一篇文章。通过简单的搜索,就找到了相关的文章。根据文章所写,其他的都还算-11-10 05:30:00

鉴于同事执行了删除代码的疯狂操作,并多次覆盖后,硬盘恢复文件的几率几乎为零,只能另辟蹊跷,所幸之前看到过微信小程序反编译的一篇文章。通过简单的搜索,就找到了相关的文章。根据文章所写,其他的都还算-11-10 11:23:05

免责申明:本栏目所发资料信息部分来自网络,仅供大家学习、交流。我们尊重原创作者和单位,支持正版。若本文侵犯了您的权益,请直接点击提交联系我们,立刻删除!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。