Js逆向教程17-极验滑块 实现加密算法的逻辑
还是和上节课一样,针对这个网址
https://www.geetest.com/demo/slide-float.html
一、加密算法的结果查看
计算u运行后的结果:
'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里面叫做设置公钥 。
调用了加密的方法encrypt:
传入的参数是这个:对这个进行rsa加密
四、t()方法重写
这个参数里面调用了一个函数 这个函数的参数t是undefine
我们可以进入到这个函数里面:
往里看是调用了t方法:
所以需要找到t方法的定义
这个随机字符串 主要是通过这个生成的
(65536 * (1 + Math[$_BFBER(46)]()) | 0)[$_BFBER(215)](16)[$_BFBER(430)](1)
通过调试可以看到它是字符串
替换字符串后的代码如下
(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;
}
能够直接在控制台下运行:
这样就能够将下面的这个函数的这个参数破解掉
e = new U()[$_CBGAZ(353)](this[$_CBGAZ(756)](!0));