关于极验4代加密流程导出的笔记

在加密过程中发现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的原生加密逻辑。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰吸生椰拿铁.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值