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

JavaScript

老丝猪猪小卤蛋

2020-03-11

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

第648篇《如何混淆(保护)JavaScript?\[关闭\]》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

21个回答
乐小哥 2020.03.11

这缩小但不会混淆。如果您不想使用命令行Java,则可以将javascript粘贴到网络表单中。

Eva伽罗 2020.03.11

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

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

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

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

宝儿Davaid 2020.03.11

试试这个工具Javascript Obfuscator

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

路易Sam神无 2020.03.11

我过去曾经使用过,而且做得很好。它不是免费的,但您绝对应该看看。
JavaScript混淆器和编码器

泡芙Green 2020.03.11

您绝对应该考虑看看Obfuscriptor

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

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

LEY宝儿神奇 2020.03.11

作为JavaScript / HTML / CSS混淆器/压缩器,您还可以尝试Patu Digua

卡卡西神奇 2020.03.11

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

阿飞Pro 2020.03.11

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

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

很快我会给UglifyJS一个机会。

Green小宇宙伽罗 2020.03.11

院长爱德华的Packer是出色的混淆器,尽管它主要混淆代码,而不是代码中可能包含的任何字符串元素。

请参阅:Online Javascript Compression Tool, 然后从下拉列表中选择Packer(Dean Edwards)

猿Sam 2020.03.11

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

逆天Itachi 2020.03.11

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

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

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

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

我不为Jasob工作,而提倡一些友善的建议也无济于事。
缺点是它不是免费的,有点贵,但是当与其他替代品堆叠在一起时仍然值得-“免费”选项甚至还差得很远。

西里阳光 2020.03.11

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

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

小卤蛋理查德Tony 2020.03.11

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

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

周围有很多工具,但是出于某种原因,大多数工具的名称中都带有“ compressor”(压缩器)(或“ minifier”)。

猪猪前端 2020.03.11

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

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

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

成天 2020.03.11

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

乐神奇 2020.03.11

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

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

小胖Green 2020.03.11

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

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

小卤蛋理查德Tony 2020.03.11

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

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

神无伽罗 2020.03.11

混淆:

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

您也可以使用:

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

私有字符串数据:

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

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

边注:

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

小小Eva 2020.03.11

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

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

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

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

达蒙理查德 2020.03.11

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

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

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android