吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 783|回复: 9
上一主题 下一主题
收起左侧

[Web逆向] 某18+论坛CF盾验证扣代码

[复制链接]
跳转到指定楼层
楼主
看鱼 发表于 2026-1-29 14:55 回帖奖励
本帖最后由 看鱼 于 2026-1-29 15:02 编辑

最近在看cookie类逆向,突然就想到这个站,因为以前看到过,看了下请求,别人的cf盾不是403开头的么?为什么他是200?看都看了,继续分析下流程吧

流程分析

  1. 第一次访问,会返回两个set-cookie
  2. 同时返回来的响应页面也有几个重要参数
    • safeid
    • window.__CF$cv$params
      • r
      • m

  1. 还是这个响应,除了这几个参数外,会通过js,添加script标签,并通过src请求main.js
  2. main.js通过302定向到另一个地址,并请求执行
  3. 执行后会访问/cdn-cgi/challenge-platform/h/b/jsd/oneshot/xxxxxx的网站,请求数据加密,并设置cookie,看来核心就是这了
  4. 通过点击网站(18+不+)进入主页,这是应该是唯一一个JS设置cookie的操作,就是把第一次访问的safeid添加到cookie中。

断点调试

清楚了大概的流程,那就是断点调试了。看了下main.js,都是混淆后的,那就三种办法

  1. xhr断点,给challenge-platform关键字打断点
  2. 直接调用栈跟踪
  3. hook JSON.stringify(这是我从结果倒推的)


这个其实很简单,当你打下断点的那一刻,其实答案已经在上面了。
分析一下这段语句

Q[gP(d2.X)](TX[gP(d2.y)](JSON[gP(d2.h)](d)))

// Q = XMLHttpRequest
// gP(d2.X) = send
// TX[gP(d2.y) : 关键加密函数
// gP(d2.h) = stringify
// d 看图片上,这个应该是生成的环境检测对象

重复几遍后,发现环境检测对象的变化,其实是可控的范围,如果为了更像一点,可以写一个生成函数,随机加入,随机删除。
但是我比较懒,感觉可以直接用这个请求吧。

注意看上面的作用域,在第一次请求获取到的r和t也出现了,但是api得到的值是false?

所以现在我们要做的,大概是一下几个步骤

  1. 把d对象扣下来,直接留用
  2. 把main.js代码扣下来,补上环境
  3. 得到加密数据,完成请求,获得cf_clearence

对了,除此之外,这个请求还有一个请求地址,地址在哪里?
继续观察main.js,发现在一串字符串里,直接有地址,我只要通过正则,把这两个地址提取并合并,不就好了么?

怎么偷懒怎么来吧。
当然我只是现在偷懒,在调试的时候,我还是找了一下的,生成位置就不说了,但是我在调试的时候,发现了main.js总是在变化。每一次请求都会不一样,导致我打的断点,刷新后就断到其他地方去了,这时候请注意,要使用“本地替换”。具体就不多说了

补充环境

先把main.js的环境补了吧。
因为我跳过了他检测环境的过程,其实还是很好补的。

windows = globalThis //基操

补完这个没报错了,直接在定位的加密位置上面导出加密函数

window.ddd = TX[gP(d2.y)

执行提示ddd不存在,应该是没执行到
这时候应该,上个proxy查看,但是我也比较懒,手动跟了下浏览器。
发现第一个函数执行的时候。
会访问\\CF$cv$params获取r和t变量(这是第一次访问得到的)
给他补充上,继续执行。

这时候会提示找不到XMLHttpRequest,直接给他添加上(npm install xmlhttprequest)
其实我觉得不添加也没事,我们已经找到了位置,直接把这段删除也可以,毕竟只是需要得到加密函数

var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
window.XMLHttpRequest = XMLHttpRequest;

再继续执行,最后补充一个

document = {}

成功得到加密字符串,下面写请求就可以了。

写请求的一些坑

写请求的时候,第一个requests.get就把我给干懵了。
发现出现403,just a moment了,这不就是经典的五秒盾么
但是我在devtools里没发现啊。而且我发现了两个版本

  • requests请求的时候:2025.9.1 版本
  • 浏览器请求的时候:2024.11.0

这是套了两个?看不懂,但是问题不大
猜测大概率检测tls指纹,或者JA3之类的
所以我先用curl_cffi请求了下。
第一次发现不行
第二次请求加了个参数:impersonate="chrome136",成功通过
除此之外,我搜索并尝试了下,request-go这个库也可以

main.js动态获取

之前不是说了么?main.js总是动态变化的,这个还是很简单的,发一个request,然后用正则替换就行了。


我尝试过固定main.js,发现生成的加密字符串会有不同,没有验证是否能通过验证

代码写的比较烂,将就看一下,第一次写这种,写的不好见谅。

9.png (266.36 KB, 下载次数: 0)

9.png

免费评分

参与人数 6威望 +1 吾爱币 +25 热心值 +6 收起 理由
buluo533 + 1 + 1 用心讨论,共获提升!
ioyr5995 + 1 + 1 热心回复!
dblkings + 1 + 1 谢谢@Thanks!
taoyangui + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
涛之雨 + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
helian147 + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
 楼主| 看鱼 发表于 2026-1-29 23:16 |楼主
dblkings 发表于 2026-1-29 22:30
哥,验证我学习成果的地址呢?

这样不好吧,我怕你们好学过头了啊。

我补个关键词,我只能帮你们到这里了

eGh1YXRhbmc=

推荐
fgyu88 发表于 2026-1-29 22:54
推荐
dblkings 发表于 2026-1-29 22:30
5#
JUNKEC 发表于 2026-1-30 08:44
看鱼 发表于 2026-1-29 23:16
这样不好吧,我怕你们好学过头了啊。

我补个关键词,我只能帮你们到这里了

sehuatang
6#
iyuanze 发表于 2026-1-30 08:50
呵呵,过来学习了
7#
traviswen 发表于 2026-1-30 08:50
怎么没有看到最关键的信息啊
8#
w392647620c 发表于 2026-1-30 09:03
哈哈 借一步说话
9#
gonga 发表于 2026-1-30 09:30
我想学习,,,哈哈哈
10#
dj7930382 发表于 2026-1-30 09:45
哥好东西还是分享一下
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-1-30 12:03

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表