合法网站使用这种混淆是有原因的吗?
这不是混淆脚本。它只是为了更快的加载目的而最小化的脚本。
这些是一些示例脚本。
普通脚本:
StackExchange.ready(function() {
StackExchange.using("postValidation", function() {
StackExchange.postValidation.initOnBlurAndSubmit($('#post-form'), 2, 'answer');
});
StackExchange.question.init({
showAnswerHelp: true,
totalCommentCount: 2,
shownCommentCount: 2,
highlightColor: '#F4A83D',
backgroundColor: '#FFF',
questionId: 128839
});
styleCode();
StackExchange.realtime.subscribeToQuestion('162', '128839');
StackExchange.using("gps", function() {
StackExchange.gps.trackOutboundClicks('#content', '.post-text');
});
});
最小化脚本:
StackExchange.ready(function(){StackExchange.using("postValidation",function(){StackExchange.postValidation.initOnBlurAndSubmit($('#post-form'),2,'answer')});StackExchange.question.init({showAnswerHelp:true,totalCommentCount:2,shownCommentCount:2,highlightColor:'#F4A83D',backgroundColor:'#FFF',questionId:128839});styleCode();StackExchange.realtime.subscribeToQuestion('162','128839');StackExchange.using("gps",function(){StackExchange.gps.trackOutboundClicks('#content','.post-text')})});
混淆脚本(使用我的自我方法):
var _0x1fc5 = ["\x30\x2E\x38\x28\x31\x28\x29\x7B\x30\x2E\x33\x28\x22\x34\x22\x2C\x31\x28\x29\x7B\x30\x2E\x34\x2E\x39\x28\x24\x28\x27\x23\x35\x2D\x61\x27\x29\x2C\x32\x2C\x27\x62\x27\x29\x7D\x29\x3B\x30\x2E\x63\x2E\x64\x28\x7B\x65\x3A\x66\x2C\x67\x3A\x32\x2C\x68\x3A\x32\x2C\x69\x3A\x27\x23\x6A\x27\x2C\x6B\x3A\x27\x23\x6C\x27\x2C\x6D\x3A\x36\x7D\x29\x3B\x6E\x28\x29\x3B\x30\x2E\x6F\x2E\x70\x28\x27\x71\x27\x2C\x27\x36\x27\x29\x3B\x30\x2E\x33\x28\x22\x37\x22\x2C\x31\x28\x29\x7B\x30\x2E\x37\x2E\x72\x28\x27\x23\x73\x27\x2C\x27\x2E\x35\x2D\x74\x27\x29\x7D\x29\x7D\x29\x3B", "\x7C", "\x73\x70\x6C\x69\x74", "\x53\x74\x61\x63\x6B\x45\x78\x63\x68\x61\x6E\x67\x65\x7C\x66\x75\x6E\x63\x74\x69\x6F\x6E\x7C\x7C\x75\x73\x69\x6E\x67\x7C\x70\x6F\x73\x74\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E\x7C\x70\x6F\x73\x74\x7C\x31\x32\x38\x38\x33\x39\x7C\x67\x70\x73\x7C\x72\x65\x61\x64\x79\x7C\x69\x6E\x69\x74\x4F\x6E\x42\x6C\x75\x72\x41\x6E\x64\x53\x75\x62\x6D\x69\x74\x7C\x66\x6F\x72\x6D\x7C\x61\x6E\x73\x77\x65\x72\x7C\x71\x75\x65\x73\x74\x69\x6F\x6E\x7C\x69\x6E\x69\x74\x7C\x73\x68\x6F\x77\x41\x6E\x73\x77\x65\x72\x48\x65\x6C\x70\x7C\x74\x72\x75\x65\x7C\x74\x6F\x74\x61\x6C\x43\x6F\x6D\x6D\x65\x6E\x74\x43\x6F\x75\x6E\x74\x7C\x73\x68\x6F\x77\x6E\x43\x6F\x6D\x6D\x65\x6E\x74\x43\x6F\x75\x6E\x74\x7C\x68\x69\x67\x68\x6C\x69\x67\x68\x74\x43\x6F\x6C\x6F\x72\x7C\x46\x34\x41\x38\x33\x44\x7C\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x43\x6F\x6C\x6F\x72\x7C\x46\x46\x46\x7C\x71\x75\x65\x73\x74\x69\x6F\x6E\x49\x64\x7C\x73\x74\x79\x6C\x65\x43\x6F\x64\x65\x7C\x72\x65\x61\x6C\x74\x69\x6D\x65\x7C\x73\x75\x62\x73\x63\x72\x69\x62\x65\x54\x6F\x51\x75\x65\x73\x74\x69\x6F\x6E\x7C\x31\x36\x32\x7C\x74\x72\x61\x63\x6B\x4F\x75\x74\x62\x6F\x75\x6E\x64\x43\x6C\x69\x63\x6B\x73\x7C\x63\x6F\x6E\x74\x65\x6E\x74\x7C\x74\x65\x78\x74", "\x72\x65\x70\x6C\x61\x63\x65", "", "\x5C\x77\x2B", "\x5C\x62", "\x67"]
eval(function(_0x5f63x1, _0x5f63x2, _0x5f63x3, _0x5f63x4, _0x5f63x5, _0x5f63x6) {
_0x5f63x5 = function(_0x5f63x3) {
return _0x5f63x3.toString(_0x5f63x2)
};
if (!_0x1fc5[5][_0x1fc5[4]](/^/, String)) {
while (_0x5f63x3--) {
_0x5f63x6[_0x5f63x5(_0x5f63x3)] = _0x5f63x4[_0x5f63x3] || _0x5f63x5(_0x5f63x3)
}
_0x5f63x4 = [function(_0x5f63x5) {
return _0x5f63x6[_0x5f63x5]
}];
_0x5f63x5 = function() {
return _0x1fc5[6]
};
_0x5f63x3 = 1
};
while (_0x5f63x3--) {
if (_0x5f63x4[_0x5f63x3]) {
_0x5f63x1 = _0x5f63x1[_0x1fc5[4]](new RegExp(_0x1fc5[7] + _0x5f63x5(_0x5f63x3) + _0x1fc5[7], _0x1fc5[8]), _0x5f63x4[_0x5f63x3])
}
}
return _0x5f63x1
}
(_0x1fc5[0], 30, 30, _0x1fc5[3][_0x1fc5[2]](_0x1fc5[1]), 0, {}))
看,上面的 3 个脚本是相同的(相等的)。
您从答案和评论中获得了很好的信息,但是,他们并没有完全回答这个问题。
使用混淆代码的原因取决于作者。
作者是个混蛋:如果作者正在编写恶意软件,恶意软件检查器可以使用签名、令牌的存在、预编译和其他方法轻松解析未混淆的代码。在这种情况下,作者希望恶意软件传播,因此,代码被混淆以试图避免检测。
(注意,这不合法,所以,不回答你的问题;但我为后代添加了它)
作者正在使用专利代码:如果作者正在编写专有代码,无论是在 java/vbscript 中还是在它使用的 ActiveX 库中,混淆代码是程序员防止临时黑客了解并可能利用、窃取的方法,从中获利或泄露这些秘密。
作者正在使用秘密函数:如果作者正在编写使用 ActiveX 库中的秘密(未发布)函数的代码,则混淆对这些函数的访问可以减少临时黑客看到、使用和利用此代码。尽管这是一种危险的做法,但有时,程序员会使用“后门”逻辑——不需要身份验证或昂贵的检查和平衡等。这种代码有时被称为“调试”代码——临时的或故意的留在生产中,“不应该”使用。
作者正在对密码进行硬编码:如果作者正在编写对受保护信息(密码)进行硬编码的代码,作者可能希望将此信息隐藏起来,不让临时黑客或机器人发现。
作者正在对电子邮件进行硬编码:如果作者正在编写对电子邮件进行硬编码的代码(例如,作为“联系我们”链接的一部分),则作者可能希望对查找电子邮件的机器人隐藏此信息发送垃圾邮件到。
作者正在使用已弃用或 beta 代码:如果作者正在编写的代码使用不打算在常规生产中使用的功能 - 例如,代码已弃用或处于 beta/alpha 状态 - 那么混淆它将减轻任何尝试复制、使用、记录或依赖它。在这里,没有试图损害某人的计算机或窃取代码的企图。
作者我们使用了触发误报的好代码:如果作者正在编写的代码恰好具有已知会被病毒检查器触发误报的签名,则作者可能会尝试通过混淆代码来缓解这种情况,以免触发警报。这似乎与第一种情况相似,只是在第一种情况下,作者是恶意的,而在这种情况下,作者并没有试图颠覆任何人的制度。
休闲黑客:请注意,任何坚定的黑客都会看穿所有这些并根据需要轻松解析代码。内容安全通常被认为是圣杯。发送给客户端的任何内容在使用之前都必须经过解密、解码或去混淆处理,这其中存在弱点:一旦被解密、解码或去混淆处理,内容就可以访问。