这是一个通用的问题
我在一些被混淆的网站上看到了javascript
当您尝试使用标准的去模糊处理器(deobfuscatejavascript.com、jsnice.org和jsbeautifier.org)去模糊代码时,代码很难去模糊化。
我知道要避免混淆几乎是不可能的。我想让攻击者很难把它弄清楚
请给我一些办法来解决这个问题
我应该写我自己的混淆器,然后用另一个在线混淆器混淆输出。这能打败它吗?
提前感谢
P.S:我尝试过google闭包编译器、uglifyjs、js-obfuscator和其他一些工具。它们中没有一种(单独使用或组合使用)能够击败混淆器。
发布于 2016-05-13 19:53:33
您列出的公共去模糊库使用的只是一个简单的eval()
,后面跟着一个美化符来消除代码的模糊。这可能需要几分。它的工作是因为大多数混淆器做他们的事情,并在结束添加一个函数到去模糊它足够让引擎运行它。在大多数情况下,它是一种简单的字符替换(一种Cesar密码),而eval()
就足以获得一些代码,在此之后由一个美容师或多或少地使其可读性更强。
要回答您的问题:您可以使用某种“加密”,使用代码在第一轮去混淆后从服务器获得的密码,并使用浏览器完成的相对路径,而不是完整的路径,从而使其变得更难(“更难”,意思是将其转化为去模糊处理)。这需要人工干预。以一种复杂而不明显的方式构建这条道路,你对普通的脚本孩子有威慑作用。
一般情况下:您需要一些东西来消除脚本本身中不存在的脚本。
但要小心:它只会回答你的问题,也就是说,简单的c&p就不可能把它变成而不是更多的。请看艾拉对更复杂的问题的回答。
请注意混淆代码的原因:
现在,如果人们看到你模糊的代码,他们会怎么想?你的投资者坚持要给你钱来写那个大家都那么喜欢的小浏览器游戏?
发布于 2016-05-13 19:33:54
混淆可以在复杂的几个层次上完成。
大多数可用的混淆器都是乱七八糟的(收缩?)标识符并删除空白。预先打印代码可以恢复良好的缩进;汗水和大量猜测可以通过足够的努力恢复合理的标识符名。所以人们说这是一种微弱的混淆。他们是对的,有时就足够了。加密不是混淆;它是微不足道的颠倒。
但人们可以用更复杂的方式混淆代码。特别是,我们可以利用图灵寺,以及在实践中难以/不可能对模糊程序进行推理的事实。我们可以通过置乱控制流和注入不透明的控制流控制谓词来做到这一点,这些控制流谓词很难推理;您可以通过多种方式构造这样的谓词。例如,包括基于构造人工指针-别名(或数组下标,这是等价的)问题的"*p==*q“形式的p和q是指针计算的指针复杂的图表数据结构。
这样模糊的程序更难逆转工程,因为它们建立在那些难以解决的问题上。
这是一个关于扰码控制流程的实例。这是控制流置乱(包括不透明谓词)综述。
OP想要的是一个在这个更复杂的层次上运行的混淆器。我相信,这些都适用于Java和C#,因为构建程序分析器来确定(和利用)控制流是相对容易的,只要您拥有程序的字节代码表示,而不仅仅是它的文本。其他语言则没有这样的语言。可能只是时间问题。
(完全披露:我的公司制造了更简单的混淆器。我们偶尔会想到那些更时髦的人,但经常会被闪亮的物体分心)。
发布于 2016-05-13 18:36:00
JavaScript是由浏览器从明文解释的。如果浏览器能做到这一点,你也可以。这是野兽的本性。还有很多其他编程语言允许您在发行之前编译/黑匣子。如果您一心想保护您的知识产权,请编译您的JavaScript使用的服务器端数据提供程序。
https://stackoverflow.com/questions/37216841
复制相似问题