我需要一个Javascript文字语法转换器/deobfusation工具

I need a Javascript literal syntax converter/deobfuscation tools

本文关键字:语法 文字 转换器 工具 deobfusation Javascript 一个      更新时间:2023-09-26

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

我想有这样一个工具,但我没有用正确的关键词搜索谷歌。代码有3页长,这就是为什么我需要一个工具。

以下是代码示例:

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

感谢

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

考虑以下代码段,该代码段评估为数组过滤器函数:

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

这样重新构建代码既耗时又容易出错,因此显然需要一个自动化的解决方案。然而,这段代码的行为与JavaScript运行时绑定得如此紧密,以至于去模糊它似乎需要一个JS解释器来评估代码。

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

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

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

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

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

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