JSDefender:17种方法强力保护你的JavaScript代码

JSDefender保护JavaScript代码免受黑客,逆向工程师和其他恶意行为者的侵害。本文来了解一下都有哪些保护方法。

JavaScript无处不在。它是目前世界上最受欢迎的编程语言。正如GitHub所指出的那样,JavaScript的贡献者和存储库数量最多,轻松超过了其他替代方法,例如Python,PHP和Ruby。

JavaScript语言强大的同时也存在着风险,大量出色的开源代码为内部开发团队和恶意行为者创造了机会。JavaScript代码的普遍存在和易于开发也增加了安全漏洞的总体风险。鉴于JavaScript支持的应用程序和服务种类繁多,即使是很小的漏洞,也可能使企业遭受IP盗窃,收入损失或声誉受损的威胁。

JSDefender保护JavaScript代码免受黑客,逆向工程师和其他恶意行为者的侵害。在本文中来了解一下都有哪些保护方法。

布尔文字替换

此技术使用等效的表达式(但不太直接)替换了”true”“false”Boolean文字值。

控制台伪装

这个技术防止受保护的代码从当代码调用的方法在控制台上显示信息console的对象,例如console.log,console.info等重要:变换不会删除console从代码-相关方法调用,它仅仅抑制它们。

恒定参数混淆

该技术使用条件表达式替换函数参数中的整数文字,这些条件表达式使用在JSDefender运行时中声明的特殊保护条件。假设您有以下函数调用:

displayNumbers(1, 10);

此保护技术将用类似于以下内容的受保护版本替代它:

displayNumbers(Ecrt.wr(123) 1 : 3, Ecrt.wr(14) 7: 10);

日期锁定

此保护技术将代码注入受保护的源,该代码将测试当前日期是否在特定间隔内。如果是这样,代码将正常运行;否则,它将在日期测试阶段之后立即中断。

调试器语句删除

这种保护技术debugger从代码中删除了JavaScript语句。

DevTools阻止

此保护技术将代码添加到JSDefender运行时,该运行时检测在浏览器中是否打开了DevTools面板。如果是这样,保护脚本将在断点处连续停止程序,并且不允许黑客对其进行调试。要继续运行程序,攻击者必须关闭DevTools面板。在预先配置的停止次数之后,运行系统将代码声明为无效。

表达序列混淆

这种保护技术在代码中收集相邻的表达式语句,并将它们连接到表达式序列中。

原始代码:

(function x() {  y = 3;  z = 4;  return y*z;})()

混淆代码:

(function x() {  return y=3, z=4, y*z;})()
控制流保护

该技术分析代码中的控制流语句(if语句和循环),并将其转换为有限状态机。这种混淆使代码的控制流更难遵循,尤其是在if嵌套语句和循环时。

功能重新排序

这种保护技术在源代码中收集函数声明,然后将它们分散在它们的声明范围内。

全局对象隐藏

常用的全局对象和功能,如window,navigator,Object,String,setTimeout,和其他许多人给出了逆向工程的代码有用的提示。全局对象隐藏保护技术对这些对象使用间接引用,并将它们隐藏在保护对象内。攻击者将看到无意义的损坏名称,而不是全局对象标识符。

整数字面替换

此方法用产生相同值的表达式替换整数文字。由于替换使用十进制,八进制和十六进制文字的组合,因此原始值并不明显。您可以定义整数范围以应用此转换。另外,您可以定义一个基数(二进制,十进制,十六进制,八进制)以转换任何其他整数文字。

本地声明名称修改

此技术重命名了本地声明的标识符(例如变量,函数和类)。您可以从多种名称处理方法中进行选择。JSDefender注意新创建的名称不会与现有名称冲突。同样,全局声明名称(在受保护代码外部声明的标识符)保持不变。

属性间接

JSDefender将直接属性访问表达式更改为间接(索引或计算)属性表达式。让我们来看一个例子:

var x = {  get: function() {    return x.myProp;  } }

保护后,此代码如下所示:

var x={  ["get"]: function(){    return x["myProp"];  }}
财产稀疏

将对象文字表达式赋值转换为多个赋值语句,使它们更难阅读。

原始代码:

let x = {  w: 1,  z: { x: 3, y: 4},  q: "hello"}

稀疏属性后的代码:

let IcwE = {};IcWE.w = 1;IcwE.z = {};IcwE.z.x = 3;IcwE.z.y = 4;IcwE.q = "hello";let x = IcwE
字符串文字提取

JSDefender从代码中提取字符串文字,并将其编码形式放入常量变量中。然后,它将原始字符串文字替换为对相应变量的引用。让我们来看一个例子:

var greet = "hello";var planet = "world";

保护后,此代码类似于:

const kK1K=IcZK.xb("{vx7Fx7F|");const E7TK=IcZK.xb("d|ax7Fw");var greet=kK1K;var planet=E7TK;
自卫防护

该技术将函数声明,函数表达式,对象和类方法声明包装到一个保护函数中。该函数会观察其主体(因此是原始的类似函数的构造)是否被篡改。即使在功能主体中插入单个空格或换行符也将阻止其正常运行。

这样的保护可能具有高的运行时间成本。尽管对于仅在代码中运行一次的函数和IIFE(立即调用的函数表达式)而言,这是非常便宜的,但对于频繁调用的函数而言,这可能会很昂贵。

当您打开此保护时,JSDefender仅将其应用于被认为一次执行的IIFE。

可变分组保护

这种技术将变量的声明和初始化分开。它将声明部分移到声明范围的末尾。让我们来看一个例子:

原始代码:

var a = 234,  b = 123;displayNumbers(a, b);// ... Several hundred lines of code

应用变量分组后:

a = 234;b = 123;displayNumbers(a, b);// ... Several hundred linesvar a, b;

JSDefender拥有我们世界一流的,经验丰富的产品支持,因此不必担心代码保护问题会减慢运行速度或阻止您的发布。 想要咨询授权价格,可联系客服独立问价。
标签:

来源:慧都

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年11月7日
下一篇 2020年11月7日

相关推荐

发表回复

登录后才能评论