JS 源代码解密函数分析

先贴上解密函数源代码
function(p, a, c, k, e, r) {
	e = function(c) {
		return (c < a ? '': e(parseInt(c / a))) + ((c = c % a) > 35 ? String.fromCharCode(c + 29) : c.toString(36))
	};
	if (!''.replace(/^/, String)) {
		while (c--) r[e(c)] = k[c] || e(c);
		k = [function(e) {
			return r[e]
		}];
		e = function() {
			return '\\w+'
		};
		c = 1
	};
	while (c--) if (k[c]) p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c]);
	return p
}
参数说明

p:被加密的源代码

a:加密令,一般为数值 62

c:为 k 的数组长度

k:数组数据,用于保存源码中被替换掉的数据

e:默认为 0

r:为{}空对象,用于存放要替换的字符数据

代码分析
e = function(c) {
	return (c < a ? '': e(parseInt(c / a))) + ((c = c % a) > 35 ? String.fromCharCode(c + 29) : c.toString(36))
};

此函数的作用:通过数组**k**长度,返回相关联的对应数组数据

//数据示例  k[c] 与 e(c)  对应的关系
k  				e(c)

0A 				0
20 				1
27 				2
...
...
285Fwudqvlwlrq 	2z
285Fydoxh  		2A
285Fylvleoh    	2B

**r**对象则保存的数据即为:

r[0] = '0A'
r[1] = '20'
...
r[2z] = '285Fwudqvlwlrq'
r[2A] = '285Fydoxh'

最后通过匹配代码中所有的r键值,替换成r

p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c]);

此时的e(c)k[c]是一个函数,因为c被赋值为 1

使用replace第二个参数为函数的方法,遍历替换代码中的字符返回,解密完成

另外再推荐两个加密解密函数,只是对源代码进行简单的加工一下

function eF(s){
  var s1=escape(s);
  var t='';
  var r = parseInt(Math.random() * 8 + 1);
  console.log(r);
  for(i=0;i<s1.length;i++)
    t+=String.fromCharCode(s1.charCodeAt(i) + r);

  return(escape(t)+r.toString());
}


function dF(s){
  var s1=unescape(s.substr(0,s.length-1)); 
//  console.log(s1);
  var t='';
  for(i=0;i<s1.length;i++)
    t+=String.fromCharCode(s1.charCodeAt(i)-s.substr(s.length-1,1));

  return(unescape(t));
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值