已关闭 。 这个问题需要更加 集中 。 它当前不接受答案。

想改善这个问题吗? 更新问题,使其仅通过编辑此帖子来关注一个问题。

5年前关闭。

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


#1楼

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


#2楼

我会怎么做:

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';

FAKE = 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中的“检查元素”->“网络”中打开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=';}; ?>

#3楼

混淆:

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

您还可以使用:

  • Google Closure编译器
  • UglifyJS

私有字符串数据:

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

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

边注:

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


#4楼

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

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


#5楼

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

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

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

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

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


#6楼

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

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


#7楼

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

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


#8楼

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

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

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


#9楼

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

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

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


#10楼

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

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

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

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


#11楼

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


#12楼

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

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


#13楼

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


#14楼

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

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


#15楼

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


#16楼

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


#17楼

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

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

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

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


#18楼

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

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


#19楼

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

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


#20楼

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


#21楼

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

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

很快我会给UglifyJS一个机会。


#22楼

试试这个工具Javascript Obfuscator

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


#23楼

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

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

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

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

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


#24楼

您绝对应该考虑看看Obfuscriptor 。

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

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

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

  1. Javascript关闭当前窗口

    Javascript关闭当前窗口2007-09-03 11:11这个太简单了,window.close()就可以了: 不过它会出个提示"您查看的网页正在试图关闭窗口.是否关闭窗口?" ...

  2. 苹果M1芯片笔记本电脑SIP系统完整性保护无法关闭成功

    环境: MacBook Pro 13.3 八核M18G/256G 2020款 Mac os 11.7.1 问题描述: 系统完整性保护 SIP(System Integrity Protection,有 ...

  3. 2021年保护JavaScript的7个步骤

    点击上方关注 TianTianUp,一起学习,天天进步 大家好,我是TianTian. 今天分享的内容是如何保护JavaScript的安全性. 正文 今天,JavaScript的使用无处不在.它在你的 ...

  4. javascript 关闭浏览器怎么清空所有的cookie

    window.close(); 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ...

  5. 混淆工具JavaScript obfuscator中文帮助文档

    JavaScript obfuscator JavaScript Obfuscator是一个免费并且功能强大的JavaScript混淆器,其中包含多种功能,可为您的源代码提供保护. 主要特征 变量重命 ...

  6. 如何保护javascript代码

    HTML5应用采用的仍然是Javascript.HTML.CSS 等Web语言,因而其代码保护就是这些Web代码的保护,而HTML5应用主要功能一般采用JS实现,因此JS代码就成了保护重点.然而,似乎 ...

  7. JavaScript 关闭窗口事件

    方式一:(适用与IE浏览器,而且刷新不提示,只在点击浏览器关闭按钮的时候提示) <script type="text/javascript"> window.οnbef ...

  8. 美团Android资源混淆保护实践

    前言 Android应用中的APK安全性一直遭人诟病,市面上充斥着各种被破解或者汉化的应用,破解者可以非常简单的通过破解工具就能对一个APK进行反编译.破解.汉化等等,这样就可以修改原有代码的逻辑.添 ...

  9. 某网站高度加密混淆的javascript的分析

    前言 对某网站加密混淆后的javascript代码也算分析了一段时间了,虽然还没搞出来,但多少有些新得,这里记录一下. 工具和资料 https://jq.qq.com/?_wv=1027&k= ...

  10. ie提示保护计算机关闭网页,xp系统解决IE为保护计算机关闭网页方法分享

    在 设置方法如下: 一.调整IE浏览器的安全级别(以IE8为例) 1.打开一个页面,在IE8窗口右上角选择"工具"按钮,选择菜单中的"Internet选项"命令 ...

最新文章

  1. Codeforces数学1600----day1[同余定理,树状数组+两次二分,,组合计数]
  2. WebRTC 音视频开发之路
  3. Android下屏保程序的开发
  4. JavaScript的一些小技巧(转)
  5. Struts2 自定义验证器
  6. 把表单转成json,并且name为key,value为值
  7. dubbo 服务压测_Dubbo高性能网关--Flurry介绍
  8. MongoDB(两)mongoDB基本介绍
  9. 《转》武​汉​的​I​T​公​司
  10. cad二次开发加载cad自动调用_python实例_cad半自动绘图
  11. Linux制作软盘镜像
  12. 美团面试官:Java 性能调优你会多少?一个问题就把我问的哑口无言,哭了
  13. pdf虚拟打印机下载win7_如何将不同形式的PDF文档进行压缩?
  14. raid5两块硬盘掉线数据恢复-服务器磁盘阵列数据恢复方法
  15. 【算法专题】高精度之压位
  16. PostgreSQL - 如何杀死被锁死的进程
  17. 学vue前你需要知道的:vue生态圈
  18. WICC2021召开在即 商汤科技将展示AI“新能源”
  19. 艾永亮:斗鱼上市,高中学历创始人,身价暴涨,仅用5年如何做到百亿市值
  20. Swift语言官方文档翻译(1)

热门文章

  1. 追根究底之以不变求万变:利用SetCapture捕获鼠标
  2. 解决Android 编译出错 找不到android.databinding.ViewDataBinding的类文件
  3. android获取未安装APK签名信息及MD5指纹
  4. 如何调试Android Native Framework
  5. Flutter开发之布局-2-row(16)
  6. 蓝桥杯--2012--取球游戏
  7. Centos安装图形化界面
  8. phpcmsv9多表联合查询分页功能实现
  9. 博客转向 github pages
  10. 一些很酷的.Net技