如何克服混淆的javascript代码的消泡?

如何克服混淆的javascript代码的消泡?,javascript,obfuscation,deobfuscation,Javascript,Obfuscation,Deobfuscation,这是一个一般性问题 我在一些网站上看到过javascript,它被混淆了 当您尝试使用标准的除臭器(deobfouscateJavaScript.com、jsnice.org和jsbeautifier.org)对代码进行除臭时 ,代码不容易被除臭 我知道要避免脱毒几乎是不可能的。我想让攻击者很难将其除臭 请建议一些方法,我可以做到这一点 我是否应该编写自己的模糊处理程序,然后使用另一个在线模糊处理程序对输出进行模糊处理。这能打败它吗 提前谢谢 附言:我试过谷歌闭包编译器、uglifyjs、js模

这是一个一般性问题

我在一些网站上看到过javascript,它被混淆了

当您尝试使用标准的除臭器(deobfouscateJavaScript.com、jsnice.org和jsbeautifier.org)对代码进行除臭时 ,代码不容易被除臭

我知道要避免脱毒几乎是不可能的。我想让攻击者很难将其除臭

请建议一些方法,我可以做到这一点

我是否应该编写自己的模糊处理程序,然后使用另一个在线模糊处理程序对输出进行模糊处理。这能打败它吗

提前谢谢


附言:我试过谷歌闭包编译器、uglifyjs、js模糊器和其他一些工具。它们中的任何一个(单独使用或组合使用)都无法击败Deobfousators

浏览器可以从明文中解释JavaScript。如果浏览器能做到这一点,你也能做到。这是野兽的本性。还有很多其他编程语言允许您在发布之前编译/黑盒。如果你一心想保护你的知识产权,那就编译你的JavaScript使用的服务器端数据提供者

模糊处理可以在几个复杂程度上完成

大多数可用的混淆器都会对标识符进行置乱(收缩?)并删除空白。预打印代码可以恢复良好的缩进;汗水和大量猜测可以通过足够的努力恢复合理的标识符名称。所以人们说这是一种微弱的混淆。他们是对的;有时候就够了。 [加密不是混淆;它只是简单地反转]

但人们可以用更复杂的方式混淆代码。特别是,我们可以利用图灵Tarpit和关于模糊程序的推理在实践中很难/不可能的事实。我们可以通过扰乱控制流并注入不透明的控制流控制谓词来实现这一点,这些谓词很难推理;您可以用多种方式构造这样的谓词。例如,包括基于构造“*p==*q”形式的人工指针别名(或数组下标,相当于)的测试,p和q是从混乱复杂的图形数据结构计算出来的指针

这种模糊程序更难进行逆向工程,因为它们建立在难以解决的问题之上

这是一个例子。给你

OP想要的是一个在这个更复杂级别上运行的模糊器。我相信,Java和C#都可以使用这些工具,因为一旦有了程序的字节码表示,而不仅仅是它的文本,构建程序分析器来确定(并利用)控制流就相对容易了。对于其他语言,它们是不可用的。可能只是时间问题


(完全披露:我的公司制造了一种更简单的模糊器。我们偶尔会想到更漂亮的模糊器,但会被闪亮的物体分散注意力)。

您列出的公共模糊消除器只使用了一个简单的
eval()
,然后是一个美化器来消除模糊代码。这可能需要多次运行。它之所以能够工作,是因为大多数模糊处理程序都完成了自己的工作,并在最后添加了一个函数,以充分消除模糊,从而允许引擎运行它。在大多数情况下,它只是一个简单的字符替换(一种Cesar密码),一个
eval()
就足以得到一些代码,然后由一个美容师或多或少地读取

回答您的问题:您可以通过使用某种“加密”使其更难(“更难”的意思是,只需将其c&p’s放入解模糊器就不再工作),这种“加密”使用第一轮解模糊后代码从服务器获得的密码,并使用浏览器完成的相对路径而不是完整路径。这需要人工干预。以一种复杂而不明显的方式构建这条道路,你就会对普通的脚本小子产生威慑力

通常:您需要一些东西来消除不在脚本本身中的脚本的模糊

但要注意:它只回答了你的问题,也就是说,它不可能通过简单的c&p将模糊消除为公共模糊消除器之一,而不是更多。有关更复杂的内容,请参见Ira的答案

请注意混淆代码的原因:

  • 隐藏恶意意图/内容
  • 隐藏被盗代码
  • 隐藏错误代码
  • 头发尖的老板/投资者
  • 其他(我知道那是什么,但我太有礼貌了,不敢说)

现在,如果人们看到你的模糊代码,他们会怎么想?你的投资者坚持要它给你钱,让你写一款人人都喜欢的浏览器小游戏?

任何JavaScript混淆或保护都不能说它使一段代码无法反转。也就是说,有一些工具提供了一个非常简单的模糊处理,很容易反转,还有一些工具实际上将JavaScript转换成了非常难以反转的东西。据我所知,实际上保护代码的最先进的产品是。他们有最强大的模糊处理技术,他们添加了代码锁和反调试功能,将检索代码的过程变成了地狱。我已经用它来保护我的应用程序,它很有效,值得一试IMO

你所说的攻击者是什么意思?因为如果你的代码容易受到攻击(例如,你是否在客户端存储密码),那么混淆JS是没有帮助的。你想防御什么?混淆器只适用于防止代码窃取……这真的有必要吗?IMO缩小是混淆JS代码的唯一有效用途。正如你自己所说,你无法避免脱臭。如果您试图阻止人们“窃取”您的源代码,那么请停止为web开发,或者使用服务器上的所有重要逻辑使您的客户端站点保持静态。