[color=]本帖仅供学习交流,严禁用于非法用途
,如有侵权,请联系本人删除
主题
某财富网滑块逆向
YUhSMGNITTZMeTlwTG1WaGMzUnRiMjVsZVM1amIyMHZkMlZpYzJsMFpXTmhjSFJqYUdFdmMyeHBaR1Z5ZG1Gc2FXUT0=
验证码请求流程
先大致浏览请求流程
相关参数:
browserid
for (var e = Math.floor(9 * Math.random() + 1).toString(), t = 0; t
request
data: {
ctxid: n.ctxid,
request: a.base64Encode(a.encrypt(o))
}
图片还原
验证码图片为乱序图片

t3.jpg (117.62 KB, 下载次数: 0)
下载附件
2025-7-2 09:43 上传

微信图片_20250702092248.png (13.68 KB, 下载次数: 0)
下载附件
2025-7-2 09:30 上传
进入k函数,疑似为图片还原逻辑, 发现用于还原图片的数组

微信图片_20250702093349.png (24.13 KB, 下载次数: 0)
下载附件
2025-7-2 09:34 上传
将还原逻辑丢给Deepseek, 尝试AI生成还原逻辑,还原图片

ai-restore.jpg (18.36 KB, 下载次数: 0)
下载附件
2025-7-2 09:42 上传
三脸疑问.jpg & 人类早起驯服AI失败.jpg
F12检查元素,发现验证码是有 26*2个图片条堆叠而成,通过div的 background-position 属性控制

微信图片_20250702093644.png (156.1 KB, 下载次数: 0)
下载附件
2025-7-2 09:36 上传
k函数中u为对应的图片偏移量

微信图片_20250702093756.png (25.63 KB, 下载次数: 0)
下载附件
2025-7-2 09:38 上传

restore_image-v3.jpg (14.21 KB, 下载次数: 0)
下载附件
2025-7-2 09:42 上传
滑块距离识别
借助开源库 captcha-recognizer 识别滑块移动距离
# img_restored 为还原后的滑块背景图
from captcha_recognizer.recognizer import Recognizer
recognizer = Recognizer()
box, confidence = recognizer.identify_gap(source=img_restored, is_single=True)
box_x = box[0]
distance = int(box_x - 8)
print('距离', distance)

微信图片_20250702095702.png (93.11 KB, 下载次数: 0)
下载附件
2025-7-2 09:57 上传
移动轨迹加密
request: a.base64Encode(a.encrypt(o)) 处打断点,发现o包含鼠标移动轨迹
appid=202503141611|ctxid=e7d20d53987048ffec6d033bbb94bc31|type=slide|u=51|d=0,0,0:1,0,20:4,0,36:7,0,52:12,-2,68:18,-2,82:25,-3,98:27,-3,115:30,-3,130:32,-3,146:33,-3,156:35,-3,171:38,-4,186:41,-5,202:44,-5,226:47,-5,242:49,-5,267:51,-5,288:51,-5,535|a=quoteapi|p=|t=535|r=0.967621342436788
模拟鼠标移动轨迹
基于三次(三阶)贝塞尔曲线生成移动轨迹
def cal_trace(distance):
def cubic_bezier_curve(x1, y1, x2, y2, x_cp1=1, y_cp1=2, x_cp2=2, y_cp2=-1, num_points=20):
"""
生成三次贝塞尔曲线上的点。
参数:
x1, y1 -- 起始点坐标
x2, y2 -- 终点坐标
x_cp1, y_cp1 -- 第一个控制点坐标
x_cp2, y_cp2 -- 第二个控制点坐标
num_points -- 曲线上的点数
返回:
points -- 曲线上的点列表,每个点是一个(x, y)元组
"""
# 生成一个从0到1的数列,用于计算贝塞尔曲线上的点
t = np.linspace(0, 1, num_points)
points = []
# 遍历参数t的每个值,计算曲线上对应点的坐标
for t_val in t:
# 三次贝塞尔曲线的公式
x = np.power((1 - t_val), 3) * x1 + 3 * np.power((1 - t_val), 2) * t_val * x_cp1 + \
3 * (1 - t_val) * np.power(t_val, 2) * x_cp2 + np.power(t_val, 3) * x2
y = np.power((1 - t_val), 3) * y1 + 3 * np.power((1 - t_val), 2) * t_val * y_cp1 + \
3 * (1 - t_val) * np.power(t_val, 2) * y_cp2 + np.power(t_val, 3) * y2
# 将计算得到的点添加到列表中
points.append((x, y))
# 返回曲线上所有计算得到的点
return points
x1, y1 = 0, 0
# 目标点
x2, y2 = distance, -1
traces = cubic_bezier_curve(x1, y1, x2, y2, x_cp1=40, y_cp1=20, x_cp2=240, y_cp2=160)
return traces
滑块验证
相同的算法构建request: a.base64Encode(a.encrypt(o))
验证通过

微信图片_20250702092840.png (33.82 KB, 下载次数: 0)
下载附件
2025-7-2 09:58 上传