Xhs-web-live-danmu

admin 2026-04-18 06:58:42 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文介绍了小红书直播弹幕爬虫逆向过程,重点分析登录token生成机制。通过抓包发现token失效问题,追踪到sid生成依赖uid和deviceId参数,其中deviceId采用Python复现UUIDv4标准生成算法,包含安全随机数生成和位运算修正。文档提供完整代码实现,可直接用于模拟设备标识生成。 综合评分: 72 文章分类: 爬虫,逆向分析,WEB安全


cover_image

Xhs-web-live-danmu

可乐还是百事好 可乐还是百事好

爬虫逆向小林哥

2026年4月16日 10:30 江苏

在小说阅读器读本章

去阅读

介绍

过程

没啥值得分析的,抓个包把请求和通信前几次信息塞给calude,源码就直接出了

但是过一阵子就提示login token invalid

看了下wss通信内容,第一次会传一个sid,抓个新的就能用了,下面分析它咋生成

跟几轮异步就到了

入参是自己的uid和一个deviceId

从Storge读取,读取不到在生成

function _getLoginToken() {
    return (_getLoginToken = (0,
    s._)(function(e, t, n) {
        var r;
        return (0,
        c.Jh)(this, function(i) {
            switch (i.label) {
            case 0:
                if (!n && (r = getTokenFromStorage(e)))
                    return [2, r];
                return [4, fetchLoginToken(e, t)];
            case 1:
                return [2, i.sent()]
            }
        })
    })).apply(this, arguments)
}

localStorge删掉它,让它改走生成

就是个get请求,带上x-s、x-t就好了

DeviceId

import os

try:
    from secrets import token_bytes

    HAS_SECURE_RANDOM = True
except ImportError:
    HAS_SECURE_RANDOM = False

eo = [f"{i:02x}"for i in range(256)]

def rng():
    if HAS_SECURE_RANDOM:
        return bytearray(token_bytes(16))
    else:
        # 降级方案(极少环境用到)
        return bytearray(os.urandom(16))

def unsafeStringify(buf, offset=0):
    """完全复刻 JS 的 UUID 字符串格式化"""
    b = buf
    return (
        f"{eo[b[offset + 0]]}{eo[b[offset + 1]]}{eo[b[offset + 2]]}{eo[b[offset + 3]]}-"
        f"{eo[b[offset + 4]]}{eo[b[offset + 5]]}-"
        f"{eo[b[offset + 6]]}{eo[b[offset + 7]]}-"
        f"{eo[b[offset + 8]]}{eo[b[offset + 9]]}-"
        f"{eo[b[offset + 10]]}{eo[b[offset + 11]]}{eo[b[offset + 12]]}{eo[b[offset + 13]]}{eo[b[offset + 14]]}{eo[b[offset + 15]]}"
    )

def esm_browser_v4(options=None, buf=None, offset=0):
    """
    完全复刻 JS 版本 esm_browser_v4 函数
    功能:生成标准 UUID v4
    """
    # 优先使用安全随机(和 JS crypto.randomUUID 逻辑一致)
    if options is None and buf is None:
        import uuid
        return str(uuid.uuid4())

    # 生成随机 16 字节
    opts = options or {}
    rng_func = opts.get('random') or opts.get('rng') or rng
    er = bytearray(rng_func())

    # UUID v4 版本位修改(完全和 JS 一样)
    er[6] = (0x0F & er[6]) | 0x40
    er[8] = (0x3F & er[8]) | 0x80

    # 如果传入 buffer,就写入 buffer(和 JS 一致)
    if buf:
        for i in range(16):
            buf[offset + i] = er[i]
        return buf

    # 格式化输出字符串
    return unsafeStringify(er)

免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:爬虫逆向小林哥 可乐还是百事好 可乐还是百事好《Xhs-web-live-danmu》

Xhs-web-live-danmu 网络安全文章

Xhs-web-live-danmu

文章总结: 本文介绍了小红书直播弹幕爬虫逆向过程,重点分析登录token生成机制。通过抓包发现token失效问题,追踪到sid生成依赖uid和deviceId参
2026-04微软漏洞通告 网络安全文章

2026-04微软漏洞通告

文章总结: 微软2026年4月安全更新共披露165个漏洞,包含93个特权提升、20个远程代码执行、20个信息泄露漏洞,其中8个为高危、154个为严重级别。重点漏
评论:0   参与:  0