您好,欢迎来到居食网。
搜索
您的当前位置:首页Javascript代码混淆综合解决方案

Javascript代码混淆综合解决方案

来源:居食网


Javascript 是一种解释执行的脚本语言,主要应用于 Web 领域的客户端的浏览器中;由于 Javascript 解释执行的特性,代码必须明文下载到客户端,并且可以很容易的进行调试,使得 Javascript 代码的保护非常困难;

不同的人对 Javascript 代码的保护有不同的看法;有的人辛苦努力的代码,却可以被竞争对手轻易获得,他们就非常希望能有保护 Javascript 代码的方案,但现有的方案可能无法满足他们的要求;很多人认为 Javascript 语言很简单,Javascript 代码没有保护的价值,可能是他们的代码确实简单,或者他们并不了解 Javascript 语言强大的功能;还有的人认为现在都开源了,还保护代码干什么,当然开源的人是值得敬佩的,但对别人的代码的开源要求,却不是合理的。

为了提高用户的体验,出现了 Web 2.0 技术,并随着 AJAX 和富界面技术的发展,Javascript 在 Web 应用上的重要性越来越高,Javascript 代码的复杂性、功能和技术含量也越来越高,对Javascript 代码保护的需要也越来越迫切。

Javascript 在线混淆器的目的是为 Javascript 代码保护的需求,提供一种全新的综合解决方案,包括编码规则和免费的在线混淆器。

混淆和加密的区别

很多人将这两者混在一起讨论,实际上两者的目的有一定的区别,采取的手段也有很大的不同。加密主要是为了防止未经授权的使用,对这种情况即使破解了加密,也只能非法使用,并不一定能获得软件的代码逻辑;但对于脚本来说,防止对代码进行访问的措施,也属于加密,对这种情况,破解了加密,就获得了代码;而混淆是在无法阻止他人获取代码的情况下,采取的保护代码的逻辑不被他人理解的措施;对于混淆的代码,他人很难理解,无法进行修改和重新应用;
对于生成机器码的语言,比如 C 语言,只需要考虑未经授权的访问,几乎不需考虑代码的保护;因为对编译后的软件,只能反汇编为汇编语言代码,几乎无法分析出代码的逻辑。
对于生成中间代码的语言,比如 Java 和 C#,即需要考虑未经授权的访问,又需考虑代码的保护;;因为对编译后的软件,可以很容易的反编译为较高级的语言,从而了解到代码中的逻辑,并较容易的破解加密。而混淆后,即难于理解代码的逻辑,也不易找到加密点所在。
对于脚本语言,比如 Javascript,只能混淆,难以加密;因为脚本都是明文存在的,很容易调试的,通过跟踪可以较容易的破解上面两种目的的加密。但是混淆后的代码是难于理解代码的逻辑的。

我们只涉及到对 Javascript 脚本进行混淆,而不涉及加密;对于涉及到 Javascript 的系统的加密,我们建议不要将加密点放在 Javascript 脚本内,而是放在服务端的编译程序内,因为编译程序的加密可以采用更多的保护方式,加密的强度也更高。

我们首先要分析 Javascript 语言和混淆相关的特点,和现有的混淆产品的不足,然后再提出我们对 Javascript 代码混淆的解决方案,最后是我们的 Javascript 在线混淆器。

Javascript 语言和混淆相关的特性

Javascript 是一种解释执行的脚本语言,相对编译类型的语言有很多自身的特性,而其中一些特性会对代码混淆带来很大的困难。

无法定义类的属性和方法的名称是否需要被混淆

Javascript 是一种基于原型的语言,没有严格的类型定义。在自定义的类中,对于需要外部访问的属性和方法,不能进行混淆;对于内部访问的属性和方法,需要进行混淆;但Javascript 语言本身,无法对属性和方法进行这样的区分。为此我们要寻找一种变通的机制来识别属性和方法的名称是否需要混淆。

存在大量的系统定义的核心的和客户端的方法和属性不能被混淆

Javascript 语言本身定义了大量的核心的类、方法和属性;浏览器中也定义了大量的客户端的类、方法和属性;这些类、方法和属性都不能够被混淆,然而这些类、方法和属性的数量太大,无法通过枚举来避免混淆;为此我们需要寻找一种方法来标识这些类、属性和方法。

无法定义全局变量是否需要被混淆

全局变量是 window 对象的属性,局部变量是函数对象的属性;所有的局部变量都是可以和应该被混淆的,而全局变量有的需要混淆,有的不能混淆;但全局变量和局部变量的表现形式是一样的,难以区分;而且全局变量本身更无法定义是否需要被混淆。为此我们要找到一种方法来区分不能混淆的全局变量,和需要混淆的全局变量及局部变量。

Javascript 语言的这些特点,都对代码的混淆带来了很大的困难,如果不解决这几个问题,Javascript 代码的混淆就缺少实用的价值。

现有 Javascript 混淆产品的问题

当我们需要混淆 Javascipt 代码的时候,首先考察了市面上现有的产品,和一些论坛里对混淆的思路,但这些产品和思路都不能满足我们的要求。

有一个商品化的 Javascript 混淆产品,采用了和一种 C# 混淆工具相似的混淆方式,分析了代码里所有的标识符,对一些系统预设的标识符不混淆,对其他的进行混淆,同时提供用户对标识符的混淆进行选择和配置;这个产品的功能很多很复杂,但有一个很大的问题,就是预设的标识符有限,对于代码中用到的大量的系统定义的属性和方法,会进行混淆,为此需要自己手工配置,避免对这些属性和方法的混淆,这对于大型的系统几乎是一个不可能完成的任务。

有一些论坛里也讨论到混淆的思路,包括一些示例,这些思路更多的是改变标识符的表现形式,有的是用编码字符串的关联数组替换属性,比如将 xx.dd 替换为 xx["\x\x"];更复杂的是把 "\x\x" 之类保存到字符串数组,然后调用字符串数组作为关联数组的下标;这种思路可以避免上面的问题,但有一个更大的问题,就是混淆是可逆的,被混淆的标识符仅仅是被转换成了16进制的形式,可以很容易的恢复。

正是现有产品的不足,促使我们不得不研究自己的解决方案。我们的解决方案也是经过了几个版本,一开始的版本要复杂的多,花费了很大的工作量,但结果并不理想;几经修改才找到现有的解决方案;虽然开始的大量工作,最后几乎都废弃了,但没有前面的工作,也就没有后面的结果;所以即使您可能会认为我们的方案简单,那也只是我们努力的结果,而不是过程;而且简单的东西,往往是有效的。

Javascript 代码混淆综合解决方案

通过前面对 Javascript 的特性和相关混淆产品的分析,使我们认识到如果仅仅是在混淆器上下功夫是不够的;因为 Javascript 语言本身对混淆的功能有很大的,无法解决。为此我们设计了一个综合的解决方案,就是 Javascript 在线混淆器规则,只要是按照规则编写的 Javascipt 代码,都能使用 Javascript 在线混淆器混淆进行混淆。

Javascript 在线混淆器的规则并不复杂,但能够解决 Javascript 语言本身的特性和其他混淆产品遇到的问题。

规则一、所有用 window 约束的类、变量和函数都不混淆,其他的类、变量和函数都混淆。

全局的类、变量和函数本身都是 window 的属性,用不用 window 约束,从逻辑的角度是一样的。但我们可以借用 window 的约束来区分对全局的类、变量和函数是否需要进行混淆。

用 window 的约束必须是前后一致的,不但包括类、变量和函数的定义,也包括类、变量和函数的调用。

局部的类、变量和函数,因为没有 window 约束,所以都是混淆的。

类型混淆不混淆
类定义function Class1(){...}window.Class1 = function(){...}
函数定义function Method1(){...}window.Method1 = function(){...}
变量定义var Param1 = 1;window.Param1 = 1;
生成类的实例var object1 = new Class1();var object1 = new window.Class1();
函数调用Method1();window.Method1()
变量引用var newParam = Param1;var newParam = window.Param1;

规则二、所有以小写字符开头的属性和方法都不混淆,以其他字母开头的属性和方法都混淆,用 window 约束的属性和方法应用规则一。

JavaScript 核心和客户端中有大量的系统定义的方法和属性不能被混淆,而这些方法和属性绝大多数都是以小写字母开始的,本规则保证了系统定义的方法和属性不被混淆。在 Javascript 客户端中仅有极少数的系统定义的以大写字符起始的方法和属性,对于这种情况,可以采用关联数组的方式避免被混淆,比如 object1["Method1"]();此方法也适用于第三方控件中可能会有的以大写字符起始的方法和属性的情况。

此规则也使我们可以在自定义的类中标识方法和属性是否被混淆,对于需要外部调用不能混淆的方法和属性,采用小写字母起始,对于内部的方法和属性,采用其他字母起始。

类型混淆不混淆
类方法定义Class1.Method1 = function(){...}Class1.method1 = function(){...}
Class1["Method1"] = function(){...}
对象方法定义Class1.prototype.Method1 = function(){...}Class1.prototype.method1 = function(){...}
Class1.prototype["Method1"] = function(){...}
类属性定义Class1.Prop1 = 1;Class1.prop1 = 1;
Class1["Prop1"] = 1;
对象属性定义object1.Prop1 = 1;object1.prop1 = 1;
object1["Prop1"] = 1;
类方法调用Class1.Method1();Class1.method1 ();
Class1["Method1"]();
对象方法调用object1.Method1();object1.method1 ();
object1["Method1"]();

更多相关教程请访问 JavaScript视频教程

居食网还为您提供以下相关内容希望对您有帮助:

混淆的js代码还原

使用Babel工具解析混淆代码,通过遍历、操作节点和生成代码等功能实现还原。示例工具包括https://obf-io.deobfuscate.io/、https://webcrack.netlify.app/和https://deli-c1ous.github.io/javascript-deobfuscator/。在线工具与AI辅助:部分混淆类型(如obfuscator)可通过AI+AST树分析还原,例如使用DeepSeek等工具。通用在线解密工具如https://jsdec.js.org/和https://lelinhtinh.github...

java将原生js代码混淆

在Java中将原生JS代码混淆,可以通过使用javascript-obfuscator库或uglifyjs工具来实现。方法一:使用javascript-obfuscator库 环境配置:首先,需要在Java环境中配置Node.js的命令行工具,确保Java应用能够执行系统命令。安装库:接着,安装javascript-obfuscator库和pkg工具,pkg用于将Node.js应用打包成可执行文件。

hbuliderx不打包的时候代码混淆可以做吗

安装javascript-obfuscator插件:首先,你需要在项目根目录下安装javascript-obfuscator插件。这个插件可以帮助你实现JavaScript代码的混淆。创建运行脚本:接下来,你需要创建一个运行脚本,比如build.bat。在这个脚本中,你需要指定要混淆的文件和输出目录。通过运行这个脚本,你可以自动化地完成代码的混淆过程。双...

五款全球知名的JavaScript混淆加密工具(原创)

此外,Babili还支持嵌入式使用,方便开发者在二次开发过程中进行代码压缩和混淆处理。综上所述,以上五款JavaScript混淆加密工具各具特色,能够满足不同开发者的需求。在选择合适的工具时,建议根据自己的实际需求、代码类型以及安全性要求等因素进行综合考虑。

怎么反编译js

反编译JavaScript代码的核心方法是通过工具或浏览器功能将混淆、压缩或编译后的代码还原为可读形式,具体分为以下四类场景:一、针对混淆代码的反编译混淆代码通常通过变量名替换、字符串编码、控制流扁平化等技术隐藏逻辑,需分步处理:格式化工具:使用Prettier、js-beautify等工具恢复代码结构(如缩进、换行)...

前端js代码混淆加密原理及简单示例

利用AST语法树,开发者可以更深入地混淆代码,如Esprima和Babel提供工具进行操作。JavaScript混淆并不能完全保障代码安全,还应结合其他保护措施,如数据加密和访问控制。对于复杂和高级的代码保护,safekodo提供了全面的代码加密解决方案,包括多平台支持和多样化的加密选项。立即体验safekodo,为您的代码添加一层...

[总结]HTML+JS逆向混淆混合

目标与挑战:目标:逆向分析一个包含加密判断的HTML页面,关键代码隐藏在checkPassword函数中。挑战:需要熟悉JS混淆技术,并能对混淆代码进行有效处理。关键步骤:提取关键代码:从HTML页面中提取出包含加密逻辑的JS代码。去混淆处理:使用在线的javascript去混淆工具对混淆代码进行处理,以恢复其可读性。代码分析...

逆向进阶,利用 AST 技术还原 JavaScript 混淆代码

Babel作为JavaScript编译器,具备解析、转换和生成代码的多种功能。利用Babel,可以将JavaScript代码转换为AST语法树,再进行操作后,生成新代码。Babel的各个功能包,如@babel/core、@babel/parser、@babel/traverse和@babel/generator等,提供了丰富的方法,用于代码解析、遍历和生成。在逆向解混淆中,主要使用...

五款全球知名的JavaScript混淆加密工具(原创)

提供JavaScript压缩、混淆和格式化功能。可通过调整参数精细控制压缩级别和混淆选项。特别适合用于压缩JavaScript代码。JScrambler:全球领先的JavaScript加密工具。不仅混淆代码,还支持隐藏字符串、指针处理等高级保护功能。特别适用于React、Angular和Vue等框架,对Web和移动应用保护强大。JShaman:在线工具,混淆及...

5款在线JavaScript加密混淆工具

jscrambler 一款功能强大的JavaScript代码保护工具,可以对代码进行加密、混淆和防篡改处理。JShaman 提供简单易用的在线JavaScript混淆服务,帮助开发者保护代码免受未经授权的复制和修改。jsfack 通过将JavaScript代码转换为难以理解的字符序列来进行混淆,增加代码被逆向工程的难度。freejsobfuscator 免费且易于使用...

Copyright © 2019- jusc.cn 版权所有

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务