我想制作一个不是开源的javascript应用程序,因此我想学习如何模糊我的JS代码?这有可能吗?
- 我很想知道您试图混淆代码的原因,它可能会提供一些必要的上下文来给出一个有用的答案。
- 真正保守秘密的唯一方法就是不要把它发送给客户。如果他们没有,他们就看不懂。把它加密发送仅仅是在少数真正关心它的人的手上找麻烦,而其他人即使你把它发送出去,也不会到处闲逛(c.f.drm)。
- 这个工具真的很好。你可以在网上做一个模糊的链接。
- 您可以在网上试用它,并具有压缩CSS和JS的功能。
- 你已经有太多答案了,但我想留下一个可能有用的评论。如果您使用的是ASP.NET,我记得很久以前使用它时,有一个编译选项。我不确定目前是否还有这个选项,但有一种方法…
- 或utf-8.jp/public/aaencode.html
- 这里还有另一个解决方案:stackoverflow.com/questions/2060984/…
- @Jasonc哈哈,我以前没见过这个,但我见过很棒的utf-8.jp/public/jjencode.html
- 混淆代码不是个好主意。它只会给合法用户带来不便(例如,当他们需要修复一个bug时),并且不做任何"保护"它不受那些有(财务)动机对其进行反向工程的人的影响。根本上不可能阻止对JavaScript代码进行反向工程。
- 广告上说,你的代码在复制过程中永远不会是安全的。它可以生成"最丑"的代码,但如果有人花费足够的时间,他们可以解码您的代码。
- 我觉得不混淆的论点似乎有缺陷。除非您真的认为您的用户可能修复/报告错误,否则您应该这样做。它可以通过缩小来减少加载时间。它永远不会阻止一个真正专注的黑客,但它会减慢他/她速度,并且会阻止半途而废的黑客尝试。这是很容易做到的,而且有很多工具(见其他答案),我想说当然要做到,因为大多数时候只有优势,但不要期望它带来真正的安全性,或者阻止某人复制您的代码,如果他们真的想要的话。唯一的方法是保持代码服务器端并使用Ajax。
- 最好的javascript模糊器就是这样工作的。它甚至没有被JS美化程序解码。;)
- 这里提到的大多数模糊器可以通过在运行脚本之前设置window.eval = console.log.bind(console);来逆转。充其量,运行后的结果将与在原始版本上运行一个小型化器的结果相同,所以我看不到使用专用模糊器比仅使用小型化器有任何真正的优势。尤其是因为模糊的代码通常比小型化的代码更膨胀(并且加载速度更慢)。
- 总之:在选择模糊器之前,在设置var oldEval = window.eval; window.eval= function(x){console.log(x); return oldEval(x)}之后,尝试运行一个模糊的示例。然后将结果粘贴到JSBeautifer中,看看它是否仍然看起来模糊。如果没有,请选择另一个模糊器。
- 或者更简单:只需将示例粘贴到deobfusatejavascript.com。运行deobfuscator后,来自"最佳javascript模糊器"(根据@abhishekbagul)的结果与原始源完全相同,甚至包括注释!
- 这个在线模糊器使用起来非常简单,或者如果你使用node.js或者安装了node.js,你可以使用这个项目:javascript模糊器npm install --save-dev javascript-obfuscator ,它是开源的,非常好。
- 使用encode.js:encode js.devincity.com
- 我为此制定了一个解决方案:github.com/blackmiaool/delege-messup
- 对于每个模糊器,可以制作一个除油器。
- 尝试将代码移动到工作线程,并使用importscripts("yourscript.js"),它们在调试器中不太容易看到,因为它们只有在加载(进入到)时才可用,并且在默认情况下是隐藏的。
obfuscation:
YUI压缩器的尝试。这是一个非常流行的工具,内置的增强和维护,由雅虎UI团队。
你也可以使用:
私人字符串数据。
私人字符串值的效果是不同的关怀,和obfuscation才真的是非常有益的。当然,通过包装上你对garbled源混乱,缩小版的,你有一个安全的通光obscurity。大部分的时间,它的用户是谁看你的源代码和字符串值,在他们的客户端是用于私人使用,这样的排序是不是经常必要的字符串值。
如果你真的有价值,你不希望用户看到的,你会有几选项。第一,你可以将类的加密,这是decrypted在页面加载。这将可能是一个最安全的选择,但也有很多的工作,这可能是不必要的。Base64编码的字符串,你可能会和一些价值,这将是更容易的。但这些人谁真的可以很容易地解码字串值通缉他们。加密是唯一的方式访问您的数据从任何真正的预防,发现,和大多数人比,他们更需要的是安全的。
sidenote:
在其中的obfuscation JavaScript已造成一些错误。该程序的工作是获得更好的关于它的小,但他们有足够的outfits决定国有企业从中受益,这是削减和gzipping储蓄),和由obfuscation总是不值得的麻烦。如果你想保护你的源代码,也许你会决定它的价值,而只是为了你,使你难读的代码。jsmin是很好的选择。
- 我想补充一下,执行base64编码对安全性没有好处,因为它是一个微不足道的可逆过程。即使是加密,如果它是解密的客户端,也不会有帮助。确保字符串安全的唯一方法是让客户机只看到加密的字符串,并将其传递给
- 用于进一步处理的服务器。
- 仅供参考,在线yui压缩器可以在这里找到:refresh-sf.com/yui
- 如果必须由浏览器解密才能使用字符串值,那么对字符串值进行加密只比对其进行base64编码稍有好处。原因是,您还必须为浏览器提供加密密钥,浏览器也可以为用户提供任何功能。
- 当我用yui压缩器缩小时,我确保它使用"安全"的缩小方法,也就是说它保留了分号--preserve-semi。将私有变量重写为A、B、C等通常是安全的。我要做的另一件事是,在代码--line-break 0中的每个分号之后,使迷你化器放置一个换行符。然后在生产中,如果它出错,我至少有一个有效的参考行来工作,并且可以在我的开发副本中找到该代码。否则,你只会在一行代码上出错,不知道错误在哪里。
- 使用encode.js:encode js.devincity.com
- @纳什霍夫为什么?encode.js如何优于上面提到的更流行的解决方案?
我很惊讶没有人提到谷歌的闭包编译器。它不仅缩小/压缩,它还分析以查找和删除未使用的代码,并重写以实现最大的缩小。它还可以进行类型检查,并对语法错误发出警告。
jquery最近从yui compresser切换到closure compiler,并看到了"实质性的改进"
- 是的,但是最近他们离开了闭包编译器,现在正在使用uglifyjs。jquery代码在用闭包编译器压缩后有问题
- 我要注意的是,如果你的工作角度。由于依赖项注入和参数重命名,此工具实际上无法工作,除非我看不到复选框。
- 有用的工具,但它不做混淆,这可能是为什么没有其他人提到它。
- @madbreaks通过高级优化(developers.google.com/closure/compiler/docs/api-tutorial3)将代码缩小到模糊的程度。例如,可以为简洁而重命名变量。
- 谷歌也不是安全的选择
模糊永远不会真正起作用。对于任何真正想了解你的代码的人来说,这只是一个减速带。更糟糕的是,它使您的用户无法修复错误(并将修复结果发送给您),使您更难在现场诊断问题。这是浪费你的时间和金钱。
与律师讨论知识产权法以及您的法律选择。""开放源码"并不意味着"人们可以阅读源码"。相反,开放源码是一种特殊的许可模式,它授予自由使用和修改代码的权限。如果您不授予这样的许可证,那么复制您的代码的人就违反了法律,而且(在大多数情况下)您有合法的选择来阻止他们。
唯一能真正保护你的代码的方法就是不发布它。移动服务器端的重要代码,让您的公共JavaScript代码对其进行Ajax调用。
请看我关于模糊器的完整答案。
- +1关于律师,但在其他国家/司法管辖区可能不适用。
- 律师可能比丢失的代码产生更多的成本/问题,仔细考虑并安排大量资金聘请律师!!
- -1:我认为找一个懂javascript的律师很难……更不用说找到"违规者"所需的费用和时间。如果某人从未签署过任何东西,他真的会违反隐藏在HTML/javascript文件中的许可证吗?+1用于Ajax调用。
- @警告1)许可证基本上是关于授权使用受版权保护的材料。你没有许可证就无权使用它。你不必为了获得权利而签字。许可证不同于合同。2a)由于问题是人们在未经许可的情况下复制和使用HTML/javascript,所以许可证不是"隐藏"的,它就在被获取的内容上。2b)未经许可,您无权使用他人受版权保护的材料。3)律师不需要了解javascript,只需要了解知识产权法。
- @施沃恩:我可以从逻辑上假设,为了验证受版权保护的材料的使用条件,必须有某种许可软件协议。如果不在javascript文件中加载包含许可证的页面,就无法查看这些条件。因此,例如,如果许可证上说最终用户每次使用必须给100美元,那么在使用受版权保护的材料之前,最终用户将无法接受。换言之,这是不公平的,可以看出是欺诈行为。
- @警觉不要迟钝。这是关于惩罚那些未经许可将文件复制到自己网站上使用的人。你说的是合同,不是许可证。合同需要双方同意,是一种让步和让步。许可证授予您使用知识产权的权利。许可证是一种方式(所有者授予您东西),您不需要签名,因为您没有放弃任何东西。许多"软件许可协议"实际上都是合同,因为它们超越了对财产的许可,有时还涉及到一些荒谬的事情,比如起诉权。
- 假设你想用画布制作一个photoshop,来回发送数据是行不通的。直到每个人都有1Gb/s的互联网。所以是的,有些程序不能用JavaScript赚钱。因此,他们需要有不同的业务结构。提供仅云存储,使其开源,创新如此之快,所有复印机都落在后面。等。
- 免费的在线模糊器和复杂的昂贵律师…我想知道我会选择哪一个
- 几乎就好像寻求这一点的人们没有考虑到"保护"他们的工作会带来多少好处和付出多少努力…
- 投反对票说"请律师"。多么令人讨厌的声明。您不能对在www上运行的javascript进行版权保护。这就像对自定义css类进行版权保护一样。祝你好运。
- @Nicknewman虽然各国的版权法不同,但在大多数国家,您(或您分配了版权的公司)对您编写的代码(包括HTML、javascript和CSS)拥有版权。在许多国家,你的作品自动拥有版权。把它放到网上并不能改变这一点。如果你在出版领域(如果你是程序员,你是程序员),并且不了解版权和许可、你对作品的权利以及其他人的权利,你可能会想和律师交谈或做一些研究。
- 门锁永远不会真正起作用。对于任何一个真正想进入你的房产的人来说,这只是一个减速带。更糟糕的是,它会阻止你的朋友在你的家里解决问题,并使你更难在现场诊断问题。这是浪费你的时间和金钱。
- @用户626528世界上任何人都可以尝试打开这些门锁。他们可以尽可能多次地尝试打破他们。你不知道是否有人试图打破你的锁。如果他们闯入,你永远不会知道。免费提供高质量的自动镐(减压器/除油器)。这些是物理安全和在线安全之间的本质区别。
- 尽管如此,任何对你的房子、汽车、办公室等的物理锁,对于真正有决心、装备精良的人来说,都只是一个减速带。别用它们,它们只是在浪费你的时间和金钱。
- The only way you can really protect your code is to not ship it. Move the important code server-side and have your public Javascript code do Ajax calls to it.nosense如果谈论的是速度提升,从Ajax调用中获取代码所花费的时间将比反向调用要短。适当的模糊将使工作,"减速带"是游戏的一部分,所以让我们让饼干花时间和我们做的工作
您可以根据自己的需要对JavaScript源代码进行模糊处理,但是它总是可以反向工程,这仅仅是因为需要所有源代码在客户机上实际运行…我能想到的最好的选择是使用服务器端代码完成所有的处理,而JavaScript所做的所有客户端代码都是向服务器本身发送处理请求。否则,任何人都将始终能够跟踪代码正在执行的所有操作。
有人提到base64是为了保证字符串的安全。这是个糟糕的主意。base64可以立即被想要对代码进行反向工程的人识别出来。他们要做的第一件事就是把它解锁,看看它是什么。
- @Claudiu请解释一下您所说的服务器端JavaScript是什么意思。我不明白。
- 无论我到哪里,最常见的答案是"我如何模糊我的javascript?"是"你不应该担心,因为有人可以解开它。"这不是一个真正的答案。
- @维韦克:有点晚了,但我真正的意思是"服务器端代码"。可以不在浏览器中运行javascript,只在服务器上运行,但我不知道这有多常见。
- @特拉维斯:我没有说"你不应该担心它"。我只是说,如果你想要一个封闭源代码的程序,你不会想用客户端的javascript来写它,因为你做的任何模糊都不会阻止它(相当容易)被逆向工程。
- 正确的。这绝不会回答"我怎么能模糊我的javascript"。模糊不是一个抽象概念,而是一个技术概念。手术只是问"怎么做?"
- @Madbreaks:这个问题是在不使他的代码开源的背景下提出的。直接的技术答案是公认的,但是更好的上下文答案(比如,你真正想做什么?)也就是说,在我看来,你不能拥有非开源的客户端JavaScript,因为每个人都有这个源代码,不管你如何混淆它。无论哪种方式,答案都在这里,人们可以阅读并从中受益。
- 答案是"你不能。这就是为什么……"。这可能不是行动计划所寻求的答案,但它是他问题的答案,前提是有一个理由。我认为克劳迪乌和其他回应者在实际回答问题上做得很好。
- 答案是:wasm!用C编写代码,然后翻译成wasm。它将在未来5年内得到支持。等待。或者安装铬金丝雀试试看。
有一些可用的工具,是obfuscation JavaScript的自由;但是,我认为这是重要的,它是很难注意到在它的JavaScript obfuscate点不能被逆向工程。
到那端,有几个选项,我曾经有次加班:
-
YUI压缩器。雅虎!压缩机不工作的很好的JavaScript代码(这将提高它的凝结时间的负载。有一个小的水平,这obfuscation厂比较好。基本上,压缩机将变化的函数名称,删除和修改的白色空间,局部变量。这是我最经常使用的。这是一个基于java的开放源代码工具。
-
jsmin(Douglas Crockford写的是一个工具,旨在缩小您的JavaScript源代码。在单词"Crockford的jsmin自己,但它并没有obfuscate,丑化。"它的主要目标是减少的大小,你在浏览器中加载速度更快的源。
-
obfuscator免费的JavaScript。这是一个基于Web的工具,这是你的代码真的obfuscate诸因素对它进行编码。我认为它的权衡的编码形式(或obfuscation)可以吃在成本的大小;然而,这是一个个人偏好的问题。
- 由于JavaScript代码必须在客户机上运行,因此不仅很难模糊到代码无法反向工程但不可能实现的程度。
- 这是关于统计的。有人在不加混淆的情况下访问您的代码的门槛是什么?他们仍然可以进入,但门槛越高,人就越少。知道的人越少,就越安全。标准安全分类惯例。
- 你试过Zeroify.com模糊器吗?它使用缩小和压缩,但也重命名类和ID,使其更难理解类和对象的意图。
- @塞德是个笑话,他们似乎只是用ZER0O00OIFY 替换变量/函数名,使用不同的[o,o,0]组合。如果我真的想读代码,我可以,在文本编辑器中搜索/替换需要几分钟。如果人们想阅读你的JS,他们会的。任何客户机端的JS,只要有人真正想使用,都会被使用。要么在服务器端运行它,要么跳过它。很可能你的代码不是唯一的,也不是新颖的。如果你真的想的话,就在上面贴一张许可证。
- @在文本编辑器中进行Peterr搜索/替换会使你的生活变得更难阅读或逆向工程。这并不完美,但通过删除上下文线索,确实增加了一层额外的烦恼/困难。大多数程序员没有你聪明,这就是为什么这是一个巨大的威慑。
- @我不知道哪一个程序员能在一分钟内找到或替换一堆[ZER0O00OIFY, ZER0000OIFY, ZEROO00OIFY, ZEROOO0OIFY]var到至少[var1, var2,..]中。我可以在两分钟内逐字消除错误、重新缩进和搜索/替换var名称。不,我比一般的Jr.dev更聪明。简单的事实是,没有办法掩盖客户端JS。你最多可以给自己买5分钟,但那没用。这些东西实际上只是为了卖给那些不知道添加"安全"代码的人。任何一个写过一行JS的人都不会买那种垃圾。
- @Peterr"我可以在两分钟内完成字面上的去修饰、重新缩进和搜索/替换var名称"--当然,继续尝试在一个经过多次缩小、模糊、20MB的代码库包上进行,这个包的结构需要数周时间才能理解,即使是原始的、注释过的源代码。为了使其更加困难,如果缩进、行等发生变化,就存在故意破坏代码的模糊工具。
我会怎么做:
A.黑客巨魔!
这将在第二部分我的伪/模糊的秘密javascript代码启动器。在源代码中看到的那个。
这个代码是什么?
加载真正的代码
设置自定义标题
发布自定义变量
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 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.稍微混淆代码
那是什么?
这与base64中的上述代码相同
这不是秘密的javascript代码
1
| (new Function(atob('dmFyIGFqYXg9ZnVuY3Rpb24oYSxiLGQsYyxlLGYpe2U9bmV3IEZvcm1EYXRhKCk7Zm9yKGYgaW4gZCl7ZS5hcHBlbmQoZixkW2ZdKTt9O2M9bmV3IFhNTEh0dHBSZXF1ZXN0KCk7Yy5vcGVuKCdQT1NUJyxhKTtjLnNldFJlcXVlc3RIZWFkZXIoIlRyb2xsMSIsImxvbCIpO2Mub25sb2FkPWI7Yy5zZW5kKGUpO307d2luZG93Lm9ubG9hZD1mdW5jdGlvbigpe2FqYXgoJ1Ryb2xsLnBocCcsZnVuY3Rpb24oKXsgKG5ldyBGdW5jdGlvbihhdG9iKHRoaXMucmVzcG9uc2UpKSkoKX0seydUcm9sbDInOidsb2wnfSk7fQ==')))() |
C创建一个难以显示的PHP文件,其中包含真正的代码
这个PHP代码是什么?
检查是否有正确的引用(域/dir/code of your launcher)
检查自定义标题
检查自定义post变量
如果一切正常,它将向您显示正确的代码,否则将显示假代码或禁止IP,关闭页面。无论什么。
1 2 3 4 5 6 7 8
| <?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();。
现在。。如果您在秘密的javascript中定义事件处理程序,它可能是可访问的。您需要使用启动代码在外部定义它们,并指向嵌套的秘密函数。
所以…有没有一个简单的方法来获取代码?document.body.appendChild(document.createElement('div')).innerText='Awesome';
我不确定这是否有效,但我正在使用chrome,并检查元素、资源、网络、源、时间线、配置文件、审计,但我没有找到上面的行。
注1:如果在chrome中打开inspect element->network中的troll.php url,就会得到假代码。
注2:整个代码是为现代浏览器编写的。PolyFill需要更多的代码。
编辑
洗衣店
1
| <!doctype html><html><head><meta charset="utf-8"><script src="data:application/javascript;base64,KG5ldyBGdW5jdGlvbihhdG9iKCdkbUZ5SUdGcVlYZzlablZ1WTNScGIyNG9ZU3hpTEdRc1l5eGxMR1lwZTJVOWJtVjNJRVp2Y20xRVlYUmhLQ2s3Wm05eUtHWWdhVzRnWkNsN1pTNWhjSEJsYm1Rb1ppeGtXMlpkS1R0OU8yTTlibVYzSUZoTlRFaDBkSEJTWlhGMVpYTjBLQ2s3WXk1dmNHVnVLQ2RRVDFOVUp5eGhLVHRqTG5ObGRGSmxjWFZsYzNSSVpXRmtaWElvSWxSeWIyeHNNU0lzSW14dmJDSXBPMk11YjI1c2IyRmtQV0k3WXk1elpXNWtLR1VwTzMwN2QybHVaRzkzTG05dWJHOWhaRDFtZFc1amRHbHZiaWdwZTJGcVlYZ29KMVJ5YjJ4c0xuQm9jQ2NzWm5WdVkzUnBiMjRvS1hzZ0tHNWxkeUJHZFc1amRHbHZiaWhoZEc5aUtIUm9hWE11Y21WemNHOXVjMlVwS1Nrb0tYMHNleWRVY205c2JESW5PaWRzYjJ3bmZTazdmUT09JykpKSgp"></head><body></body></html> |
PHP
1
| <?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=';}; ?> |
- 哦,是的,我也会混淆JavaScript代码。
- 这是我刚才在想的,拉着饼干。我想在不使用php的情况下看到类似的东西:)
- 即使这很有趣,一个能够正确检查站点的Web开发人员也可以以某种方式获得源代码。我真的认为在你把数据放到网上的时候,没有办法隐藏任何类型的数据。
- 我认为这并不是一种混淆。但是他知道如何打开控制台,他可能也知道base64编码/解码,非常简单。
试试jscrambler。我最近给它旋转了一下,它给我留下了深刻的印象。它为那些不太关心细节,只想快速完成的人提供了一组模板,这些模板带有预先定义的设置。您还可以通过选择您想要的任何转换/技术来创建自定义模糊。
- JScrambler订阅非常昂贵…最便宜的订阅至少需要3个月的价格145美元——这太疯狂了。
- 他们现在有了一个免费的计划。其他的订阅计划仍然如此昂贵。
- 自由计划只包括优化和缩小。
- "免费的计划包括优化和缩小",是的,不。模糊和优化不在一起,对不起。
- 现在看看JScrambler的网站等等,所以定价计划我看不到一个免费的选择。只有免费试用……
- 我对jscrambler非常失望,因为它没有一个好的C客户机,而且API文档没有告诉你足够的信息来从头开始打其余的电话,但是他们的客户支持让它值我老板的钱。
语言与interpreted的问题,是你让他们的发送源的工作(除非你有编译的字节码),然后再是很琐碎的,它对反编译)。
所以,如果你不想牺牲的表现,你可以只使用变量和函数法,例如,他们replacing与A、B…………………AA,AB…A101 A102或,等,以及,当然,删除换行符号的多空间,你可以(这就是所谓的JS压缩机)。将一个字符串obfuscating性能命中,如果你要加密和解密他们,他们在实时。调试器可以显示加js的最终值。
与我建议反对yui压缩器的大多数其他答案相反,您应该使用Google Closing。
这并不是因为它压缩得更多,而是因为它会捕获诸如a = [1,2,3,];这样的javascript错误,这会让IE陷入混乱。
- 在混淆之前,不应该检查代码的错误和不兼容性吗??实际上与模糊无关
一个非开源的基于javascript的应用程序是相当愚蠢的。javascript是一种客户端解释语言。模糊并不能起到很好的保护作用。
JS模糊通常是为了减少脚本的大小,而不是"保护"它。如果您不希望代码公开,则javascript不是正确的语言。
周围有很多工具,但大多数都有"压缩器"(或"微型化器")这个词,这是有原因的。
你不能保证客户端代码的安全:只需在Google Chrome上按F12,暂停JavaScript的执行,你就可以得到所有的字符串,甚至是那些加密的字符串。美化它并重命名变量,您将得到几乎原始的代码。
如果您正在编写服务器端的javascript(即nodejs),担心有人入侵您的服务器,并希望使黑客工作更困难,从而给您更多的时间重新访问,那么请使用javascript编译器:
在高级编译中需要使用闭包编译器,因为它是重命名所有变量的唯一工具,即使这些变量在多个文件/模块中使用。但它只是有一个问题:只有用它的编码风格来写,它才有效。
- 闭包编译不混淆代码:p
- 它不是为它设计的,但做得很好:它不会像某些编译器那样添加额外的代码(通常可以通过我引用的工具进行反向),而是将其更改为不常见的方式,有些甚至很难撤消,并删除未使用的代码,与真正的模糊相比,这有利于提高性能。
- 不是个好主意。如果微型化器有一个bug,那么小型化/编译代码服务器端可能会带来安全问题:zyan.scripts.mit.edu/blog/backdooring-js
- 您引用的bug只适用于uglifyjs:它不适用于闭包编译器。
- 对于所有关心缩小javascript文件的人,也有一个javascript取消缩小。所以我认为这根本不是一个安全层
- 当我回答这个问题时,迷你们已经存在了,但是迷你们并没有得到原始的源代码,而是一个具有重命名变量和属性的源代码。有数据重命名,但不是很好。另一方面,今天有一件事使小型化效率降低,那就是调试,在这四年中,它变得更好了。
我可以建议由JavaScript实用帕特里克奥尼尔。它可以obfuscate /压缩和压缩和它在这些似乎是很好的。我不想这样说,将它编译脚本中的任何一种。
是的。我不obfuscating削减前的大风扇。让不可能的(误差在1线的调试………………"等等,有一个只有一个线"),他们总是把时间到解包。如果你需要……好的。
- 但是模糊化并不一定要将其压缩为一行,它可以像更改函数和变量名或将字符串转换为base64一样简单。缩小将所有代码放在一行上。
- 如今,Uglifyjs似乎是最佳选择。作者也很酷!:)
- 关于调试,您主要可以生成源代码映射,在测试时可以包含这些源代码映射,这样您就可以看到在哪一行发生了错误,即使它被缩小了。
DeanEdward的packer是一个非常好的模糊器,尽管它主要是模糊代码,而不是代码中的任何字符串元素。
请参见:在线javascript压缩工具,并从下拉列表中选择packer(dean edwards)
- 这是毫无意义的。它可以用jsBeautifer.org轻松解包。
我建议首先使用类似于yui compressor的工具缩小,然后使用类似http://www.javascriptobusfuscator.com的工具将所有字符串和数字转换为十六进制值。/
有了这一点,代码将变得几乎不可能理解,我认为在这个阶段,黑客重新制定代码要比从头开始重新编写要花更多的时间。重写和克隆实际上是无法停止的。毕竟我们是自由人!
我使用关闭编译器实用程序来进行Java脚本混淆。它缩小了代码,并有更多的模糊选项。此实用程序在以下网址的谷歌代码中提供:闭合工具
但现在有一天我听到了很多关于乌格利夫的话。您可以在闭包编译器和uglifyjs之间找到各种比较,其中uglify似乎是赢家。uglifyjs:node.js的一个新的快速javascript压缩器,与闭包不相上下
很快我就会给你机会。
你尝过香蕉汁吗?它产生高度压缩和完全不可读的代码。
- 它可以很好地压缩代码,但是只要将最后一行中的eval()更改为console.log(),您的控制台就会把整个代码都显示出来。
我用Jasob已经很多年了,它是目前最好的模糊器。它有一个高级的用户界面,但仍然是直观的,易于使用。它还将处理HTML和CSS文件。
使用它的最佳方法是在所有私有变量前面加上下划线之类的前缀,然后使用sort功能将它们组合在一起,并将它们作为模糊目标进行检查。
用户仍然可以查看您的源代码,但是当您的私有变量从_sUserPreferredNickName转换为a时,很难破译。
引擎将自动统计目标变量的数量,并对其进行优先级排序,以获得最大的压缩。
我不为Jasob工作,我也没有从提升他们中得到什么,只是提供一些友好的建议。缺点是它不是免费的,而且有点贵,但是与其他选择相比,它仍然值得——免费的选择甚至不会接近。
- 杰森似乎更像是一个迷你,而不是一个模糊。我错过什么了吗?
作为一个javascript/html/css模糊器/压缩器,你也可以试试patu digua。
你一定要考虑看看模糊文字。
我超越了我们从其他工具(如yui compressor或google closure)中看到的典型的javascript缩小技巧。
模糊的代码看起来更像是加密的。不像我以前看到的。
- 谢谢你的链接!刚刚尝试了模糊脚本和加密的代码(没有密钥???).并将我的脚本从211压缩到36 KB!
- 注意,obfusccriptor警告您,它不适用于ie。这对一些人来说是一个交易破坏者。
- 答案上的链接不再指向工具。我找不到另一个活生生的参考。
- 第一个链接已断开。"混淆者
我觉得有些企业(例如:jackbe)将加密的javascript代码放在*.gif文件中,而不是JS文件中,作为一种额外的模糊度量。
尝试此工具javascript模糊
我在我的HTML5游戏中使用了它,不仅把它的大小从950kb减少到了150,而且使源代码不可读的闭包编译器和微型处理器是可逆的,我个人不知道如何逆转这种混乱。
这个缩小了,但没有混淆。如果不想使用命令行Java,可以将JavaScript粘贴到Web窗体中。
- 注意:链接现在已断开。
- @斯科特威森谢谢,更新了它
我以前用过这个,它做得很好。这不是免费的,但你一定要看看。javascript模糊编码器
如果使用JavaScript库,请考虑Dojo工具包,它与闭包编译器的高级模式编译兼容(经过细微修改)。
Dojo–唯一的javascript库与闭包编译器兼容
使用闭包高级模式编译的代码几乎不可能进行逆向工程,甚至通过美化程序,因为整个代码库(包括库)都是模糊的。平均也只有25%。
Javascript代码仅仅是小型化的(yui压缩器、uglify等),通过美化后很容易进行逆向工程。