gpt4 book ai didi

javascript - Javascript self 防御是如何工作的,它是如何在美化时进入无限循环的?

转载 作者:行者123 更新时间:2023-12-05 00:31:01 24 4
gpt4 key购买 nike

有一个网站“obfuscator.io”,它混淆了 Javascript 代码。它的功能之一是“自卫”。它变成了一个简单的console.log()进入这个:

var _0x2a3a06=function(){var _0x409993=!![];return function(_0xe0f537,_0x527a96){var _0x430fdb=_0x409993?function(){if(_0x527a96){var _0x154d06=_0x527a96['apply'](_0xe0f537,arguments);_0x527a96=null;return _0x154d06;}}:function(){};_0x409993=![];return _0x430fdb;};}();var _0x165132=_0x2a3a06(this,function(){var _0x46b23c=function(){var _0x4c0e23=_0x46b23c['constructor']('return\x20/\x22\x20+\x20this\x20+\x20\x22/')()['constructor']('^([^\x20]+(\x20+[^\x20]+)+)+[^\x20]}');return!_0x4c0e23['test'](_0x165132);};return _0x46b23c();});_0x165132();console['log']();
该代码在 Webkit 控制台中确实可以工作,但是当您使用诸如“beautifier.io”或“de4js”之类的应用程序对其进行美化并再次在同一个控制台中运行它时,代码会进入无限循环,本质上会破坏代码。这是如何运作的?它与美化器的工作方式或 Javascript 解释代码的方式有关吗?

最佳答案

像你一样通过美化器运行代码,然后应用一些基本的变量重命名和取消转义产生以下代码:

var makeRun = function() {
var firstMakeRun = true;
return function(global, callback) {
var run = firstMakeRun ? function() {
if (callback) {
var result = callback['apply'](global, arguments);
callback = null;
return result;
}
} : function() {};
firstMakeRun = false;
return run;
};
}();
var run = makeRun(this, function() {
var fluff = function() {
var regex = fluff['constructor']('return /" + this + "/')()['constructor']('^([^ ]+( +[^ ]+)+)+[^ ]}');
return !regex['test'](run);
};
return fluff();
});
run();
console['log']()
重要的部分是它在哪里测试正则表达式 /^([^ ]+( +[^ ]+)+)+[^ ]}/反对 run函数本身,执行隐式 run.toString() .
现在无限循环在哪里?没有,但是应用于包含大量空格的字符串的正则表达式确实显示 catastrophic backtracking .尝试运行使用制表符而不是空格缩进的代码,它会正常工作 - 正则表达式匹配,只要您的 run函数后面不包含多个空格,结束符前面没有空格 } .

关于javascript - Javascript self 防御是如何工作的,它是如何在美化时进入无限循环的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64583150/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com