这个是虚坏叔叔的主站。牢记域名: [xuhss.com](拼音首字母)。首页可以搜索或: 虚幻账号

Js逆向教程17-极验滑块 实现加密算法的逻辑

js 虚幻 180℃ 0评论

Js逆向教程17-极验滑块 实现加密算法的逻辑

69d30d26131944cda52fa8f8018dc0b4 - Js逆向教程17-极验滑块 实现加密算法的逻辑

还是和上节课一样,针对这个网址

https://www.geetest.com/demo/slide-float.html

一、加密算法的结果查看

计算u运行后的结果:

7b2b82bcf14f4db8a04f1d64ce0354b1 - Js逆向教程17-极验滑块 实现加密算法的逻辑

'a45a0551c344b03be428cab551f9755f073e64061c35988a29d6ba70e7d35c8b9e963b63e630d173843eee06a944b557f7c7348c5954fe8869293f793548216083d5dca650eba1e72395f6c22f80bddb05c44d5cdc49bd6bc4ec6a7138a0bde6bca723601cd01621159a7c6ebaf311d361234d0de12f6e8787f10ced9f19b274'

u是16进制的字符串,每次运行都会改变。

它的实现函数如下:

            "\u0024\u005f\u0043\u0043\u0044\u0048": function(t) {
                var $_CBFJo = QBLnx.$_CM
                  , $_CBFId = ['$_CBGCG'].concat($_CBFJo)
                  , $_CBGAZ = $_CBFId[1];
                $_CBFId.shift();
                var $_CBGBn = $_CBFId[0];
                var e = new U()[$_CBGAZ(353)](this[$_CBFJo(756)](t));
                while (!e || 256 !== e[$_CBFJo(125)])
                    e = new U()[$_CBGAZ(353)](this[$_CBGAZ(756)](!0));
                return e;
            },

256这个数字比较特殊, 字节码是0-255,0表示的是一个字符串的结尾 1-255代表某一个字符。

256用作取模计算。、

它在while循环里 就是对一个字节值做遍历。

二、跟值技巧

从头看

  • 优点 不需要重复下断点
  • 缺点 要记住很多的变量值,不太适合一开始学习

从尾看

  • 优点 跟值比较轻松
  • 缺点 需要重复下断点

下断点

  • ​ 初始值的位置
  • ​ 循环的位置
  • ​ 返回的位置
  • ​ 函数的开头
  • ​ 函数的结尾

三、rsa加密分析

var e = new U()[$_CBGAZ(353)](this[$_CBFJo(756)](t));

看到new U()创建出来的对象,有一个setPublic:大概率是rsa加密

rsa里面叫做设置公钥 。

7dde66903802402cb30ab85fba55f7e4 - Js逆向教程17-极验滑块 实现加密算法的逻辑

调用了加密的方法encrypt:

2251fc780c074dd1a0786a7ea09bf270 - Js逆向教程17-极验滑块 实现加密算法的逻辑

传入的参数是这个:对这个进行rsa加密

dc87acca8cb1473b90eae64928a6bb84 - Js逆向教程17-极验滑块 实现加密算法的逻辑

四、t()方法重写

这个参数里面调用了一个函数 这个函数的参数t是undefine

我们可以进入到这个函数里面:

4bbf0f2c83d644359f7933820cb9f631 - Js逆向教程17-极验滑块 实现加密算法的逻辑

往里看是调用了t方法:

f4aaa4fa22be4310952b48a2d23e2509 - Js逆向教程17-极验滑块 实现加密算法的逻辑

所以需要找到t方法的定义

2656d82250274325b7186240a697f8f4 - Js逆向教程17-极验滑块 实现加密算法的逻辑

这个随机字符串 主要是通过这个生成的

(65536 * (1 + Math[$_BFBER(46)]()) | 0)[$_BFBER(215)](16)[$_BFBER(430)](1)

通过调试可以看到它是字符串

b296eb0f3c014162aa8ce9d8ef8ed01f - Js逆向教程17-极验滑块 实现加密算法的逻辑

替换字符串后的代码如下

(65536 * (1 + Math["random"]()) | 0)["toString"](16)["substring"](1)

所以可以自己写一个方法

var random_ = function random_()
{
    var data = "";
    for(var i = 0; i < 4; i++)
    {
        data = data + (65536 * (1 + Math["random"]()) | 0)["toString"](16)["substring"](1)
    }
    return data;
}

能够直接在控制台下运行:

9602465881c94e809dcc14246b9c510c - Js逆向教程17-极验滑块 实现加密算法的逻辑

这样就能够将下面的这个函数的这个参数破解掉

e = new U()[$_CBGAZ(353)](this[$_CBGAZ(756)](!0));

转载请注明:虚坏叔叔 » Js逆向教程17-极验滑块 实现加密算法的逻辑

喜欢 (8)

您必须 登录 才能发表评论!