|
本帖最后由 ykq123654789 于 2024-9-13 01:04 编辑
1
1. 查看/load接口,发现了有个参数名为 "challenge"
2
3
4
2.根据栈跟踪 逐个尝试,看看有没有符合的地方(打算没有符合的地方,再搜索参数名的,既然发现了出处,那就足够了)
3. 发现是xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx 随机的 -4固定,/load接口的参数 算是解决了.(captcha_id risk_type lang这种参数 我就不叙述了 是验证码ID/验证码类型/语言标识,既然多次刷新不变,直接写死)
5
4.接着看/verify 这个接口 看见了 lot_number , payload , process_token , payload_protocol , pt , w . 这6个参数
6
5.其中 lot_number , payload , process_token , payload_protocol , pt .这5个参数 均由load接口返回. 核心那就是w了
7
6.开始也是栈跟踪 慢慢查看,发现是混淆的,看不出有用价值,尝试直接搜索 POST表单参数试下,为了缩小搜索范围,根据栈跟踪显示,最大可能性是gcaptcha4.js这里,在这个js里面进行搜索
8
7.搜索 "payload_protocol",发现了2处地方,直接断下这2个,进行刷新,让他重新GET /verify接口
9
8.刷新后,断下来了,发现"i"的值格式很像/verify接口的"w"值,加上"'w': i",可以确定了 w=i,这里就是w的出处了.另外的断点可以删掉了.
10
9. 控制台取值
(0, m[$_BIBCQ(20)]) = function i(e, t) ,是一个函数
f[$_BIBDJ(20)][$_BIBCQ(544)](e) = '{"device_id":"","lot_number":"168dceae67e9481bb2561ea03ed6344e","pow_msg":"1|0|md5|2024-09-12T20:19:22.142688+08:00|24f56dc13c40dc4a02fd0318567caef5|168dceae67e9481bb2561ea03ed6344e||1181b3087d56bf15","pow_sign":"5e08e04743e9092b0de1572ffe2b7f44","geetest":"captcha","lang":"zh","ep":"123","biht":"1426265548","jvGu":"dDE5","em":{"ph":0,"cp":0,"ek":"f1","wd":1,"nt":0,"si":0,"sc":0}}'
n = 一个对象
那么 function i(e, t) 大概率就是执行加密的地方了. 老样子重新刷新 在var = i 处下断 跟入进去看看.
11
10. 进入到 function i(e, t) , 输出 "e ,t" 发现对上了,接着往下有点乱 ,但是看得出来是 循环 加上 条件语句,全部条件成立后第一句断点,看看是什么流程.
12
11. 发现了执行流程(如上图), 看见"_" 很可疑,也是十六进制文本.这个时候就细细的来了.
13
12. 控制台取值
(0, d[$_DAFCn(111)]) () = 生成一串十六进制文本 并且每次都不一样
$_DAFCn(917) = "encrypt"
l[($_DAFDv(20))] = function T()
14
13.控制台取值
e = '{"device_id":"","lot_number":"688cd123c1bc492ca67317fa43846f3f","pow_msg":"1|0|md5|2024-09-12T20:25:39.132851+08:00|24f56dc13c40dc4a02fd0318567caef5|688cd123c1bc492ca67317fa43846f3f||2b5da8f7c25e07bf","pow_sign":"acb6c2612bb42feab8f571090a03b3b3","geetest":"captcha","lang":"zh","ep":"123","biht":"1426265548","jvGu":"dDE5","em":{"ph":0,"cp":0,"ek":"f1","wd":1,"nt":0,"si":0,"sc":0}}'
n = "73ae4d5e019e5db1"
$_DAFDv(917) = "encrypt"
r[a][$_DAFCn(905)] = 一个对象
最终返回了 (0, d[$_DAFDv(158)]) (u) + _
也就是"w"的值
捋一捋代码:
1. 生成一个随机十六进制 "n"
2.执行函数 传入"n" 得到"_" >> _ = r[a][$_DAFCn(956)][ "encrypt" ](n);
3.执行函数 传入"e,n" 得到"u" >> var u = r[a][$_DAFCn(905)][$_DAFDv(917)](e, n)
>>>>>
n=随机生成的
e是一个字符串
15
16
14.控制台取值
|
|