快手web验证日志分析

news2024/11/25 12:47:26

文章目录

    • log参数
      • session_id
      • identity
      • project_id
    • 流程1-4
      • 请求参数sign
      • 日志formdata
        • 82
        • 85
        • 86


log参数

为了确定日志中是否有参数和IP绑定,检查了session_id参数。

session_id

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

session_id

i = (wn[e[t + 0]] + wn[e[t + 1]] + wn[e[t + 2]] + wn[e[t + 3]] + "-" + wn[e[t + 4]] + wn[e[t + 5]] + "-" + wn[e[t + 6]] + wn[e[t + 7]] + "-" + wn[e[t + 8]] + wn[e[t + 9]] + "-" + wn[e[t + 10]] + wn[e[t + 11]] + wn[e[t + 12]] + wn[e[t + 13]] + wn[e[t + 14]] + wn[e[t + 15]]).toLowerCase();

生成

const crypto = require('crypto');


function Ln() {
    var Cn = new Uint8Array(16);
    return getRandomValues(Cn)
}


function getRandomValues(arr) {
    if (!(arr instanceof Uint8Array)) {
        throw new TypeError("Argument should be a Uint8Array");
      }
    crypto.randomFillSync(arr);
    return arr;
}


for (var Rn = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i,
         Dn = function(e) {
                return "string" == typeof e && Rn.test(e)
                },
        wn = [], In = 0; In < 256; ++In
)

wn.push((In + 256).toString(16).substr(1));


function MN(e, t, i) {
        var n = (e = e || {}).random || (e.rng || Ln)();
        if (n[6] = 15 & n[6] | 64,
        n[8] = 63 & n[8] | 128,
        t) {
            i = i || 0;
            for (var r = 0; r < 16; ++r)
                t[i + r] = n[r];
            return t
        }
        return Nn(n)
    }


function Nn(e) {
        var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0
          , i = (wn[e[t + 0]] + wn[e[t + 1]] + wn[e[t + 2]] + wn[e[t + 3]] + "-" + wn[e[t + 4]] + wn[e[t + 5]] + "-" + wn[e[t + 6]] + wn[e[t + 7]] + "-" + wn[e[t + 8]] + wn[e[t + 9]] + "-" + wn[e[t + 10]] + wn[e[t + 11]] + wn[e[t + 12]] + wn[e[t + 13]] + wn[e[t + 14]] + wn[e[t + 15]]).toLowerCase();
        if (!Dn(i))
            throw TypeError("Stringified UUID is invalid");
        return i
    }


console.log(MN({},undefined,undefined))

session_id 只是普通的uuid

identity

function F() {
           return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (function(t) {
               var e = 16 * Math.random() | 0;
               return ("x" == t ? e : 3 & e | 8).toString(16)
           }
           ))
       }

需要注意中间有个4。

project_id

没仔细看,new-reco页面定值76d8154812


这三个用python还原下。

import os
import random

project_id = "76d8154812"

def generate_identity():
    uuid_template = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx"
    uuid = ""
    for char in uuid_template:
        if char == "x":
            uuid += format(random.randint(0, 15), "x")
        elif char == "y":
            uuid += format(random.randint(8, 11), "x")
        else:
            uuid += char
    return uuid

def generate_session_id(t=None, i=0):
    n = bytearray(os.urandom(16))
    t = t or bytearray(16)
    n[6] = 15 & n[6] | 64
    n[8] = 63 & n[8] | 128
    for r in range(16):
        t[i + r] = n[r]
    i = "".join([("%02x" % x) for x in t])
    i = i[:8] + "-" + i[8:12] + "-" + i[12:16] + "-" + i[16:20] + "-" + i[20:]
    return i

流程1-4

在 gdfp.gifshow.com/p/z/s 找到了上传IP和指纹的信息。
在这里插入图片描述
看起来是一个网络传输协议中的候选者信息,每个分号后面的部分都表示一个具体的候选者的属性信息。

其中包括了IP地址、端口、类型等信息。这些信息在网络通信中用于选择最佳的通信路径。候选者信息是使用SDP协议的语法进行编码的,每个候选者信息是一个SDP媒体描述符,并且它们使用分号来分隔。每一个分号后面的部分都代表了媒体描述符的各个属性。在这些候选者信息中,常用属性包括:

candidate: <foundation> <component-id> <transport> <priority> <connection-address> <port> typ <candidate-type> [raddr <rel-addr>] [rport <rel-port>]

其中:
foundation 是一个字符串,表示候选者的基础属性;
component-id 是这个部分的ID,通常是 1;
transport 是协议类型,常见的有 udp 和 tcp;
priority 代表优先级;
connection-address 和 port 是地址和端口信息;
typ 表示候选者的类型,包括 host、srflx 和 relay 等;
raddr 和 rport 表示候选者反射后的地址和端口号,用于服务器反射类型的候选者。

所以这两则日志比较关键,bussType是com.vision.gifshow 和 manMachine。man Machine 翻译过来就是人机。

在这里插入图片描述

接下来构建。

请求参数sign

sign = Y(i + o + a)
在这里插入图片描述

from lxpy import get_md5
def get_sign():
    appKey = "10001001"
    timestamp = int(time.time())
    seckey = "f2fff381c551a8dcdb765e316f3d44ac"
    return get_md5(appKey+seckey+str(timestamp))

appKey 和seckey 固定。

日志formdata

base64解码可以看到data明文。
在这里插入图片描述
参数太多了,除了session_id、多个identity,还有一堆指纹、时间、候选者信息。

82

日志中 82 的这些pc、ph、wf、wh、cf、ch、mf之类又和滑块验证时的设备指纹不同。
在这里插入图片描述

看起来像是一个包含了不同维度的浏览器元素信息。

pc: 页面缩放比例(单位%)
ph: 浏览器边框的哈希值
wf: 文档可视宽度
wh: 文档可视高度的哈希值
cf: 容器的宽度
ch: 容器的高度的哈希值
mf: 元素的宽度
mh: 元素的高度的哈希值
ff: 字体大小
fh: 字体的哈希值
af: 元素的绝对宽度
ah: 元素的绝对高度的哈希值
gr: 元素的相对宽度
gh: 元素的相对高度的哈希值
el: 文档的字体大小
eh: 文档的字体的哈希值
ow: 窗口的宽度
oh: 窗口的高度的哈希值
ky: 计算元素所用的比例
kh: 计算元素所用的比例的哈希值
ci: 元素的内容宽度
ih: 元素的内容高度的哈希值。

都是猜的我也不确定,一般通过这些参数能更好地了解用户环境和行为。

85

85是前面提到的网络传输协议中的候选者信息,包含了用户当前IP。

86

86是一个实时通信协议WebRTC的SDP请求的信息。其中了包含以下信息:
v=0: SDP协议版本
o=- 1008972795223404285 2 IN IP4 127.0.0.1: 连接的会话信息(包括源地址、会话ID、版本号、网络地址等)
s=-: 会话名称
t=0 0: 会话起始时间和结束时间
a=group:BUNDLE 0: 分组信息,此处表示聚合了一个流
a=extmap-allow-mixed: 扩展映射
a=msid-semantic: WMS:媒体流标识符语义
m=application 9 UDP/DTLS/SCTP webrtc-datachannel: 媒体流描述(应用程序数据和Webrtc数据通道)
c=IN IP4 0.0.0.0: IP网络连接地址
a=candidate:…: ICE候选地址信息
a=fingerprint:…: DTLS摘要指纹
a=setup:…: 安装过程
a=mid:0:媒体流ID
a=sctp-port:5000:SCTP传输控制协议端口
a=max-message-size:262144: 数据最大消息大小限制
c=IN IP4 {IP}: IP网络连接地址


日志中要看的参数太多了,大家可以简单构建一下请求,看看缘分吧。


关注公众号《Pythonlx》可获取群聊二维码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/661669.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

rk3568 长按电源键关机修改

rk3568 电源键强制关机触发时间修改 Rockchip系列主控芯片配套PMIC支持长按电源键强制关闭PMU&#xff0c;也就是标题中的强制关机。rk3568使用I2C通信与PMIC(rk809/rk817)&#xff0c;power(电源)键则是与PMIC相连&#xff0c;PMIC监测按键状态控制RK3568的上下电&#xff0c;…

新增每日个股涨停原因及概念题材统计!股票量化分析工具QTYX-V2.6.6

功能概述 目前A股市场主旋律仍然是以行业及题材板块的热点轮动为主&#xff0c;因此从某种意义上来说&#xff0c;板块的强弱决定了选出个股的强弱。 我们的股票量化分析工具QTYX目前已经支持了统计行业板块内涨停板数量功能。‍ 为了进一步分析出市场上启动的热点概念题材。我…

vscode远程连接linux服务器

Linux服务器&#xff08;或虚拟机&#xff09;条件&#xff1a; 开启ssh服务 客户端&#xff1a; vscode 1.服务端 服务端需要开启ssh服务vscode才能连接&#xff0c;首先检验linux是否开启了ssh服务 systemctl status sshd servie sshd status 运行命令&#xff0c;如果可…

视频基础知识——编码时,帧率、码率、分辨率之间的联系

本文主要补充基础概念&#xff0c;在设置编码器的时候&#xff0c;参数设置不对&#xff0c;录制的屏幕就会出现花屏。所以梳理了基础知识&#xff0c;就知道哪里设置不对了。 如下是ffmpeg自带的sample&#xff0c;encode_video的例子&#xff0c;选取H264的编码器&#xff0c…

基于SpringBoot和协同过滤算法的体育商城系统的实现

最近帮小伙伴做了个基于SpringBoot和协同过滤算法的体育商城系统。 文章目录 一&#xff0c;SpingBoot介绍二&#xff0c;协同过滤算法介绍三&#xff0c;系统功能需求四&#xff0c;系统功能演示五&#xff0c;系统核心代码演示 一&#xff0c;SpingBoot介绍 现如今后台开源框…

企业寻求最大化投资回报率的24个社交媒体技巧

社交媒体营销不是银弹。它不会解决您所有的业务问题&#xff0c;也不会让您一夜成名。但是&#xff0c;如果您愿意投入时间和精力&#xff0c;社交媒体可以成为建立关系、建立信誉和发展业务的强大工具。 在这篇文章中&#xff0c;我们将分享24个社交媒体技巧&#xff0c;以帮…

React 演示Hook中发送网络请求

我这里本地用java写了个接口 当我访问 http://localhost:8080/books 就会发出一个无惨的 get请求 返回内容如下 这里 我返回了一个 json对象 然后 我们在react项目的src目录下创建setupProxy.js 参考代码如下 const proxy require(http-proxy-middleware)module.exports f…

您的Android密钥安全吗?一招教你安全加固

您的Android密钥安全吗&#xff1f;一招教你安全加固 你是否担心你的Android应用中的敏感数据会被披露出去&#xff1f;如果是的话&#xff0c;别担心&#xff0c;你并不是唯一一个有这样担忧的人。在今天的世界里&#xff0c;保护你的应用的URL和密钥免受逆向工程的风险变得比…

前端Vue图片上传组件支持单个文件多个文件上传 自定义上传数量 预览删除图片 图片压缩

前端Vue图片上传组件支持单个文件多个文件上传 自定义上传数量 预览删除图片 图片压缩&#xff0c; 下载完整代码请访问uni-app插件市场址:https://ext.dcloud.net.cn/plugin?id13099 效果图如下&#xff1a; ## 1.0.0&#xff08;2023-06-18&#xff09; 组件初始化 #### …

三、多层感知机及模型优化

文章目录 前言一、多层感知机1.1 隐藏层1.1.1 什么叫隐藏层1.1.2 为什么需要隐藏层 1.2 激活函数1.2.1 ReLU函数1.2.2 Sigmoid函数1.2.3 tanh函数 1.3 多层感知机的代码实现 二、模型选择、欠拟合和过拟合2.1 训练误差和泛化误差2.2 模型选择2.2.1 模型复杂性2.2.2 验证集2.2.3…

机器学习强基计划9-1:图解匹配追踪(MP)与正交匹配追踪(OMP)算法

目录 0 写在前面1 字典学习2 稀疏表示与稀疏编码3 匹配追踪MP算法4 正交匹配追踪OMP算法 0 写在前面 机器学习强基计划聚焦深度和广度&#xff0c;加深对机器学习模型的理解与应用。“深”在详细推导算法模型背后的数学原理&#xff1b;“广”在分析多个机器学习模型&#xff…

CSS小技巧之悬停3D发光效果

今天要实现的效果如图所示&#xff0c;鼠标悬停是图片卡片会有3D翻转的效果&#xff0c;且动画过程中还带有发光的效果。类似这种3D悬停效果日常看到的比较多&#xff0c;但是今天实现的这个效果有以下几个亮点&#xff1a; 核心CSS代码不超过10行没有额外的元素&#xff08;只…

STM32 MCO+SPI获取24位模数转换(24bit ADC)高速芯片ADS1271采样数据

STM32 MCOSPI获取24位模数转换&#xff08;24bit ADC&#xff09;高速芯片ADS1271采样数据 STM32大部分芯片只有12位的ADC采样性能&#xff0c;如果要实现更高精度的模数转换如24位ADC采样&#xff0c;则需要连接外部ADC实现。ADS1271是 TI公司一款高速24位Σ-Δ型模数转换器(…

[每周一更]-(第50期):Go的垃圾回收GC

参考文章&#xff1a; https://juejin.cn/post/7111515970669117447https://draveness.me/golang/docs/part3-runtime/ch07-memory/golang-garbage-collector/https://colobu.com/2022/07/16/A-Guide-to-the-Go-Garbage-Collector/https://liangyaopei.github.io/2021/01/02/g…

【前端布局篇】浮动、定位、弹性布局,固比固、双飞翼、圣杯布局

一、布局方式介绍 布局模型是基于盒模型基础上进行的拓展&#xff0c;关于布局有流式布局&#xff08;标准的布局&#xff09;&#xff0c;浮动布局、定位布局、flex布局等。 1.1 标准流&#xff08;流动模型&#xff09; 描述&#xff1a;元素按照自己默认的元素类型在页面…

社区问答精选——长安链开发知多少?(6月)

此次整理的内容为5-6月社群内的问答供更多开发者参考&#xff08;社群中部分优质问题连贯性不足未能收录&#xff0c;欢迎点击公众号菜单栏加入社群共同交流&#xff09;。有更多问答在社区issue中描述更为细致&#xff0c;开发者提问前可以先按照关键词进行搜索。欢迎各位开发…

Doris FE启动流程源码解读

FE启动流程分析 Doris中FE主要负责接收和返回客户端请求、元数据以及集群管理、查询计划生成等工作。 本文主要看一下Doris的fe在启动时做了什么。 启动流程分析 启动流程图&#xff1a; 代码路径&#xff1a; doris/fe/fe-core/src/main/java/org/apache/doris/DorisFE.j…

华为云CodeArts Build快速上手编译构建-进阶玩家体验

华为云CodeArts Build编译构建为开发者提供配置简单的混合语言构建平台&#xff0c;实现编译构建云端化&#xff0c;支撑企业实现持续交付&#xff0c;缩短交付周期&#xff0c;提升交付效率。支持编译构建任务一键创建、配置和执行&#xff0c;实现获取代码、构建、打包等活动…

react+antd实现表格封装,可动态控制列显示隐藏。

实现效果 import { Table, Pagination, Button, Dropdown, Checkbox, message } from antd; import { useState, useEffect } from react; import { PicRightOutlined } from ant-design/icons;import ./index.less;const TableComponent (props) > {const powerList JSON…

【方法】Excel表格的“打开密码”不想要了,如何取消?

对于重要的Excel表格&#xff0c;很多小伙伴都会设置“打开密码”&#xff0c;这样就无法随意打开表格&#xff0c;只有输入正确的密码才可以打开。 如果后续表格不再需要保护&#xff0c;每次打开都要输一次密码&#xff0c;这样操作也是很麻烦。 那不想要“打开密码”&…