在加密过程中发现T方法是被打包的加密代码,由于浏览器环境this直接被指代为window对象,但T方法把this初始化了,如果不把new一个新的window调用这个T方法,可能会导致函数在未加载完成情况下运行时报错。
function T() {
var $_HJIGb = oTEDG.$_DX()[8][10];
for (; $_HJIGb !== oTEDG.$_DX()[0][8]; ) {
switch ($_HJIGb) {
case oTEDG.$_DX()[8][10]:
this[$_EBAIj(7)] = null,
this[$_EBAHv(1401)] = 0,
this[$_EBAHv(0)] = null,
this[$_EBAIj(16)] = null,
this[$_EBAHv(1418)] = null,
this[$_EBAIj(1527)] = null,
this[$_EBAIj(1536)] = null,
this[$_EBAHv(1555)] = null;
$_HJIGb = oTEDG.$_DX()[6][9];
break;
case oTEDG.$_DX()[8][9]:
this[$_EBAHv(1539)]($_EBAIj(1510), $_EBAHv(1567));
$_HJIGb = oTEDG.$_DX()[0][8];
break;
}
}
}
上面代码中的this对象就是,默认被当作全局window对象了,导致webpack导出时报错
///在T最后被定义导出的时候,我把它放到我新定义的window对象中
T[$_EBAIj(26)][$_EBAIj(1666)] = function ce(e) {
var $_EDBCt = oTEDG.$_CO
, $_EDBBN = ['$_EDBFz'].concat($_EDBCt)
, $_EDBDn = $_EDBBN[1];
$_EDBBN.shift();
var $_EDBET = $_EDBBN[0];
return e[$_EDBCt(1658)](this[$_EDBDn(1401)], this[$_EDBDn(7)]);
}
,
T[$_EBAHv(26)][$_EBAHv(1539)] = function $_DEl(e, t) {
var $_EDBHL = oTEDG.$_CO
, $_EDBGe = ['$_EDCAV'].concat($_EDBHL)
, $_EDBIK = $_EDBGe[1];
$_EDBGe.shift();
var $_EDBJX = $_EDBGe[0];
null != e && null != t && 0 < e[$_EDBHL(157)] && 0 < t[$_EDBHL(157)] ? (this[$_EDBIK(7)] = function n(e, t) {
var $_EDCCm = oTEDG.$_CO
, $_EDCBn = ['$_EDCFl'].concat($_EDCCm)
, $_EDCDz = $_EDCBn[1];
$_EDCBn.shift();
var $_EDCEs = $_EDCBn[0];
return new b(e,t);
}(e, 16),
this[$_EDBIK(1401)] = parseInt(t, 16)) : console && console[$_EDBHL(378)] && console[$_EDBIK(378)]($_EDBHL(1649));
}
,
T[$_EBAHv(26)][$_EBAIj(1466)] = function he(e) {
var $_EDCHt = oTEDG.$_CO
, $_EDCGR = ['$_EDDAu'].concat($_EDCHt)
, $_EDCIM = $_EDCGR[1];
$_EDCGR.shift();
var $_EDCJV = $_EDCGR[0];
var t = function a(e, t) {
var $_EDDCi = oTEDG.$_CO
, $_EDDBi = ['$_EDDFm'].concat($_EDDCi)
, $_EDDDs = $_EDDBi[1];
$_EDDBi.shift();
var $_EDDEg = $_EDDBi[0];
if (t < e[$_EDDCi(157)] + 11)
return console && console[$_EDDDs(378)] && console[$_EDDDs(378)]($_EDDCi(1648)),
null;
var n = []
, i = e[$_EDDCi(157)] - 1;
while (0 <= i && 0 < t) {
var r = e[$_EDDCi(116)](i--);
r < 128 ? n[--t] = r : 127 < r && r < 2048 ? (n[--t] = 63 & r | 128,
n[--t] = r >> 6 | 192) : (n[--t] = 63 & r | 128,
n[--t] = r >> 6 & 63 | 128,
n[--t] = r >> 12 | 224);
}
n[--t] = 0;
var s = new l()
, o = [];
while (2 < t) {
o[0] = 0;
while (0 == o[0])
s[$_EDDCi(1552)](o);
n[--t] = o[0];
}
return n[--t] = 2,
n[--t] = 0,
new b(n);
}(e, this[$_EDCHt(7)][$_EDCIM(1669)]() + 7 >> 3);
if (null == t)
return null;
var n = this[$_EDCHt(1666)](t);
if (null == n)
return null;
var i = n[$_EDCIM(136)](16);
return 0 == (1 & i[$_EDCHt(157)]) ? i : $_EDCHt(162) + i;
}
,
window['xy'] = T;
}();
console.log(new window['xy']())
这里我把整个T放入全局中导出,在结尾new一个新的对象去接收,如此拿到了RSA的原生加密逻辑。