某习通混淆代码及滑动验证码全协议分析

查看 51|回复 9
作者:mysticz   
网站:aHR0cHM6Ly92OC5jaGFveGluZy5jb20v
今天我们分析一下这个站的登录。按常规先抓包。


1.png (277.33 KB, 下载次数: 2)
下载附件
滑动验证码
2025-9-4 20:12 上传

可以看到点击登录后有滑动验证码。
因此我们需要先分析滑动验证码。
抓包可以看到发送了五个可疑参数。


2.png (46.41 KB, 下载次数: 2)
下载附件
2025-9-4 20:13 上传

然后返回了滑动的底图,缺口,以及一个token


3.png (32.25 KB, 下载次数: 1)
下载附件
2025-9-4 20:13 上传

通过搜索,captchaId这个参数是在login.min.js?t=20240708这个js中写死的。我们固定即可。_是个时间戳。
那么我们只需要看chptchKey,token,iv即可。查看栈,可以看到有两个可疑的函数


4.png (46.85 KB, 下载次数: 2)
下载附件
2025-9-4 20:13 上传

我们点进去,可以看到代码里面有赋值操作。但是代码都混淆了。


5.png (161.04 KB, 下载次数: 2)
下载附件
2025-9-4 20:13 上传

虽然混淆了,但是别慌。我们先下断点。


6.png (111.44 KB, 下载次数: 1)
下载附件
2025-9-4 20:14 上传

我们在相同的地方打上三个断点,刷新。
可以看到'captchaKey': _0x422ded;_0x422ded = _0x4c771b(_0x4e0309 + _0x11dbad())_0x4e0309是个获取时间戳,_0x11dbad()产生了一个UUID,两个进行了字符串拼接后,传入_0x4c771b函数进行运算。


7.png (142.26 KB, 下载次数: 1)
下载附件
2025-9-4 20:14 上传


'token': _0x4e0309;_0x4e0309 = _0x4c771b(_0x4e0309 + _0x3fedba + _0x589b78 + _0x422ded) + ':' + (parseInt(_0x4e0309) + 0x493e0) || ''token也是先用_0x4e0309获取时间戳,_0x3fedba是固定的captchaId这个参数,_0x589b78是固定的slide字符串,_0x422ded就是上面计算的captchaKey值。
这些值拼接后继续传入_0x4c771b函数进行运算。
最后在进行一次拼接。
'iv': _0x4015b8[_0x5876dc(0x33f)];_0x4015b8['IMAGE_VERIFY_TAG'] = _0x4c771b(_0x3fedba + _0x589b78 + Date[_0x5876dc(0x3d5)]() + _0x11dbad())iv值跟token算法大同小异,看起来复杂,其实就是不同字符串拼接。
也是传入_0x4c771b函数进行运算。因此顺着_0x4c771b函数往下扣就行。
扣完就一百来行代码。结果如下


8.png (27.18 KB, 下载次数: 2)
下载附件
2025-9-4 20:14 上传

有了参数及验证码地址。
接下来就可以识别了。直接用ddddocr就行。
识别率基本百分百。
[Python] 纯文本查看 复制代码det = ddddocr.DdddOcr(det=False, ocr=False)
with open('hk.jpg', 'rb') as f:   
target_bytes = f.read()
with open('yzm.jpg', 'rb') as f:   
background_bytes = f.read()
res = det.slide_match(target_bytes, background_bytes)
接下来。我们再看验证码的发包。


9.png (26.86 KB, 下载次数: 2)
下载附件
2025-9-4 20:15 上传

可以看到只有两个参数,一个是IV,我们上面已经解决了。
还有个textClickArr参数,按参数字面意思,只传入了一个X的坐标值。
为了保险。我们看一下调用。
照常点进调用栈。直接就出来了。


10.png (146 KB, 下载次数: 2)
下载附件
2025-9-4 20:15 上传

我们都打上断点。
跟下去可以看到这么一个代码i ? e : l ? t.call(e) : u ? t(e[0], n) : o核心是t(e[0], n)这个函数,获取了滑块的最左边的坐标


11.png (420 KB, 下载次数: 2)
下载附件
2025-9-4 20:15 上传

然后进行了运算
parseInt(_0x12404f) - _0x4015b8[_0x58cb01(0x25c)][_0x58cb01(0x30c)]_0x12404f
就是x的值,
减去_0x4015b8[_0x58cb01(0x25c)][_0x58cb01(0x30c)]
生成的8,就是发送的参数因此我们在ddddocr中识别的x坐标减去2。


12.png (8.11 KB, 下载次数: 1)
下载附件
2025-9-4 20:16 上传

接下来发送成功后获取到valIDAta值,随着login登录添加到post参数中data就行了。
因为登录没有加密。我们就不看了。
直接看验证码,可以看到10次发送,成功率百分之百。


13.png (326.62 KB, 下载次数: 2)
下载附件
2025-9-4 20:17 上传

下载次数, 下载附件

buluo533   

其实还有一个好玩的,学习通刷课其实可以用协议跳过而且混淆差不多,加密也很简单,大佬可以试试
Galaxyou   


buluo533 发表于 2025-9-5 10:58
其实还有一个好玩的,学习通刷课其实可以用协议跳过而且混淆差不多,加密也很简单,大佬可以试试{ ...

感觉我自己一直没太理解协议跳过是怎么个事儿
buluo533   


Galaxyou 发表于 2025-9-5 11:50
感觉我自己一直没太理解协议跳过是怎么个事儿

每隔一段时间就会向后端发送校验,就是一个时间戳的差值,处理好一些加密,就可以批量刷完课,其实很早之前站里也有一篇文章,你可以去找找看看,我也是看那个找到的思路
wyjtpp   


buluo533 发表于 2025-9-5 10:58
其实还有一个好玩的,学习通刷课其实可以用协议跳过而且混淆差不多,加密也很简单,大佬可以试试{ ...

还能这样玩,学到了,但是学不会了
那年花开月正圆   

学到了,但是学不会了
ChiZhu   


buluo533 发表于 2025-9-5 13:07
每隔一段时间就会向后端发送校验,就是一个时间戳的差值,处理好一些加密,就可以批量刷完课,其实很早之 ...

会清进度的吧
GaiLun996   

学到了,大佬,解决了我的疑惑!
eoo   

跟着大佬学习
helier   

学习一下
您需要登录后才可以回帖 登录 | 立即注册

返回顶部