什么是JavaScript模糊处理?为什么会构成威胁?


Answers:


38

混淆是一种“模糊”您的javascript代码的真实含义和意图的方法。一些站点将其用作想要复制/借用其代码的人们的障碍。其他站点使用它作为隐藏代码实际意图的手段。

某些形式的混淆:

  1. 自动将变量重命名为简短的无意义名称,以使代码的可读性和难理解性。
  2. 删除所有多余的空格和换行符,使代码成为一条巨大的长行。
  3. 使代码的各个部分自生成,以便代码的第一遍运行以创建实际的代码,然后运行该代码以执行预期的操作。
  4. 将字符代码和字符串处理与eval结合使用,而不是与普通的javascript代码结合使用,以构造将要运行的实际代码。

晦涩本身并不是邪恶的,但是它可以用来掩饰邪恶的意图,而这可能是AVG反对的。它检测到太多的晦涩,无法分辨javascript是否正在尝试执行它试图阻止的操作。因此,它默认情况下将代码声明为不安全,因为它无法验证代码看起来还可以。


这就是我的想法,但想验证一下。感谢您的澄清。
L84 2012年

如果AVG​​阻止访问知名的知名网站,则可以覆盖它。如果您不了解网站代表,我不会建议您。
uSlackr 2012年

4
有些网站使用js压缩,因此加载速度更快(几乎每个人都可以),代码看起来很混乱。
jcubic 2012年

9
1并且2也由javascript压缩程序完成。压缩器会将代码混淆为副作用,但这不是它们的主要目的。它们的主要目的是使javascript较小,以减少带宽。
BlueRaja-Danny Pflughoeft

5.它还用于压缩JS文件以加快下载速度。雅虎自从进入网络以来就做到了,而Google的用于创建网络应用程序的工具也可以做到这一点(例如GMail和Calendar)。
Chloe

13

混淆是指隐藏事物的预期含义。

在这种情况下,一个清晰可读的JavaScript代码段(例如

window.onload = function() { alert("Hello " + username) };

可以替换为

var _0xc5b2=["\x6F\x6E\x6C\x6F\x61\x64",
        "\x48\x65\x6C\x6C\x6F\x20"];window[_0xc5b2[0]]=
    function (){alert(_0xc5b2[1]+username);} ;

甚至

eval(unescape("var%20_0xc5b2%3D%5B%22onload%22%2C%22Hello%20%22%5D%3Bwindow"+
  "%5B_0xc5b2%5B0%5D%5D%3Dfunction%20%28%29%7Balert%28_0xc5b2%5B1%5D+username"+
  "%29%3B%7D%20%3B"));

所有这三个代码段都执行完全相同的操作,但是仅阅读第一个代码段将使您轻松理解其意图。

显然,AVG试图在允许执行之前先了解JavaScript代码的用途。混淆代码后,AVG可能会失败。因此,警告。

话虽如此,有些网站不是因为恶意而混淆了他们的JavaScript,而是使其难以窃取他们的作品。如果将混淆用于此目的通常是没有用的,但是重点是混淆并不一定意味着恶意。


3
尽管正如我经常发现的那样,反混淆代码经常向我展示它隐藏了不值得窃取的错误编码的javascript。这是程序员比适当的编程技术花更多的时间在担心盗窃的迹象,并且甚至无法正确地进行混淆,因此很容易破解。唯一花费大量时间使代码难以混淆的人就是恶意软件程序员,这就是AVG将其标记为逃避该站点的真正好理由的原因。
Fiasco Labs

2
AVG是一台机器,而不是人类。显然,机器可以理解代码,这就是该代码如何执行相同的操作。而且,人们在冲浪时通常不会看Javascript。这仅仅是“有罪感”。某些危险的Javascript使用了某些混淆模式。因此,其他具有类似模式的Javascript可疑。
卡兹(Kaz)2012年

@Kaz:这只是一个示例,但是还有更多复杂的混淆方法需要了解JavaScript引擎。出于性能原因,恶意软件扫描程序通常会搜索某些模式而不是执行脚本。
丹尼斯

从理论上讲毫无价值和实践上一文不值是不同的-从理论上讲,混淆代码是无用的,这是一致的。但是,如果消除混淆的成本与创建新代码的成本相似(或者,甚至变得高到足以阻止懒惰的盗贼),那么进行混淆来防止肆意盗窃可能是有益的。
罗纳德

的确,问题本身并不是混淆,而是代码与已知恶意代码的相似性。
卡兹(Kaz)2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.