JSDefender™使用复杂的混淆和主动保护技术,保护您的JavaScript应用程序免受篡改、滥用和数据盗窃。
一些转换的例子如下:
转换
|
描述
|
域锁 |
允许将代码绑定到特定的域(或其子域)。当浏览器中运行的代码来自不匹配的域时,它就会中断并出现错误。 |
布尔常量 |
将false
和 true
转换为分别产生相同false
和 true
的其他表达式。
|
整数常量 |
将整数常量转换为其他(不太明显的)表达式,在求值时得到相同的值。它还可以将所有整数字面量转换为特定的基数(二进制、十进制、十六进制或八进制)。 |
属性间接运算 |
将直接属性访问转换为间接属性访问。 |
字符串常量 |
提取字符串常量到变量中,并从编码的字符串字面量初始化这些变量。将原始字符串替换为相应的变量。 |
本地声明 |
篡改局部声明的名称。 |
调试器删除 |
从生产代码中删除可能帮助黑客检查代码的信息。 |
控制流保护 |
通过添加不透明的谓词或死代码和扁平化控制流来模糊程序的控制流。 |
函数重新排序 |
将函数从它们原来的位置移动到同一个词汇作用域中的新位置。当*随机化*选项被打开时,它随机设置新位置。 |
篡改检测 |
用保护函数包装关键代码,这些函数在运行时检查修改。篡改的代码将无法正常运行。 |
日期锁定 |
将代码注入受保护的源代码,该源代码将测试当前日期是否处于特定的间隔内。如果是,代码正常运行;否则,它可以退出或运行自定义脚本。 |
连续混淆表达 |
收集代码中相邻的表达式语句,并将它们连接到一个难以理解的表达式序列中。 |
属性解析 |
将对象文字表达式赋值转换为多个赋值语句,使其更难以阅读。 |
变量分组保护 |
将变量声明和初始化分开;它将声明部分移动到声明范围的末尾。 |
已混淆受保护的JavaScript如下:
之前
BankABC.fundingSources.create('1xM821zkPUob1dmeNfhJedI1h5JkFRoC3Ja9Y8SLXp0EStArMT', {
routingNumber: getVal('routingNumber'),
accountNumber: getVal('accountNumber'),
type: getVal('type'),
name: getVal('name')
}, function (err, res) {
console.log('Error: ' + JSON.stringify(err) + ' -- Response: ' + JSON.stringify(res));
});
customer_url = 'https://api-sandbox.BankABC.com/customers/AB993D36-3757-69C1-C3B4-29727FB3111C'
customer = app_token.post("#{customer_url}/funding-sources-token")
$('form').on('submit', function () {
BankABC.configure('sandbox');
var token = 'X9Bv3NuSrML7Ke1mcGmCT0EpwW34GSmDaYP09UfCpeWde46Jug';
var bankInfo = {
routingNumber: $('routingNumber').val(),
accountNumber: $('accountNumber').val(),
type: $('type').val(),
name: $('name').val()
}
BankABC.fundingSources.create(token, bankInfo, callback);
return false;
});
function callback(err, res) {
var $div = $('');
var logValue = {
error: err,
response: res
};
$div.text(JSON.stringify(logValue));
console.log(logValue);
$('#logs').append($div);
}
之后
var Acjgb=ghsgb("uf}wz}t@|fapv`");var cemgb=ghsgb("pavrgv");var wZcgb=ghsgb
('\x22k^+!\x22ixCF|q\x22w~v]u{YvwZ\x22{&YxUA|P Yr*J+@_Kc#V@gRa^G');var
Yaggb=ghsgb("a|fgz}t]f~qva");var sWWfb=ghsgb("rpp|f}g]f~qva");var UXZfb=ghsgb
("gjcv");var oTQfb=ghsgb("}r~v");var QUTfb=ghsgb("\x7F|t");var QoHgb=ghsgb
('Vaa|a)3');var sqKgb=ghsgb("`gaz}tzuj");var MlBgb=ghsgb('3 >>3Av`c|}`v)3');var
onEgb=ghsgb('{ggc`)<`r}wq|k=Qr}xRQP=p|~
$&$>%*P\x22 >P Q\x27 >!*$!$UQ \x22\x22\x22P');var Iivgb=ghsgb("c|`g");var
kkygb=ghsgb("0hpf`g|~vaLfa\x7Fn`|fapv`>g|xv}");var Efpgb=ghsgb
('u|a~');function ghsgb(QIuhb){var kElhb="";for(var MFohb=0;MFohbQIuhb.
length;MFohb++){kElhb+=String.fromCharCode(QIuhb.charCodeAt(MFohb)^0x13);}
return kElhb;}var gBfhb=ghsgb("|}");var ICihb=ghsgb('`fq~zg');var cyZgb=ghsgb
("p|}uztfav");var Ezchb=ghsgb('`r}wq|k');var YuTgb=ghsgb('K*Qe ]f@a^_$Xv\x22~
pT~PG#VcdD \x27T@~WrJC#*FuPcvDwv\x27%Yft');var AwWgb=ghsgb
("er\x7F");var UrNgb=ghsgb('');var wtQgb=ghsgb("vaa|a");var wNDhb=ghsgb("av`c|}`v");
var YOGhb=ghsgb("gvkg");var sKxhb=ghsgb('0\x7F|t`');var ULAhb=ghsgb("rccv}w");
(BankABC [Acjgb][cemgb](wZcgb,{[Yaggb]:getVal(Yaggb),[sWWfb]:getVal(sWWfb),
[UXZfb]:getVal(UXZfb),[oTQfb]:getVal(oTQfb)},function(ofqeb,Qgteb){console
[QUTfb](QoHgb+JSON [sqKgb](ofqeb)+MlBgb+JSON [sqKgb](Qgteb));}),
customer_url=onEgb,customer=app_token [Iivgb](kkygb),$(Efpgb)[gBfhb](ICihb,
function(){BankABC [cyZgb](Ezchb);var kckeb=YuTgb;var Mdneb={[Yaggb]:$
(Yaggb)[AwWgb](),[sWWfb]:$(sWWfb)[AwWgb](),[UXZfb]:$(UXZfb)[AwWgb](),
[oTQfb]:$(oTQfb)[AwWgb]()};BankABC [Acjgb][cemgb](kckeb,Mdneb,oHrhb);
return (NaN===NaN);}));function oHrhb(gZdeb,Iaheb){var cWXdb=$(UrNgb);var
EXaeb={[wtQgb]:gZdeb,[wNDhb]:Iaheb};cWXdb [YOGhb]
(JSON [sqKgb](EXaeb)),console [QUTfb](EXaeb),$(sKxhb)[ULAhb](cWXdb)}
在线演示