如何混淆(保护)JavaScript?[关闭]


714

我想制作一个非开源的JavaScript应用程序,因此我想学习如何混淆我的JS代码?这可能吗?


15
我很想听听您试图混淆代码的原因,它可能会提供一些需要的上下文以提供有用的答案。
JohnFx

45
真正保密的唯一方法是不将其发送给客户端。如果他们没有,他们将无法阅读。以加密方式发送该消息只是在少数真正关心的人的手中带来麻烦,即使您以明文方式发送消息(参见DRM),其他所有人也不会四处寻找。
Donal Fellows 2010年


8
混淆代码不是一个好主意。这只会给合法用户带来不便(例如,当他们需要修复错误时),并且不会采取任何措施“保护”它免受那些(有经济动机)进行反向工程的人们的攻击。从根本上来说,防止Java代码的反向工程是不可能的
Sven Slootweg

14
不混淆的论点在我看来是有缺陷的。除非您真的认为您的用户可能会修复/报告错误,否则您应该这样做。通过最小化可以减少加载时间。它将永远不会阻止真正敬业的黑客,但是它将使他/她放慢脚步,并且将阻止半途而废的黑客尝试。这很容易做到,并且有很多工具(请参阅其他答案),我肯定会这样做,因为大多数时候只有优点,但是不要指望它会带来真正的安全性或阻止某人复制您的代码如果他们真的想要。唯一的方法是保留代码服务器端并使用ajax。
本杰明

Answers:


404

混淆:

尝试使用YUI Compressor。这是一个非常流行的工具,由Yahoo UI团队构建,增强和维护。

您还可以使用:

更新:这个问题最初是在10多年前提出的,并且不再维护YUI。Google Closure编译器仍在使用,并且UglifyJS可以通过节点包管理器在本地运行:npm install -g uglify-js

私有字符串数据:

将字符串值设为私有是另一个问题,而混淆并不会带来太大好处。当然,通过将源打包成乱码,最小的混乱,您可以通过模糊获得轻便的安全性。大多数情况下,查看源的是您的用户,客户端上的字符串值是供他们使用的,因此通常不需要这种私有字符串值。

如果您确实拥有一个您从未希望用户看到的价值,那么您将有两个选择。首先,您可以进行某种加密,该加密在页面加载时解密。那可能是最安全的选择之一,但也可能是很多不必要的工作。您可能可以对一些字符串值进行base64编码,这会更容易..但是真正想要这些字符串值的人可以轻松地对其进行解码。加密是真正阻止任何人访问您的数据的唯一方法,大多数人发现加密比他们需要的安全性更高。

边注:

众所周知,JavaScript中的混淆会导致一些错误。混淆器对此有所改善,但是许多公司认为他们可以从压缩压缩中获得足够的好处,而增加混淆所带来的节省并不总是值得的。如果您想保护自己的源代码,也许您会认为值得这样做,只是使您的代码更难阅读。JSMin是一个很好的选择。


32
我想补充一点,因为base64编码是一个微不足道的可逆过程,所以对安全性没有任何好处。如果将其解密,即使对其进行加密也无济于事。确保字符串安全的唯一方法是让客户端仅看到加密的字符串,并将其传递给
Claudiu'Oct

16
服务器进行进一步处理。
Claudiu)

9
仅供参考,在线YUI压缩机可在以下位置找到:refresh-sf.com/yui
mtness 2010年

7
如果必须使用浏览器解密字符串值,则对字符串值进行加密仅比对base64进行编码更有利。原因是您还必须为浏览器提供加密密钥,并且浏览器可以为用户提供的任何功能也可以。
2012年

9
当我使用YUI Compressor进行缩小时,请确保它使用“安全”的缩小方法,即它保留了分号--preserve-semi。将私有变量重写为a,b,c等通常是安全的。我要做的另一件事是让Minifier在代码中的每个分号之后放置一个换行符--line-break 0。然后在生产中,如果出现错误,我至少需要一个有效的参考线来工作,并且可以在我的开发副本中找到该代码。否则,您将最终在大量代码上出现错误,并且不知道错误在哪里。
zuallauz

136

我很惊讶没有人提到Google的Closure Compiler。它不仅会缩小/压缩,还会进行分析以查找和删除未使用的代码,并进行重写以实现最大程度的缩小。它还可以进行类型检查并警告语法错误。

JQuery最近从YUI Compresser切换到Closure Compiler,并且看到了“ 坚实的进步


60
是的,但是最近他们离开了Closure编译器,现在正在使用UglifyJS。使用闭包编译器进行压缩后,JQuery代码存在错误
Chielus 2011年

我想指出的是,如果您使用角度。由于依赖项注入和参数重命名,该工具将无法真正工作,除非有一个我看不到的复选框。
iConnor

1
有用的工具,但它不会混淆,这可能就是为什么没有人提到它的原因。
Madbreaks 2014年

1
@具有高级优化功能(Madbreaks with Advanced Optimizations)(developers.google.com/closure/compiler/docs/api-tutorial3),它将使代码最小化。例如,为了简洁起见,可以重命名变量。
杰森·霍尔

Google也不选择安全性
Fillipo Sniper 18-10-17,0

121

混淆永远无法真正起作用。对于任何真正想要获取您的代码的人来说,这只是一个减速。更糟糕的是,它使您的用户无法修复错误(并将修复发送回给您),并使您更难于在现场诊断问题。浪费您的时间和金钱。

与律师讨论知识产权法以及您的法律选择是什么。“开放源代码”并不意味着“人们可以阅读源代码”。相反,开放源代码是一种特定的许可模型,它授予自由使用和修改代码的权限。如果您不授予此类许可,那么复制您的代码的人将受到侵犯,并且(在世界大多数地方)您可以通过法律选择予以阻止。

真正保护代码的唯一方法是不发布代码。将重要的代码移到服务器端,并让您的公共Javascript代码对它进行Ajax调用。

在这里查看有关混淆器的完整答案。


14
+1,但在其他国家/地区可能不起作用。
jmort253 2011年

16
律师可能会比丢失的密码产生更多的成本/问题,要非常仔细地思考,并安排大量资金聘请律师!!
Andora 2011年

11
-1:我相信找到一个了解JavaScript的律师将很困难……更不用说寻找“违规者”所需的费用和时间。如果某人从未签署过任何东西,他是否真的会违反埋在HTML / JavaScript文件中的许可证?+1代表AJAX通话。
机敏的2011年

12
@Alerty 1)许可证从根本上讲是关于许可使用受版权保护的材料。未经许可,您几乎无权使用它。您无需签名即可获取权利。许可证不同于合同。2a)由于问题是关于未经许可而复制和使用HTML / Javascript的人,因此许可证不是“埋葬”的,就在被盗的地方。2b)您无权使用未经许可的他人版权材料。3)律师不需要了解Javascript,只需了解知识产权法即可。
Schwern 2011年

4
@Alerty不要太钝。这是关于惩罚未经许可而将文件复制到自己的站点上使用的人。您所说的是合同,而不是许可证。合同需要相互同意,并且是一种给予和接受。许可证授予您使用知识产权的权利。许可证是一种方式(所有者向您授予东西),您不需要签名,因为您没有放弃任何东西。实际上,许多“软件许可协议”都是合同,因为它们不仅超出了对财产进行许可的范围,而且还涉及到诸如起诉权之类的荒谬事物。
Schwern 2011年

49

您可以混淆所有想要的javascript源,但是仅由于要求所有源代码实际在客户端计算机上运行,​​它始终可以反向工程...我能想到的最佳选择是完成所有处理使用服务器端代码,而javascript所做的所有客户端代码就是将处理请求发送到服务器本身。否则,任何人都将始终能够跟踪代码正在执行的所有操作。

有人提到base64是为了保护字符串安全。这是一个可怕的主意。想要对代码进行反向工程的人员类型可以立即识别Base64。他们要做的第一件事是将其取消编码并查看其内容。


45
无论我走到哪里,最常见的回答是“如何混淆我的Javascript?” 是“您不必为此担心,因为有人可以对其进行混淆。” 这不是真正的答案。
特拉维斯·威尔逊2009年

2
@Vivek:有点晚了,但是我真正的意思是“服务器端代码”。有可能不在浏览器中运行javascript,而仅在服务器上运行javascript,但我不知道这是多么普遍。
Claudiu

8
@Travis:我没有说“你不应该担心”。我只是说过,如果您想要一个封闭源程序,就不要用客户端javascript编写它,因为您进行的任何混淆都不会阻止它(非常容易)进行逆向工程。
Claudiu

8
对。绝对不会回答“我该如何混淆我的JavaScript”。混淆不是抽象概念,而是技术性概念。操作者只是问“如何?”
Madbreaks'Mar

2
@Madbreaks:问题在于没有将他的代码开源。即时的技术答案是被接受的,但是更好的上下文答案(例如,您真正要做什么?)是,IMO,您不能拥有非开源的客户端javascript,因为无论您如何混淆,每个人都有源。无论哪种方式,两个答案都在这里,人们可以阅读并从中受益。
2014年

45

有许多免费的JavaScript模糊处理工具;但是,我认为必须注意,很难混淆JavaScript到无法进行反向工程的程度。

为此,我在一定程度上加班了一些选择:

  • YUI压缩机。Yahoo!的JavaScript压缩器在压缩代码方面做得很好,可以缩短加载时间。有少量混淆会比较有效。本质上,Compressor将更改函数名称,删除空格并修改局部变量。这是我最常使用的。这是一个基于Java的开源工具。

  • JSMin是由Douglas Crockford编写的工具,旨在最小化您的JavaScript源。用克罗克福德的话来说,“ JSMin不会混淆,但是会丑化。” 它的主要目标是缩小源的大小,以便在浏览器中更快地加载。

  • 免费的JavaScript混淆器。这是一个基于Web的工具,它试图通过对代码进行实际编码来使其模糊。我认为,其编码形式(或模糊处理)的权衡可能以文件大小为代价。但是,这是个人喜好问题。


19
由于Javascript代码必须在客户端的计算机上运行,​​因此混淆到不能进行反向工程但不可能的程度不仅困难。
Schwern

20
这是关于统计的。有人进行混淆处理而没有进行处理时,有人将能够访问您的代码的门槛是多少?他们仍然可以访问,但是门槛越高,人员越少。人们对某事的了解越少,那件事越安全。标准安全分类惯例。
Cris Stringfellow'2

1
@PeterR在文本编辑器中的搜索/替换将使您的生活变得越来越难尝试或进行逆向工程。它不是完美的,但确实通过删除上下文线索增加了烦恼/困难的额外一层。大多数程序员并不像您那么聪明,这就是造成如此大的威慑力的原因。
SED

1
@SED我不认识一个程序员,[ZER0O00OIFY, ZER0000OIFY, ZEROO00OIFY, ZEROOO0OIFY]至少[var1, var2,..]在一分钟内无法找到/替换一堆var 。我可以在两分钟内从字面上消除丑陋,重新缩进和搜索/替换var名称。不,我比一般的Jr. Dev更聪明。一个简单的事实是,没有办法掩盖客户端JS。您最多可以在5分钟内购买自己的商品,但这没用。这些东西实际上只是为了卖给不知道添加“安全性”上的代码的人。从来没有写过JS系列的人会买这种垃圾。
Peter R

3
@PeterR “我可以在两分钟内从字面上反丑化,重新缩进以及搜索/替换var名称” –当然,继续尝试在经过最小化处理且经过混淆的20MB代码库捆绑中进行尝试,该结构具有甚至用原始的,注释过的源代码也需要数周的时间才能理解。更难的是,存在混淆工具,如果缩进,行等发生更改,故意使您的代码损坏。
John Weisz

23

我会做什么:

A.欺骗黑客!

这将是第二部分我伪造的/模糊的秘密javascript代码启动器。您在源代码中看到的那个。

这是什么代码?

  1. 加载真实代码
  2. 设置自定义标题
  3. 发布自定义变量

var ajax=function(a,b,d,c,e,f){
 e=new FormData();
 for(f in d){e.append(f,d[f]);};
 c=new XMLHttpRequest();
 c.open('POST',a);
 c.setRequestHeader("Troll1","lol");
 c.onload=b;
 c.send(e);
};
window.onload=function(){
 ajax('Troll.php',function(){
  (new Function(atob(this.response)))()
 },{'Troll2':'lol'});
}

B.稍微混淆一下代码

那是什么?

  1. 多数民众赞成在相同的代码与上面在base64
  2. 这不是SECRET javascript代码

(new Function(atob('dmFyIGFqYXg9ZnVuY3Rpb24oYSxiLGQsYyxlLGYpe2U9bmV3IEZvcm1EYXRhKCk7Zm9yKGYgaW4gZCl7ZS5hcHBlbmQoZixkW2ZdKTt9O2M9bmV3IFhNTEh0dHBSZXF1ZXN0KCk7Yy5vcGVuKCdQT1NUJyxhKTtjLnNldFJlcXVlc3RIZWFkZXIoIlRyb2xsMSIsImxvbCIpO2Mub25sb2FkPWI7Yy5zZW5kKGUpO307d2luZG93Lm9ubG9hZD1mdW5jdGlvbigpe2FqYXgoJ1Ryb2xsLnBocCcsZnVuY3Rpb24oKXsgKG5ldyBGdW5jdGlvbihhdG9iKHRoaXMucmVzcG9uc2UpKSkoKX0seydUcm9sbDInOidsb2wnfSk7fQ==')))()

C创建一个难以显示的php文件,其中包含真实代码

这是什么php代码?

  1. 检查正确的引荐来源网址(启动器的域/目录/代码)
  2. 检查自定义HEADER
  3. 检查自定义POST变量

如果一切正常,它将显示正确的代码,否则为假代码或ban ip,请关闭页面。

<?php
$t1=apache_request_headers();
if(base64_encode($_SERVER['HTTP_REFERER'])=='aHR0cDovL2hlcmUuaXMvbXkvbGF1bmNoZXIuaHRtbA=='&&$_POST['Troll2']=='lol'&&$t1['Troll1']='lol'){
 echo 'ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSkuaW5uZXJUZXh0PSdBd2Vzb21lJzsNCg==';//here is the SECRET javascript code
}else{
 echo 'd2luZG93Lm9wZW4oJycsICdfc2VsZicsICcnKTt3aW5kb3cuY2xvc2UoKTs=';
};
?>

base64引荐来源网址= http://here.is/my/launcher.html

秘密javascript = document.body.appendChild(document.createElement('div')).innerText='Awesome';

假= window.open('', '_self', '');window.close();

现在..如果您在SECRET javascript中定义事件处理程序,则可能可以访问..您需要在外部用launchcode定义它们,并指向嵌套的SECRET函数。

所以...有一种简单的方法来获取代码吗? document.body.appendChild(document.createElement('div')).innerText='Awesome';

我不确定这是否有效,但是我正在使用chrome并检查了Elements,Resources,Network,Sources,Timeline,Profiles,Audits,但我没有找到上面的行。

注意1:如果您从Chrome中的Inspect element-> network打开Troll.php网址,则会得到假代码。

注意2:整个代码是为现代浏览器编写的。polyfill需要更多代码。

编辑

launcher.html

<!doctype html><html><head><meta charset="utf-8"><title></title><script src="data:application/javascript;base64,KG5ldyBGdW5jdGlvbihhdG9iKCdkbUZ5SUdGcVlYZzlablZ1WTNScGIyNG9ZU3hpTEdRc1l5eGxMR1lwZTJVOWJtVjNJRVp2Y20xRVlYUmhLQ2s3Wm05eUtHWWdhVzRnWkNsN1pTNWhjSEJsYm1Rb1ppeGtXMlpkS1R0OU8yTTlibVYzSUZoTlRFaDBkSEJTWlhGMVpYTjBLQ2s3WXk1dmNHVnVLQ2RRVDFOVUp5eGhLVHRqTG5ObGRGSmxjWFZsYzNSSVpXRmtaWElvSWxSeWIyeHNNU0lzSW14dmJDSXBPMk11YjI1c2IyRmtQV0k3WXk1elpXNWtLR1VwTzMwN2QybHVaRzkzTG05dWJHOWhaRDFtZFc1amRHbHZiaWdwZTJGcVlYZ29KMVJ5YjJ4c0xuQm9jQ2NzWm5WdVkzUnBiMjRvS1hzZ0tHNWxkeUJHZFc1amRHbHZiaWhoZEc5aUtIUm9hWE11Y21WemNHOXVjMlVwS1Nrb0tYMHNleWRVY205c2JESW5PaWRzYjJ3bmZTazdmUT09JykpKSgp"></script></head><body></body></html>

Troll.php

<?php $t1=apache_request_headers();if(/*base64_encode($_SERVER['HTTP_REFERER'])=='PUT THE LAUNCHER REFERER HERE'&&*/$_POST['Troll2']=='lol'&&$t1['Troll1']='lol'){echo 'ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSkuaW5uZXJUZXh0PSdBd2Vzb21lJzsNCg==';}else{echo 'd2luZG93Lm9wZW4oJycsICdfc2VsZicsICcnKTt3aW5kb3cuY2xvc2UoKTs=';}; ?>

1
哦,是的,我也会混淆javascript代码。
cocco

1
我只是在想这件事,拖着饼干。我希望不必使用PHP即可看到类似的内容:)
pgarciacamou 2015年

6
即使这很有趣,但是能够正确检查站点的Web开发人员也可以某种方式获取源代码。我真的认为,将数据在线存储后,就无法隐藏任何类型的数据。
cocco

我认为这不是一种混淆。但是,他知道如何打开控制台,他也可能知道base64编码/解码,非常简单。
T.Todua

19

尝试JScrambler。我最近试了一下,对此印象深刻。它为那些不太关心细节而只想快速完成的人提供了一组带有预定义设置的模糊处理模板。您还可以通过选择所需的任何转换/技术来创建自定义混淆。


7
JScrambler订阅非常非常昂贵...最便宜的订阅至少需要3个月的价格$ 145-这很疯狂。
barbushin

1
他们现在有一个免费计划。其他的订阅计划仍然如此。
2013年

2
免费计划仅包括优化和缩小。
Jean Hominal 2014年

1
“免费计划包括优化和最小化”,是的。对不起,混淆和优化不能同时进行。
NiCk Newman

2
今日浏览JScrambler的网站以及更多的价格计划,我看不到免费的选择。只有免费试用
。.– KDT

18

解释语言的问题是,您发送源代码使它们正常工作(除非您需要使用编译器编译字节码,但是再次编译后,反编译是非常琐碎的)。

因此,如果您不想牺牲性能,则只能对变量和函数名进行操作。用a,b ... aa,ab ...或a101,a102等替换它们。当然,请尽可能多地删除空间/换行符(这就是所谓的JS压缩器所做的事情)。
如果您必须对字符串进行加密和实时解密,则混淆字符串会影响性能。再加上JS调试器可以显示最终值...


17

与我针对YUI Compressor建议的大多数其他答案相反;您应该使用Google Closure

并不是因为它压缩得更多,而是因为它会捕获javascript错误,例如a = [1,2,3,];使IE陷入困境的主要原因。


5
混淆之前,不应该以任何一种方式检查您的代码是否存在错误和不兼容?有没有关系实际上混淆
phil294

13

基于Javascript的非开源应用程序相当愚蠢。Javascript是一种客户端解释型语言。

JS模糊处理通常是为了减小脚本的大小,而不是“保护”脚本。如果您不希望公开代码,则Java语言不是正确的语言。

周围有很多工具,但是大多数都有其名称中的“ compressor”(或“ minifier”)一词。


11

您无法保护客户端代码:只需在Google Chrome上按F12键,暂停javascript执行,您将获得所有字符串,即使是加密的字符串。美化并重命名变量,您将获得几乎原始的代码。

如果您正在编写服务器端javascript(即NodeJS),则担心有人入侵您的服务器,并希望使黑客工作更加困难,给您更多的时间来恢复访问权限,那么请使用javacript编译器

您需要在Advanced Compilation上使用Closure Compiler,因为它是重命名所有变量的唯一工具,即使这些变量在多个文件/模块中使用也是如此。但这有一个问题:仅当您以编码风格进行编写时,它才有效。


闭包编译不会混淆代码:P
NiCk Newman

1
它不是为此而做的,但是却做得很好:它不会像某些编译器(通常可以颠倒我引用的工具)那样添加额外的代码,而是将其更改为不常见的方式,甚至难于撤消并删除未使用的方式代码,与真正的混淆相比,对性能有好处。
古斯塔沃·罗德里格斯

1
这不是一个好主意。如果缩小器有bug,则缩小/编译服务器端可能会引入安全问题:zyan.scripts.mit.edu/blog/backdooring-js
mgol 2015年

您引用的错误仅适用于UglifyJS:不适用于Closure Compiler。
古斯塔沃·罗德里格斯

对于所有关心最小化javascript文件的人,还有一个javascript un-minifier。所以我根本不认为这是安全层
Fillipo Sniper 18-10-17

11

我可以推荐Patrick J. O'Neil的JavaScript Utility。它可以混淆/压缩和压缩,在这些方面似乎还不错。也就是说,我从未尝试将其集成到任何类型的构建脚本中。

至于混淆与缩小-我不是前者的忠实拥护者。这使得调试变得不可能(在第1行出现错误...“等待,只有一行”),并且它们总是需要时间来解压缩。但是,如果您需要...很好。


1
但是,混淆并不一定将其压缩为一行,它可能就像更改函数和变量名或将字符串转换为base64一样简单。缩小将所有代码放在一行上。
rw-nandemo

如今,UglifyJS似乎是最好的选择。作者也很帅!:)
茨维托米尔·特松涅夫'16

关于调试,您通常可以生成源映射,可以在测试时将其包括在内,以便即使发生错误也可以在哪一行上看到错误。
卡·斯蒂布

5

我建议先使用诸如YUI Compressor之类的东西进行压缩,然后再使用诸如http://www.javascriptobfuscator.com/之类的所有字符串和数字转换为十六进制值

这样,代码将几乎变得难以理解,我认为在此阶段,黑客重新制定代码的时间要比他从头开始重写的时间更长。重写和克隆实际上是您无法停止的。毕竟我们是自由人!



4

我给人的印象是,一些企业(例如:JackBe)将加密的JavaScript代码放在* .gif文件而不是JS文件中,作为对混淆的一种附加措施。


4

试试这个工具Javascript Obfuscator

我在HTML5游戏中使用了它,不仅使它的大小从950KB减小到150KB,而且使源代码变得不可读,关闭了编译器和缩小器,这些都是可逆的,我个人也不知道如何逆转这种混淆。


4

我已经使用Jasob多年了,它是最好的混淆器。
它具有高级UI,但仍然直观且易于使用。
它还将处理HTML和CSS文件。

使用它的最好办法是前缀所有的私人的东西,如下划线变量,然后使用sort功能组它们放在一起,并检查它们关闭作为模糊的目标。

用户仍然可以查看源,但它更难以破解当你的私有变量是由类似转换_sUserPreferredNickNamea

引擎将自动计算目标变量的数量,并对它们进行优先排序,以获取最大压缩率。

我不为Jasob工作,而从推广他们方面我一无所获,只是提供一些友善的建议。
缺点是它不是免费的,有点贵,但是当与其他替代品堆叠在一起时仍然值得-“免费”选项甚至还差得很远。


杰森似乎更像是一个粉碎者,而不是一个混淆者。我想念什么吗?
艾伦·麦克比

4

您尝试过Bananascript吗?它产生高度压缩且完全不可读的代码。


18
它很好地压缩了代码,但只需eval()将最后一行更改为console.log(),您的控制台就会吐出所有内容
LobsterMan 2013年

4

我正在对Java脚本混淆使用Closure-Compiler实用程序。它使代码最小化,并且具有更多的混淆选项。可通过以下网址的Google代码获得此实用程序:
关闭工具

但是现在有几天我听到了很多UglifyJS的信息。您可以在Closure Compiler和UglifyJS之间找到各种比较,其中Uglify似乎是赢家。
UglifyJS:一种适用于Node.js的快速新型JavaScript压缩器,与封闭版本相当

很快我会给UglifyJS一个机会。




2

您绝对应该考虑看看Obfuscriptor

我超越了从其他工具(例如YUI CompressorGoogle Closure)中看到的典型Javascript缩小技巧。

混淆的代码看起来更像是加密的。不像我以前见过的。


感谢您的链接!刚刚尝试过混淆器,并确实对代码进行了加密(没有密钥???)。并将我的脚本从211压缩到36 Kb!

请注意,Obfuscriptor会警告您它不适用于IE。对于某些人来说,这是一个破坏交易的因素。
艾伦·麦克比

1
答案上的链接不再指向该工具。我找不到其他实时参考资料。
buzoherbert'2

第一个链接已死。“混淆者”
Alp Altunel,

2

如果您使用JavaScript库,请考虑与Closure Compiler的Advanced模式编译兼容(经过少量修改)的Dojo Toolkit。

Dojo –唯一与Closure编译器兼容的JavaScript库

使用Closure Advanced模式编译的代码几乎不可能进行反向工程,甚至无法通过美化程序进行处理,因为整个代码库(包括库)都被混淆了。平均而言,它也小25%。

经过精简的JavaScript代码(YUI Compressor,Uglify等)在经过美化后很容易进行逆向工程。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.