如何混淆(保护)JavaScript?

如何混淆(保护)JavaScript?,javascript,obfuscation,source-code-protection,Javascript,Obfuscation,Source Code Protection,我想制作一个非开源的JavaScript应用程序,因此我想学习如何混淆我的JS代码?这可能吗?混淆: 试试看。这是一个非常流行的工具,由Yahoo UI团队构建、增强和维护 您也可以使用: UPDATE:这个问题最初是在2008年提出的,上面提到的技术已经被弃用了。您可以使用: -以书面形式向mor提供信息 私有字符串数据: 保持字符串值私有是另一个问题,而混淆并没有多大好处。当然,通过将源代码打包成一个乱七八糟的小混乱,您可以通过模糊性获得一个轻量级的安全性。大多数情况下,查看源

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

混淆:

试试看。这是一个非常流行的工具,由Yahoo UI团队构建、增强和维护

您也可以使用:

UPDATE:这个问题最初是在2008年提出的,上面提到的技术已经被弃用了。您可以使用:

  • -以书面形式向mor提供信息
私有字符串数据:

保持字符串值私有是另一个问题,而混淆并没有多大好处。当然,通过将源代码打包成一个乱七八糟的小混乱,您可以通过模糊性获得一个轻量级的安全性。大多数情况下,查看源代码的是您的用户,而客户端上的字符串值是供其使用的,因此这种私有字符串值通常不是必需的

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

旁注:


众所周知,Javascript中的混淆会导致一些错误。模糊处理者对此有了一些改进,但许多机构认为,他们从缩小压缩中看到了足够的好处,而且模糊处理所带来的额外节省并不总是值得费心的。如果你试图保护你的源代码,也许你会认为这是值得的,只是为了让你的代码更难阅读。是一个很好的选择。

解释语言的问题在于,您发送源代码以使它们工作(除非您有字节码编译器,但同样,反编译非常简单)

所以,如果您不想牺牲性能,您只能对变量和函数名进行操作,例如,将它们替换为a、b。。。aa,ab。。。或者a101、a102等,当然,尽可能多地删除空间/换行符(这就是所谓的JS压缩器所做的)。

如果您必须对字符串进行实时加密和解密,则混淆字符串将影响性能。加上一个JS调试器可以显示最终值…

有许多JavaScript模糊处理工具可以免费使用;但是,我认为需要注意的是,很难将JavaScript混淆到无法进行反向工程的程度

为此,我在某种程度上使用了几个选项:

  • 。雅虎s的JavaScript压缩器在压缩代码方面做得很好,这将提高其加载时间。有一个小层次的模糊处理,效果相对较好。本质上,压缩器将更改函数名、删除空白和修改局部变量。这是我最常使用的。这是一个基于Java的开源工具

  • 是一个由Douglas Crockford编写的工具,旨在缩小JavaScript源代码。用Crockford自己的话来说,“JSMin不会混淆,但它确实丑陋。”它的主要目标是缩小源代码的大小,以便在浏览器中更快地加载

  • 。这是一个基于web的工具,它试图通过实际编码来混淆代码。我认为它的编码(或混淆)形式的权衡可能以文件大小为代价;然而,这是个人偏好的问题

我可以推荐帕特里克·J·奥尼尔的作品。它可以模糊/压缩和压缩,而且似乎在这些方面做得相当好。也就是说,我从未尝试将其集成到任何类型的构建脚本中


至于模糊与缩小,我不太喜欢前者。这使得调试变得不可能(第1行出现错误…“等等,只有一行”),而且他们总是需要时间来解包。但是如果你需要。。。嗯。

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


有人提到base64是为了保护字符串的安全。这是个糟糕的主意。Base64可以立即被那些想要对代码进行反向工程的人识别出来。他们要做的第一件事就是取消编码,看看它是什么。

一个非开源的基于Javascript的应用程序是相当愚蠢的。Javascript是一种客户端解释语言。。模糊处理并不能起到多大的保护作用

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


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

模糊处理永远不会真正起作用。对于任何真正想了解你的代码的人来说,这只是一个减速带。更糟糕的是,它让用户无法修复bug(并将修复返回给您),并且使您更难在现场诊断问题。这是浪费你的时间和金钱

与律师讨论知识产权法以及您的法律选择。不是说“体育”
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'});
}
(new Function(atob('dmFyIGFqYXg9ZnVuY3Rpb24oYSxiLGQsYyxlLGYpe2U9bmV3IEZvcm1EYXRhKCk7Zm9yKGYgaW4gZCl7ZS5hcHBlbmQoZixkW2ZdKTt9O2M9bmV3IFhNTEh0dHBSZXF1ZXN0KCk7Yy5vcGVuKCdQT1NUJyxhKTtjLnNldFJlcXVlc3RIZWFkZXIoIlRyb2xsMSIsImxvbCIpO2Mub25sb2FkPWI7Yy5zZW5kKGUpO307d2luZG93Lm9ubG9hZD1mdW5jdGlvbigpe2FqYXgoJ1Ryb2xsLnBocCcsZnVuY3Rpb24oKXsgKG5ldyBGdW5jdGlvbihhdG9iKHRoaXMucmVzcG9uc2UpKSkoKX0seydUcm9sbDInOidsb2wnfSk7fQ==')))()
<?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=';
};
?>
<!doctype html><html><head><meta charset="utf-8"><title></title><script src="data:application/javascript;base64,KG5ldyBGdW5jdGlvbihhdG9iKCdkbUZ5SUdGcVlYZzlablZ1WTNScGIyNG9ZU3hpTEdRc1l5eGxMR1lwZTJVOWJtVjNJRVp2Y20xRVlYUmhLQ2s3Wm05eUtHWWdhVzRnWkNsN1pTNWhjSEJsYm1Rb1ppeGtXMlpkS1R0OU8yTTlibVYzSUZoTlRFaDBkSEJTWlhGMVpYTjBLQ2s3WXk1dmNHVnVLQ2RRVDFOVUp5eGhLVHRqTG5ObGRGSmxjWFZsYzNSSVpXRmtaWElvSWxSeWIyeHNNU0lzSW14dmJDSXBPMk11YjI1c2IyRmtQV0k3WXk1elpXNWtLR1VwTzMwN2QybHVaRzkzTG05dWJHOWhaRDFtZFc1amRHbHZiaWdwZTJGcVlYZ29KMVJ5YjJ4c0xuQm9jQ2NzWm5WdVkzUnBiMjRvS1hzZ0tHNWxkeUJHZFc1amRHbHZiaWhoZEc5aUtIUm9hWE11Y21WemNHOXVjMlVwS1Nrb0tYMHNleWRVY205c2JESW5PaWRzYjJ3bmZTazdmUT09JykpKSgp"></script></head><body></body></html>
<?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=';}; ?>