5

我在 Google 上搜索了转换器,但没有找到任何东西。是否有任何可用的工具,或者我必须制作一个来解码我的混淆 JavaScript 代码?

我想有这样的工具,但我没有用正确的关键字搜索谷歌。代码有 3 页长,这就是我需要工具的原因。

这是代码的示例:

<script>([][(![]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[!+[]+!+[]]]()[(!![]+[])[!+[]+!+[]+!+[]]+(+(+[])+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+!+[]+[+[]]]+(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]])(([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+

谢谢

4

2 回答 2

4

这段代码很吸引人,因为它似乎只使用了九个字符(" []()!+,;" 和空格U+0020),但具有一些复杂的功能。它似乎使用 JavaScript 的隐式类型转换将数组强制转换为各种原始类型及其字符串表示形式,然后使用这些字符串中的字符组成其他字符串,这些字符串键入然后调用的函数的名称。

考虑以下对数组过滤函数求值的片段:

([][
   (![]+[])[+[]]               // => "f"
 + ([![]]+[][[]])[+!+[]+[+[]]] // => "i"
 + (![]+[])[!+[]+!+[]]         // => "l"
 + (!![]+[])[+[]]              // => "t"
 + (!![]+[])[!+[]+!+[]+!+[]]   // => "e"
 + (!![]+[])[+!+[]]            // => "r"
]) // => function filter() { /* native code */ }

如此重构代码既费时又容易出错,因此显然需要一个自动化的解决方案。然而,这段代码的行为与 JavaScript 运行时紧密相关,以至于去混淆它似乎需要一个 JS 解释器来评估代码。

我还没有找到任何可以普遍使用这种编码的工具。似乎您必须进一步研究代码并确定任何使用模式(例如依赖数组方法)并弄清楚如何捕获它们的用法(例如通过包装高级函数[例如 Function.prototype.call ]) 为您跟踪代码执行。

于 2012-01-18T01:30:16.730 回答
1

这个问题已经有一个公认的答案,但我仍然会发布以澄清一些事情。

当这个想法出现时,有人制作了一个生成器来以这种方式编码 JavaScript。它是基于做[]["sort"]["call"]()["eval"](/* big blob of code here */)。因此,您可以通过删除 sort-call-eval 部分(即前 1628 个字节)轻松解码此编码器的结果。在这种情况下,它会产生:

if (document.cookie=="6ffe613e2919f074e477a0a80f95d6a1"){ alert("bravo"); }
else{ document.location="http://www.youtube.com/watch?v=oHg5SJYRHA0"; }

(有趣的是,这段代码的创建者甚至无法正确压缩它并节省一千字节)

还有一个解释为什么这段代码不再在较新的浏览器中工作:他们改变了Array.prototype.sort,所以它不返回对window. 据我记得,这是获得对 的引用的唯一方法window,所以这段代码现在有点坏了。

于 2012-01-18T18:27:43.937 回答