雷池WAF滑块版本逆向分析

查看 84|回复 11
作者:LiSAimer   
前言
项目中的网站防护突然更新了。
原先是无感检测,现在加了个滑块。
上一版的算法看的这位佬的文章写出来的。https://www.52pojie.cn/thread-1930242-1-1.html
网上先找了一圈没有相关的分析文章,只能自己顶了。
目标网站
aHR0cHM6Ly93d3cuY2hhbmdhbmp5enguY29tLw==
DevTool控制台检测
滑动滑块后被检测到


1.png (18.12 KB, 下载次数: 4)
下载附件
2024-12-30 17:02 上传

看下控制台发包数据,只有一个js文件challenge.js,看来就是它了。
先过一眼代码,不多,五千多行,没有混淆。
既然是滑块滑动完后触发检测,那我们先加个mouseup的鼠标监听断点。
滑动鼠标到位置后松开,看下断点位置。定位到了函数j的位置,向下继续走,能看到先拿到了轨迹去判断,too-fast检测滑动太快,too-slow滑动太慢。中间一系列计算检测是否正确滑动到尾端位置。 直接到最后的w函数。


2.png (70 KB, 下载次数: 4)
下载附件
2024-12-31 14:11 上传

看下入参
e:固定域名
t:6205cd33ef8541dfaf16eabb6329dcda_61    访问首页时响应内容里的,每次值都不一样,先标记为client id后续会用到。
s:轨迹
进入w函数往下走两步,触发了当前环境正在被检测,ok找到了。


3.png (10.47 KB, 下载次数: 4)
下载附件
2024-12-31 14:11 上传

看看v函数,有个43位数组,遍历执行每个数组的fun函数,再进fun代码看看。


4.png (27.35 KB, 下载次数: 4)
下载附件
2024-12-31 14:11 上传

好家伙,原来是43个检测点。


5.png (23.9 KB, 下载次数: 4)
下载附件
2024-12-31 14:11 上传

那就懂了,初始分数为0,每检测到一个点,增加相应分数,分数大于等于100则触发被检测到。
这里不管那么多,直接从源头注释掉完事了。


6.png (8.79 KB, 下载次数: 4)
下载附件
2024-12-31 14:11 上传

流程梳理
检测相关代码去掉后。重新刷新网页滑动滑块,正确进入网站。
再分析发包数据,可知整体流程如下。
1、请求首页获取client id和cookie sl-session
2、请求获取challenge.js文件先进行环境检测
3、携带client_id请求issue接口获取一个数组和issue_id
4、请求获取calc.js文件,在里面操作wasm
4、将请求issue获取的数组在wasm中进行相关计算获得一个新的数组
5、携带新的数组和一些固定参数请求verify接口获取jwt也就是最终的cookie sl-challenge-jwt
拿到cookie sl-session和sl-challenge-jwt就能获取到网页信息。
wasm AI分析
开始看到有wasm文件我也很蛋疼,虽说也不是没解决过,但就很无力。
不过还好,看了下也就不到四百行,那就不用手写WebAssembly了,可以用 AI 刚一下。
回到上回断点处继续往下走,看到fetch要获取calc.js文件,直接跳到then。
new Blob它创建一个Blob对象,i 是calc.js的代码内容,
URL.createObjectURL 为 Blob 创建一个唯一的 URL,这个 URL 可以被用来引用 Blob 中的内容,
new Worker 创建一个新的 Web Worker,使用上面创建的 URL 作为 Worker 的脚本来源。


7.png (27.93 KB, 下载次数: 4)
下载附件
2024-12-31 14:11 上传

这样你会看到多了这么一个文件,里面其实就是calc.js的内容。


8.png (50.34 KB, 下载次数: 4)
下载附件
2024-12-31 14:12 上传

进入文件搜索 WebAssembly 定位到调用wasm的位置。可以看到它整体被赋值给了 onmessage(玩过5s盾的应该都被这个虐过),
那直接搜索 postMessage 可定位到它的发送位置。


9.png (55.16 KB, 下载次数: 4)
下载附件
2024-12-31 14:12 上传

断点继续往下走,就会进入wasm了。


10.png (48.21 KB, 下载次数: 3)
下载附件
2024-12-31 14:12 上传

先分析流程
reset > arg > calc > ret
这是调用wasm中方法的顺序。
下面交给AI
我是先分段丢给它,每个方法都让AI分析出具体的解释。


11.png (62.99 KB, 下载次数: 4)
下载附件
2024-12-31 14:12 上传

每一段都分析完后再让它结合起来复现算法。
这一块费时较多,我先用的chatGPT 4o模型,每次调教后给的代码执行的结果都是乱七八糟的格式完全对不上。
于是我换了Claude3.5 Sonnet模型,这回给的代码执行结果的格式对上了,但是结果是不准确的,和浏览器调试不一致,


12.png (65.93 KB, 下载次数: 2)
下载附件
2024-12-31 14:12 上传

那剩下的就是对比下wasm的执行流,抠抠细节,多调教会正确代码就出来了。


13.png (46.57 KB, 下载次数: 3)
下载附件
2024-12-31 14:12 上传

最终请求verify接口是带上新生成的result数组,其他参数写死即可,没错轨迹也可以写死没有校验。


14.png (54.88 KB, 下载次数: 2)
下载附件
2024-12-31 14:12 上传



15.png (92.63 KB, 下载次数: 2)
下载附件
2024-12-31 14:12 上传

总结
总的来说不是那么难,在调试的时候需要有目的的去定位关键位置,代码里有很多setTimeout和Promise,单步调试会很困难。
有了AI帮助后,分析代码也轻松了很多。
这是在2024年的最后一天编写的文章,也祝大家新年快乐。

下载次数, 下载附件

lu_wakin   

ai的确是不错,有些代码要不同语言实现,直接发给ai就能给出另外一种语言的实现方式。虽然问题不少,需要单步调试对比值,但也比自己重写快太多了。
soughing   

ai的确是不错,有些代码要不同语言实现,直接发给ai就能给出另外一种语言的实现方式。虽然问题不少,需要单步调试对比值,但也比自己重写快太多了。
KeepGoingOn   

感谢分享
xiiye   

666, 感谢分享
g10020200   

666感谢分享
g10020200   

666感谢分享
g10020200   

666盖着飞翔
SmileLoveSex   

感谢分享,谢谢。
tco2k   

感谢发布原创作品,吾爱破解论坛因你更精彩!
您需要登录后才可以回帖 登录 | 立即注册

返回顶部