JavaScript奇淫技巧利用数组加密并压缩代码
JavaScript奇淫技巧:利用数组加密并压缩代码
作者:JShaman。comw2sft
在之前的文章中,介绍过JS代码加密为什么代码压缩的效果,比如长的变量名转化为短变量名、删除注释、删除回车换行等。
本文,再分享一种有代码压缩效果的加密手段:利用数组压缩代码,在JS加密工具中,比如JShaman平台,会称这种技术为阵列化。
其原理,是将JS代码中的某些内容,如字符或代码段,或关键字,放到一个数组中,再通过调用数组下标的方式获取原内容。
为何这种方式有压缩效果呢?是因为,代码中重复的关键字或内容通常会有很多,假如一个10个字符的内容,反复出现10次,所占长度为100个字符,当把它放到数组A中,A〔?〕是4个字符,10次使用所占长度为40个字符长度。如此,便起到了压缩代码的效果。
例如一段代码:console。log();
varabcdefg;
abcdefgjshaman。com
abcdefgjshaman团队专注于JS混淆加密
abcdefgjshaman。comjshaman团队专注于JS混淆加密
console。log(abcdefg);
console。log();
用上述思路,将代码以空格分隔,分隔后的内容放入一个数组:〔
console。log();,
var,
abcdefg;,
abcdefg,
jshaman。com,
jshaman团队专注于JS混淆加密,
console。log(abcdefg);
〕
用数组对应的下标替换后得到加密代码:〔0〕
〔1〕〔2〕
〔3〕〔5〕
〔3〕〔8〕
〔3〕〔5〕〔8〕
〔17〕
〔0〕
如此,显然代码长度比之前缩短了许多。
注:此处仅做原理演示,尚未提供解密还原及执行功能。
最后,提供完整演示代码:要加密的JS代码
varjscode
console。log();
varabcdefg;
abcdefgjshaman。com
abcdefgjshaman团队专注于JS混淆加密
abcdefgjshaman。comjshaman团队专注于JS混淆加密
console。log(abcdefg);
console。log();
;
console。log();
console。log(原始代码:,jscode);
console。log();
把代码以空格分割,放入数组
varstrarrjscode。trim()。split(s);
varstrobj{};
varminstrarr〔〕;
varminstrarrindex〔〕;
varindex0;
遍历代码数组
for(i0;istrarr。length;i){
长度大于3的数组内容
if(strarr〔i〕。length3){
判断对像中是否存在,用对像不用数组是因为效率更高
if(strobj〔strarr〔i〕〕null){
indexi;
strobj〔strarr〔i〕〕i;
缩小的数组
minstrarr。push(strarr〔i〕);
缩小的数组索引,解密用
minstrarrindex。push(index);
}else{
索引,解密用
indexstrobj〔strarr〔i〕〕;
}
将代码进行替换加密
jscodejscode。replace(strarr〔i〕,〔index〕);
}
}
console。log()
console。log(数组:)
console。log(minstrarr)
console。log(数组索引:)
console。log(minstrarrindex)
console。log()
console。log(加密代码:,jscode);
console。log();
for(i0;iminstrarr。length;i){
jscodejscode。replace(newRegExp(〔minstrarrindex〔i〕〕,g),minstrarr〔i〕。replace(,)。replace(,));
}
console。log(解密代码:,jscode);
console。log()
console。log(解密代码执行结果:);
eval(jscode)
运行效果: