JavaScript奇技淫巧:加密JS代码反调试
JS代码搞混加密,已被人们应用,因为他非常的有用、非常实用,可用作维护代码、安全防护剖析、拷贝、盗取,还可用于游戏审核、APP结构加固等多个方面。
搞混加密后JS代码,很有可能被别人剖析,为了能抵抗剖析调节,文中共享一种反调试技术性。
作用实际效果
使函数名不能改动,改动则代码无法正常启动
原理
将JS代码用可逆性优化算法开展加密。公布或公布的代码时,会提供这一部分“保密”。
运作代码其中包含解密函数,但密匙是隐式传送,难被发现了。并且可以对解密函数再加密,使剖析十分困难。
案例演试
实例代码:
首先用JShaman进行相应的搞混,仅开启函数名加密,目的是获得随机事件函数名,获得代码如下所示:
函数名从最原始的get_copyright成了_0xag。
在研究调节时,分析者总会将毫无意义的函数名改为有含义的名字,使有利于了解。
文中我们能做的,便是严禁更名,假如改动函数名,函数就难以执行。
再次实际操作,解决下列两行,即函数其中包含的代码:
选用xor优化算法,把它变为加密标识符:
留意,加密时传入参数值是“_0xag”,即代码所属的函数名,此值在解密时一般不会显式发生的。
以前的代码,改造成下列方式:
运作:
输入参数与改动代码前同样。
这一段代码的寓意是:解密、并且用eval执行。这就达到跟初始代码一样的作用实际效果。
绝妙之处就在于:解密时,并没有传入加密后的主要参数:“_0xag”!
而如果对于函数开展更名,例如改成abc,执行可能出差错:
这是因为:解密时隐式的采用了arguments.callee.name,即调用者函数名。
当函数位是_0xag时,与加密时传入的密匙主要参数一至,那可以解出来正确代码标识符,也就能被eval执行,而函数名改成abc时,等同于传入的标识符就会变成abc,当然没法解密出正确初始代码,就无法用eval执行。
详细代码
function random_key(key, i){
return key.charCodeAt( Math.floor(i % key.length) );
}
function enxor(data, key){
return data.split("").map(function(c,i,a){
return data.charCodeAt(i)^random_key(key,i);
}).join(",");
}
function dexor(data, key){
return data.split(",").map(function(c,i,a){
return String.fromCharCode(c^random_key(key,i));
}).join("");
}
var js_code=`
var _0xbc99c = "jshaman.com";
var from_year = 523898 ^ 522651;
var _0x7d68de = "(c)" from_year "-" new Date().getFullYear() "," _0xbc99c;
console.log(_0x7d68de);
`
function _0xag(){
var decode_js_code = dexor("85,70,25,19,71,0,0,0,3,4,102,9,27,65,90,127,18,18,18,15,62,93,25,15,73,60,95,21,67,92,85,70,25,19,71,57,66,23,12,56,38,85,25,19,71,98,16,77,83,84,103,9,64,65,57,127,5,74,83,81,106,1,67,107,17,62,66,88,62,87,39,7,28,87,95,59,85,88,92,71,125,24,27,72,69,127,27,88,7,21,48,93,39,24,2,62,66,88,74,71,125,29,90,65,76,127,94,29,22,71,27,81,12,4,79,118,30,31,4,19,25,69,20,13,62,58,81,10,73,78,127,27,88,67,75,125,16,83,65,56,111,72,26,2,94,102,83,67,107,4,48,94,11,14,11,58,30,20,14,0,119,111,72,25,80,59,6,64,5,2,118,11,114",arguments.callee.name);
eval(decode_js_code);
}
console.log(_0xag());
本文采摘于网络,不代表本站立场,转载联系作者并注明出处:https://www.miyuegong.com/kejizixun/65805.html