吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5846|回复: 29
收起左侧

[原创工具] 抖音 滑块验证方案 s_v_web_id 参数分析

  [复制链接]
cenjy9 发表于 2023-2-14 00:52

<table><tr><td bgcolor=orange>本文所有教程及源码、软件仅为技术研究。不涉及计算机信息系统功能的删除、修改、增加、干扰,更不会影响计算机信息系统的正常运行。不得将代码用于非法用途,如侵立删!</td></tr></table>


抖音web端 s_v_web_id 参数生成分析与实现

操作环境

  • win10
  • Python3.9

更新:2023.2.14

今天web端改为了点选验证
在这里插入图片描述
分析了一波,效果如下
在这里插入图片描述

分析

s_v_web_id 作用:web端使用滑块后的s_v_web_id 参数可以实现免signature验证
s_v_web_id 生成:在验证码中间页的html中的fp参数就是s_v_web_id
详细介绍这边就不在赘述,可以参考下玺佬的文章:s_v_web_id介绍
生成方案:

  • Python + selenium 自动化过滑块
  • RPC远程调用自动,验证滑块

这两种方案有个前提是页面必须出现滑块才可以(之前搜素视频会强制滑块效验),具体过滑块的方法玺佬都已经分享过。
现在应该是web端有更新,现在搜索页面只有综合会出点选验证,视频和用户页面都没有强制滑块验证了,清cookie和开无痕都没办法触发滑块,经过几天的分析研究出以下方案
最新解决方案:

  • 通过js生成滑块s_v_web_id
  • 识别滑块
  • 生成验证参数并验证
  • 验证通过后就可正常使用了

2023.1.5 更新:滑块轨迹

元旦前抖音大更新,现在开始验证xb,轨迹验证也更严格了,selenium基本过不了,通过chazhuang手动采集滑动轨迹,现在通过率90%左右
在这里插入图片描述

2022-8-6 更新:报错当前网络不稳定,请稍后再试

问题:下载验证码图片报错:当前网络不稳定,请稍后再试在这里插入图片描述
解决:在请求参数中增加参数 "app_name": ""
在这里插入图片描述


通过js生成滑块s_v_web_id

function create_s_v_web_id() {
    var e = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split("")
      , t = e.length
      , n = (new Date).getTime().toString(36)
      , r = [];

    r[8] = r[13] = r[18] = r[23] = "_",
    r[14] = "4";
    for (var o, i = 0; i < 36; i++)
        r[i] || (o = 0 | Math.random() * t,
        r[i] = e[19 == i ? 3 & o | 8 : o]);
    return "verify_" + n + "_" + r.join("")
}

此方法生成的s_v_web_id是不可以用来采集评论的,评论验证使用的s_v_web_id需要从页面取下来,然后在拿着过滑块,此处再次感谢玺佬@李玺


识别滑块

def calculate_distance(self, pic1_path, pic2_path):
    """
    计算滑块到缺口的距离
    """
    img1 = self.clear_white(pic1_path)
    img1 = cv2.cvtColor(img1, cv2.COLOR_RGB2GRAY)
    slide = cv2.Canny(img1, 100, 200)
    img2 = cv2.imread(pic2_path, 0)
    back = cv2.Canny(img2, 100, 200)
    slide_pic = cv2.cvtColor(slide, cv2.COLOR_GRAY2RGB)
    back_pic = cv2.cvtColor(back, cv2.COLOR_GRAY2RGB)
    x, y = self.template_match(slide_pic, back_pic)
    dis_x = int((x + 5) * (340 / 552))
    dis_y = int(y * (340 / 552))
    return dis_x, dis_y

def get_tracks(self, distance, _y):
    """
    获取轨迹参数
    """
    tracks = list()
    y, v, t, current = 0, 0, 1, 0
    mid = distance * 3 / 4
    exceed = random.randint(40, 90)
    z = random.randint(30, 150)
    while current < (distance + exceed):
        if current < mid / 2:
            a = 2
        elif current < mid:
            a = 3
        else:
            a = -3
        a /= 2
        v0 = v
        s = v0 * t + 0.5 * a * (t * t)
        current += int(s)
        v = v0 + a * t
        y += random.randint(-3, 3)
        z = z + random.randint(5, 10)
        tracks.append([min(current, (distance + exceed)), y, z])
    while exceed > 0:
        exceed -= random.randint(0, 5)
        y += random.randint(-3, 3)
        z = z + random.randint(5, 9)
        tracks.append([min(current, (distance + exceed)), y, z])
    tr = []
    for i, x in enumerate(tracks):
        tr.append({
            'x': x[0],
            'y': _y,
            'relative_time': x[2]
        })
    return tr

生成验证参数并验证

captchaBody需要js生成

def captcha_verify(self, s_v_web_id, captchaBody):
    url = "aHR0cHM6Ly92ZXJpZnkuc25zc2RrLmNvbS9jYXB0Y2hhL3ZlcmlmeQ=="
    params = {
        "os_type": "2",
        "fp": s_v_web_id,
        "subtype": "slide",
    }
    data = {
        'captchaBody': captchaBody
    }
    r = self._parse_url(url=url, params=params, data=json.dumps(data))
    return r.json()

效果

识别率成功率还是可以的
请添加图片描述


<table><tr><td bgcolor=orange>本文仅供学习交流使用,如侵立删!</td></tr></table>


免费评分

参与人数 6吾爱币 +6 热心值 +5 收起 理由
savin + 1 + 1 热心回复!
woyucheng + 1 + 1 谢谢@Thanks!
nongda03 + 1 + 1 用心讨论,共获提升!
川姜一男 + 1 + 1 谢谢@Thanks!
xs2019 + 1 用心讨论,共获提升!
suyuewen + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

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

 楼主| cenjy9 发表于 2023-2-15 13:55
Hmily 发表于 2023-2-15 10:47
@cenjy9 解释下?

有什么可解释的?仔细看过文章?说引流的那个,自己看看我整篇帖子写过一个让你去C站的话吗?整个解决方案的步骤的关键点代码都贴出来了,我把自己写的C站收费文章免费发出来 还成事了,真服气

点评

@ccwuax 作者已经解释了。 @cenjy9 方便的话把论坛上传论坛本地把,这样也防止别人说水印引流。  详情 回复 发表于 2023-2-15 14:35
ccwuax 发表于 2023-2-14 12:31
Hmily 发表于 2023-2-14 11:17
@ccwuax 你这举报什么意思?没看懂

这贴就是引流到csdn让我们去付费订阅的,写的是原创,但这贴子完全没提供思路和分析过程,真的要想了解过程和JS 逆向的就必须去CSDN付费看

点评

@cenjy9 解释下?  详情 回复 发表于 2023-2-15 10:47
dlytang 发表于 2023-2-14 01:03
QingTianGG 发表于 2023-2-14 01:26
我还以为有人公开算法了
头像被屏蔽
hwxq43 发表于 2023-2-14 04:40
提示: 作者被禁止或删除 内容自动屏蔽
nitian0963 发表于 2023-2-14 08:24

感谢分享~~~
crwzxin 发表于 2023-2-14 08:25

感谢分享6666
20213 发表于 2023-2-14 08:27
感谢大佬无私
fyabcabc 发表于 2023-2-14 08:47
搬运的毫无痕迹
mrhu2014 发表于 2023-2-14 08:54
感谢大佬,学习了
xs2019 发表于 2023-2-14 09:02
大佬威武,感谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-12-25 09:39

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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