【逆向案例】qcc极验4 bit字符校验问题

admin 2024年4月10日12:59:03评论4 views字数 2267阅读7分33秒阅读模式

免责声明

【逆向案例】qcc极验4 bit字符校验问题

文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业和非法用途,否则由此产生的一切后果与作者无关。若有侵权,请在公众号【爬虫逆向小林哥】联系作者

【逆向案例】qcc极验4 bit字符校验问题

01

逆向目标

aHR0cHM6Ly92ZXJpZnkucWNjLmNvbS9jYXB0Y2hhP21hdGNoS2V5PVUyRnNkR1ZrWDElMkI0R3prYmFpTnQ3JTJGajNWYzdFUXpDeEdpSGM4eTE5Qk9uOFVOMkhtdjBtczNwMTZFNjJBbmdyaTJrSWxiWGZiTDJxb3Y5ajRvcWhVZyUzRCUzRA==

02

分析

好久没看继极验了,然后发现它不检验轨迹了,真是离谱啊,更离谱的是极验4官网的案例可以过,qcc的过不了?

【逆向案例】qcc极验4 bit字符校验问题

为了排除识别距离问题,甚至用了手动识别

【逆向案例】qcc极验4 bit字符校验问题

然后还是一直forbidden

【逆向案例】qcc极验4 bit字符校验问题

神奇的是极验4官网可以正常通过,非常困惑

先说结论

qcc

【逆向案例】qcc极验4 bit字符校验问题

官网

【逆向案例】qcc极验4 bit字符校验问题

获取滑块信息里面的pow有个bit会影响后续随机字符串的生成

下面就是排除故障了

首先就是验证加密w的问题,做法就是把随机值写死然后复制浏览器的明文与本地对比发现没啥问题,这里就不详细讲了

接着就是明文的问题了

【逆向案例】qcc极验4 bit字符校验问题

我的做法是在浏览器断住一个正常通过的滑块,然后拿明文信息下来使用

【逆向案例】qcc极验4 bit字符校验问题

【逆向案例】qcc极验4 bit字符校验问题

【逆向案例】qcc极验4 bit字符校验问题

然后神奇的是这里滑块居然通过了

【逆向案例】qcc极验4 bit字符校验问题

定位到问题了  就是这里的eee

eee = {        "setLeft": 199,        "passtime": 1871,        "userresponse": 199.8236089388437,        "device_id": "",        "lot_number": "d4a32c3e58f341f8a99d1282e49a4cc9",        "pow_msg": "1|10|md5|2024-04-10T10:32:40.298399+08:00|8daf8b2d78f74aea6a77c0d10da77d41|d4a32c3e58f341f8a99d1282e49a4cc9||8da6a5998ab93592",        "pow_sign": "0031dcc79a1739c5d80f0ce6164932e4",        "geetest": "captcha",        "lang": "zh",        "ep": "123",        "biht": "1426265548",        "Sqk5": "qXYv",        "em": {            "ph": 0,            "cp": 0,            "ek": "11",            "wd": 1,            "nt": 0,            "si": 0,            "sc": 0        }    }

然后接着排除问题,发现距离正常的情况下(返的result 不是 fail),保证

captcha_id lot_number pow_msg pow_sign保证和页面上一致就可以通过,前三者又是返回的,因此问题只能出在pow_msg和pow_sign问题上

往前找它们的生成,可以直接搜下面

"u0070u006fu0077u005fu006du0073u0067"

有下面两处

【逆向案例】qcc极验4 bit字符校验问题

在函数开头下断刷新

【逆向案例】qcc极验4 bit字符校验问题

然后单步发现它进入了后一个,并且后一个是在一个while循环里面的

【逆向案例】qcc极验4 bit字符校验问题

这里的h是前文章分析的随机字符

【逆向案例】qcc极验4 bit字符校验问题

看上去它检验了生成的pow_sign,然后判断了一些逻辑,直到符合才跳出循环,因此可以得出结论这里的随机字符串不能随意写死

函数里面u的生成就依赖我们上面说的结论pow的bit

【逆向案例】qcc极验4 bit字符校验问题

极验4官网的这里的u是"",所以l.indexOf("") 始终为0,无论随机字符串是啥。

这也就是为什么极验4官网不校验这个字符串的原因

【逆向案例】qcc极验4 bit字符校验问题

// 大体的流程就是根据cattcha_id、lot_number、pow拼接好后的字符串clet c = 拼接字符串let a = bit % 4,        _ = parseInt(bit / 410),        let u = new Array(_ + 1)['join']('0');while(1){  let h = 随机字符串  let l = md5(c + h)  判断 l.indexOf(u) === 0  判断 l的第3个字符是否小于等于3   两个都是true 生成的随机字符和pow_msg pow_sign才是有效的}

代码如下:

const md5 = require("md5")function t() {    return (65536 * (1 + Math['random']()) | 0)['toString'](16)['substring'](1);}function get_key() {    return t() + t() + t() + t();}function pow(captcha_id, lot_number, detail, bit) {    let a = bit % 4,        _ = parseInt(bit / 4, 10);    let u = new Array(_ + 1)['join']('0');    let c = `1|10|md5|${detail}|${captcha_id}|${lot_number}||`    let num = 1    while (1) {        let h = get_key()        let l = md5(c + h)        console.log(num)        if (l.indexOf(u) === 0) {            let d = l[_],                f = 3;            if (d <= f) {                return {                    "u0070u006fu0077u005fu006du0073u0067": c + h,                    "u0070u006fu0077u005fu0073u0069u0067u006e": l                };            }        }        num = num + 1    }}

【逆向案例】qcc极验4 bit字符校验问题

【逆向案例】qcc极验4 bit字符校验问题

【逆向案例】qcc极验4 bit字符校验问题

添加好友回复:交流群

原文始发于微信公众号(爬虫逆向小林哥):【逆向案例】qcc极验4 bit字符校验问题

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年4月10日12:59:03
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【逆向案例】qcc极验4 bit字符校验问题https://cn-sec.com/archives/2644573.html

发表评论

匿名网友 填写信息