作者声明:文章仅供学习交流与参考!严禁用于任何商业与非法用途!否则由此产生的一切后果均与作者无关!如有侵权,请联系作者本人进行删除!
目标: aHR0cHM6Ly93d3cuZ2VldGVzdC5jb20vZGVtby9zbGlkZS1mbG9hdC5odG1s
任意滑动一下滑块,让第三个W能搜索到
接口分析:
ajax.php
就是我们最终滑动验证返回的结果了,请求参数gt
和challenge
我们都能拿到,目前就需要这个w
参数,callback
就是一个固定字符串geetest
加时间戳,其他参数固定即可
F12搜索\u0077
,找到第三个w生成的位置
找到w如何生成的,代码如下
var u = r[$_CAHJS(737)]()
, l = V[$_CAHJS(392)](gt[$_CAIAK(254)](o), r[$_CAIAK(744)]())
, h = m[$_CAIAK(792)](l)
var w = h + u
首先来看u
是怎么来的,断点进r[$_CAHJS(737)]()
方法
得到var u = new U()[$_CBGAK(392)](this[$_CBGAK(744)](!0))
发现this[$_CBGAK(744)](!0)
它又是一个随机值,跟方法过去会发现跟前面两次w调用是随机字符串方法是一致的,所以我们也可以固定写好
new U()[$_CBGAK(392)]
直接扣代码即可
分析l
var l = V[$_CAHJS(392)](gt[$_CAIAK(254)](o), r[$_CAIAK(744)]())
第一个参数gt[$_CAIAK(254)](o)
是一个对象转字符串,第二个参数r[$_CAIAK(744)]()
是随机字符串,也就是跟this[$_CBGAK(744)](!0)
是同一个东西
分析h
var h = m["$_FEX"](l)
扣代码就ok了
下面回到我们分析l的部分,第一个参数o
{
"lang": "zh-cn",
"userresponse": "88e88dd8eded71c",
"passtime": 379,
"imgload": 66,
"aa": "F(!!OsssssssussssssssssssssssssssssstssssssssDsssswssss(!!(002,16.X1*/*.*-,*-),k*)-*-),,)-)*--),,*-,-)-0.-0(??1$*K",
"ep": {
"v": "7.9.2",
"$_BIE": false,
"me": true,
"tm": {
"a": 1725360705197,
"b": 1725360705317,
"c": 1725360705317,
"d": 0,
"e": 0,
"f": 1725360705204,
"g": 1725360705218,
"h": 1725360705223,
"i": 1725360705223,
"j": 1725360705277,
"k": 1725360705250,
"l": 1725360705277,
"m": 1725360705304,
"n": 1725360705307,
"o": 1725360705318,
"p": 1725360705416,
"q": 1725360705416,
"r": 1725360705418,
"s": 1725360705422,
"t": 1725360705422,
"u": 1725360705422
},
"td": -1
},
"h9s9": "1816378497",
"rp": "7581565931d5f3e49ad3d155ccde1791"
}
o是长这样的字符串,我们需要逆出userresponse
,aa
,rp
这三个参数
1.rp位置
手动解混淆
rp = X(gt + challenge.slice(0,32)+ passtime)
-
aa位置
首先往上面翻代码找到
o
生成的位置
发现这个o.e
就是aa
的值,我们继续跟e
,e
是第二个参数,跟上一个栈,找到调用处,第二个参数e
这个l
是第二个参数,它就是o.e
的值,也就是aa
的值
var l = n[$_DAAAU(985)][$_CJJJU(1075)](n[$_CJJJU(985)][$_CJJJU(1073)](), n[$_CJJJU(67)][$_CJJJU(1033)], n[$_DAAAU(67)][$_CJJJU(345)]);
// aa = n[$_DAAAU(985)][$_CJJJU(1075)](n[$_CJJJU(985)][$_CJJJU(1073)](), n[$_CJJJU(67)][$_CJJJU(1033)], n[$_DAAAU(67)][$_CJJJU(345)]);
n[$_CJJJU(985)][$_CJJJU(1073)]()
第一个是轨迹
n[$_CJJJU(67)][$_CJJJU(1033)]
第二个是c
n[$_DAAAU(67)][$_CJJJU(345)]
第三个是s
继续跟找轨迹来源
跟进去 n[$_CJJJU(985)][$_CJJJU(1073)]()
进去找到return
返回处
r[$_BEGJO(405)]($_BEHAO(2)) + $_BEHAO(457) + i[$_BEGJO(405)]($_BEGJO(2)) + $_BEGJO(457) + o[$_BEGJO(405)]($_BEGJO(2))
//这个就是n[$_CJJJU(985)][$_CJJJU(1073)]()
//手动解混淆
r['join']('') + "!!" + i['join']('') + "!!"+ o['join']('')
可以观察这个代码用到了r
、i
、o
他们都在
return new ct(t)[$_BEHAO(59)](function (t) {
var $_BEHJU = mwbxQ.$_Cg
, $_BEHIM = ['$_BEICs'].concat($_BEHJU)
, $_BEIAi = $_BEHIM[1];
$_BEHIM.shift();
var $_BEIBp = $_BEHIM[0];
var e = function (t) {
var $_BEIE_ = mwbxQ.$_Cg
, $_BEIDR = ['$_BEIHQ'].concat($_BEIE_)
, $_BEIFM = $_BEIDR[1];
$_BEIDR.shift();
var $_BEIGI = $_BEIDR[0];
for (var e = [[1, 0], [2, 0], [1, -1], [1, 1], [0, 1], [0, -1], [3, 0], [2, -1], [2, 1]], n = 0, r = e[$_BEIFM(192)]; n < r; n++)
if (t[0] == e[n][0] && t[1] == e[n][1])
return $_BEIE_(441)[n];
return 0;
}(t);
e ? i[$_BEHJU(137)](e) : (r[$_BEIAi(137)](n(t[0])),
i[$_BEHJU(137)](n(t[1]))),
o[$_BEIAi(137)](n(t[2]));
})
这个算法进行了改变,然后可以看到这个算法只传递了一个参数t
继续往上找t
来源
找到这个t
是经过了这个算法,传递了一个this[$_BEGJO(359)]
参数
控制台输出this[$_BEGJO(359)]
如果没猜错的话,这个就是真实的轨迹值了
轨迹用Python代码进行模拟,然后经过这写算法然后返回aa
-
userresponse
参数位置还是在这个o里面
var userresponse = H(t, i[$_CAHJS(134)])
i[$_CAHJS(134)]
是challenge
,是34位的challenge
t
是滑动距离
至此,o的参数分析完毕,其他参数可以固定
扣代码吧
验证通过!!!