我遇到了一些评估代码:
eval('[+!+[]+!+[]+!+[]+!+[]+!+[]]');
此代码等于整数 5。
这种东西叫什么?我试过在网上搜索,但我似乎无法弄清楚这指的是什么。我觉得这很有趣,想知道在哪里/如何学习如何打印不同的东西,而不仅仅是整数 5。字母、符号等。因为我无法在该代码中指出一个模式,所以我有 0成功从中获取并添加到它以产生不同的结果。
这是某种混淆吗?
最佳答案
除了 eval() 之外,这种类型的混淆被称为非字母数字混淆。 要完全非字母数字,eval 必须由 Array 构造函数原型(prototype)函数和下标符号执行:
[]["sort"]["constructor"]("string to be evaled");
然后将这些字符串转换为非字母数字形式。
AFAIK,它是 Yosuke Hosogawa 于 2009 年左右首次提出的。 如果您想实际查看它,请查看此工具:http://www.jsfuck.com/
它不被认为是一种好的混淆类型,因为它很容易逆向回到原始源代码,甚至不必(静态)运行代码。此外,它还会极大地增加文件大小。
但它是一种有趣的混淆形式,用于探索 JavaScript 类型强制转换。要了解更多信息,我推荐此演示文稿,幻灯片 33: http://www.slideshare.net/auditmark/owasp-eu-tour-2013-lisbon-pedro-fortuna-protecting-java-script-source-code-using-obfuscation
关于Javascript eval - 混淆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27878349/