首页 > 编程语言 > 2024年小红书最新x-s-common签名算法分析以及点赞api接口测试nodejs(2024-01-05)

2024年小红书最新x-s-common签名算法分析以及点赞api接口测试nodejs(2024-01-05)

时间:2024-01-05 19:03:22浏览次数:42  
标签:web 01 encrypt 小红书 2024 headers let common data

    2024年小红书又更新了x-s-common算法,现在的版本是:3.6.8。这个签名算法现在是越来越重要了, 许多接口都要用到。比如:评论,点赞等接口,没有这个算法采集不到数据。

   一、chrome逆向x-s-common算法

   1、x-s-common

   打开chrome,按f12,打开开发者模式,随便找一接口,全局搜索:x-s-common,找到位置如下:

 2024年小红书最新x-s-common签名算法分析以及点赞api接口测试nodejs(2024-01-05)_x-s-common

(图1x-s-common算法位置)

    2、x-s-common参数

function xsCommon(t, e) {
            try {
                var r, n, o = t.platform, i = e.url, a = map_default()(NEED_XSCOMMON_URLS).call(NEED_XSCOMMON_URLS, (function(t) {
                    return new RegExp(t)
                }
                ));
                if (!some_default()(a).call(a, (function(t) {
                    return t.test(i)
                }
                )))
                    return e;
                var u = e.headers["X-t"] || ""
                  , c = e.headers["X-s"] || ""
                  , s = e.headers["X-Sign"] || ""
                  , l = getSigCount(u && c || s)
                  , f = localStorage.getItem(MINI_BROSWER_INFO_KEY)
                  , p = localStorage.getItem(RC4_SECRET_VERSION_KEY) || RC4_SECRET_VERSION
                  , d = {
                    s0: getPlatformCode(o),
                    s1: "",
                    x0: p,
                    x1: version,
                    x2: o || "PC",
                    x3: "xhs-pc-web",
                    x4: "3.23.0",
                    x5: js_cookie.Z.get(LOCAL_ID_KEY),
                    x6: u,
                    x7: c,
                    x8: f,
                    x9: encrypt_mcr(concat_default()(r = concat_default()(n = "".concat(u)).call(n, c)).call(r, f)),
                    x10: l
                };
                e.headers["X-S-Common"] = encrypt_b64Encode(encrypt_encodeUtf8(stringify_default()(d)))
            } catch (h) {}
            return e
        }
//提炼参数如下:
{
    "s0": 5,
    "s1": "",
    "x0": "1",
    "x1": "3.6.8",
    "x2": "Windows",
    "x3": "xhs-pc-web",
    "x4": "3.23.1",
    "x5": "186d30820a4m09cb6glhxe1aqks2olv1l97ow1gun50000408882",
    "x6": 1704412623681,
    "x7": "XYW_eyJzaWduU3ZuIjoiNTEiLCJzaWduVHlwZSI6IngxIiwiYXBwSWQiOiJ4aHMtcGMtd2ViIiwic2lnblZlcnNpb24iOiIxIiwicGF5bG9hZCI6IjU5ZTg4ODZkYTE5OTg3ZjNlNTNkOWM0YjljZmZjYjUwMGU4YzA2MWY0Y2I3YTBhYjc5YWI2MGU0NjYxN2UxZTdmMDIzNmYzOGM0YjEwMzllZjFkYzU3MmE5N2NiNTliYWM5ZTNiZmRhMWZhYTFlYjkwZDc0YWEzMWI1NGM3MmNkMGQ3NGFhMzFiNTRjNzJjZGFjNDg5YjlkYThjZTVlNDhmNGFmYjlhY2ZjM2VhMjZmZTBiMjY2YTZiNGNjM2NiNTUyYjFkZWM4MTkzYzQwNjMwODhlN2EwZTFhZjcyMGE0N2VhZGMxNzQ2ZDA3MWI3MmYwYzBmNzk0M2U3YjAyMzU0NWU4MTFjZDQ3NGZkZGMxODQ5MTU2NjA5ZTJmYWI5YzZlZjI1ODc2ZDNmNGY5Mjk0NWZhOGExMWI1NWE3Yzk1YWEyMWRmZjNiMjgxOThmZWU2MDg3ODNlYTQyNjNlNzU3MWMyZjY5MmYwZmY4Y2IyZWY1N2M4ZmJjNDk3YmVhOCJ9",
    "x8": "I38rHdgsjopgIvesdVwgIC+oIELmBZ5e3VwXLgFTIxS3bqwErFeexd0ekncAzMFYnqthIhJeSBMDKutRI3KsYorWHPtGrbV0P9WfIi/eWc6eYqtyQApPI37ekmR1QL+5Ii6sdnoeSfqYHqwl2qt5BfqJIvFbNLQ+ZPw7Ixdsxuwr4qtkIkrwIi/skZc3ICLdI3Oe0utl2ADZsL5eDSJsSPwXIEvsiVtJOPw8BuwfPpdeTDWOIx4VIiu6ZPwbJqt0IxHyoMAeVutWIvvs6VtrIkSKIimrzf7sY9GdZ0vsYutmor/e0lD9oooeYlqZI3gsYuwZIEesjVtIcYT0OoVGIvgeiqtR/Ygexdp8IhTLIEY2Q7PjI3RG4mQgIiifpVwAICrVJo3eDbvekVtlIx3s0U6sfgu4IENs6DZ3yutiIkos1ovskY/skVw2enNsSPwVIC+ssA7eSuwkggKsWVw8IxI2I38DsqwZgVtLzdbLtb6ekLAs6uwmIE3sS76sVzZvIEF=",
    "x9": -850196713,
    "x10": 137
}

参数分析如下:

s0: getPlatformCode(o),

固定值,web端为:5

s1: "",

固定值,web端为:空

x0: p,p = localStorage.getItem(RC4_SECRET_VERSION_KEY) || RC4_SECRET_VERSION

固定值,web端为:1

x1: version,    

固定值,版本号,当前版本为:"3.6.8",

"x2": o || "PC",

固定值"Windows",,表示平台类型。

x3: "xhs-pc-web",

固定值,程序类型

x4: "3.23.0",

固定值,内部版本号

x5: js_cookie.Z.get(LOCAL_ID_KEY),

该值为:a1,从cookie中获取。

"x6": u,u = e.headers["X-t"] || ""

该值为:x-t,从x-s签名算法中返回。

"x7": c,c = e.headers["X-s"] || ""

该值为:X-s,从x-s签名算法中返回。

x8: f,localStorage.getItem(MINI_BROSWER_INFO_KEY)

该值为:浏览器指纹,每个浏览器值不同,但基本上可以固定不变。

x9: encrypt_mcr(concat_default()(r = concat_default()(n = "".concat(u)).call(n, c)).call(r, f)),

可以简化如下:

let mcr=encrypt_mcr(xt+xs+b1);

该值为:x6+x7+x8的加密。

x10: l=getSigCount()

该值为:调用x-s-common的计数值。

3、加密函数

e.headers["X-S-Common"] = encrypt_b64Encode(encrypt_encodeUtf8(stringify_default()(d)))

stringify_default()实际上是:JSON.stringify(d))

4、encrypt_mcr算法

 2024年小红书最新x-s-common签名算法分析以及点赞api接口测试nodejs(2024-01-05)_javascript逆向_02

(图2encrypt_mcr算法)

5、encrypt_b64Encode加密

 2024年小红书最新x-s-common签名算法分析以及点赞api接口测试nodejs(2024-01-05)_api接口_03

(图3encrypt_b64Encode加密)

6、encrypt_encodeUtf8加密

 2024年小红书最新x-s-common签名算法分析以及点赞api接口测试nodejs(2024-01-05)_javascript逆向_04

(图4encrypt_encodeUtf8加密)


7、x-s-common测试结果对比

 2024年小红书最新x-s-common签名算法分析以及点赞api接口测试nodejs(2024-01-05)_api接口_05

 2024年小红书最新x-s-common签名算法分析以及点赞api接口测试nodejs(2024-01-05)_api接口_06

(图5,图6x-s-common测试结果对比)

可见,nodejs环境算出的结果与浏览器一致。


二、点赞接口测试

   点赞接口需要x-s-common签名参数,否则点赞不成功。

1、nodejs点赞接口源码如下:

const https = require('node:https');
//----------------------------------------------调用模块初始化----------------------------------------------------
const m_common_data = require('./x-s-common.js');//X-S-Common签名
const m_xs_data = require('./xs.js');//X-S签名
//mode by wx:byc6352 in 2024-01-05
//-----------------------------------------------------------------------------------------------------------------------
set_lick(true);//true为点赞,false为取消点赞

async function set_lick(b){
    let url="";
    if(b)
        url="https://edith.xiaohongshu.com/api/sns/web/v1/note/like";
    else
        url="https://edith.xiaohongshu.com/api/sns/web/v1/note/dislike";
    let path=url.replace("https://edith.xiaohongshu.com","");
    let data={"note_oid":"649ce312000000000800edcd"};
    let data_str=JSON.stringify(data);
    let a1="18cb6c8af05699x2fcmw6t6jwq9yi8kjhc6ge611l50000415372";
    let o=await m_xs_data.get_xs(path,data_str,a1);
    var xs=o["X-s"];
    var xt=o["X-t"];
    let x_common=m_common_data.get_common(a1,xt,xs);
   
    let traceid=m_common_data.get_traceid();

    let headers={
        "authority":'edith.xiaohongshu.com',
        "method":'POST',
        "path":path,//'/api/sns/web/v1/note/like',
        "scheme":'https',
        "Accept":'application/json, text/plain, */*',
        //"Accept-Encoding":'gzip, deflate, br',
        "Accept-Language":'zh-CN,zh;q=0.9',
        "Content-Length":data_str.length,//'39',
        "Content-Type":'application/json;charset=UTF-8',
        "Cookie":cookie,
        "Origin":'https://www.xiaohongshu.com',
        "Referer":'https://www.xiaohongshu.com/',
        "Sec-Ch-Ua":'"Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"',
        "Sec-Ch-Ua-Mobile":'?0',
        "Sec-Ch-Ua-Platform":'"Windows"',
        "Sec-Fetch-Dest":'empty',
        "Sec-Fetch-Mode":'cors',
        "Sec-Fetch-Site":'same-site',
        "User-Agent":'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
        "X-B3-Traceid":traceid,//'0b0b047c4d54393b',
        "X-S":xs,
        "X-S-Common":x_common,
        "X-T":xt,
    }//
    const options = {
        hostname: 'edith.xiaohongshu.com',
        port: 443,
        path: path,
        method: 'POST',
        headers: headers
    }
    let req = https.request(url,options, (res) => {
        console.log(`STATUS: ${res.statusCode}`);
        console.log(`HEADERS: ${JSON.stringify(res.headers)}`);
        res.setEncoding('utf8');
        var body="";
        res.on('data', (chunk) => {
            body=body+chunk;
        });
        res.on('end', () => {
            try {
               console.log(body);
            }catch (e){
                console.error(e);
            }
        });
        res.on('close', () => {

        });
    });

    req.on('error', (e) => {
        console.error(`problem with request: ${e.message}`);
    });
    req.write(data_str,'utf8');
    req.end();

}

2、接口运行成功

技术支持:6Zeu6aKY5ZKo6K+i77yadng6YnljNjM1MiBvciBtZXRhYnljZjtRUTozOTg0ODg3Mjt0ZWxlZ3JhbTpieWMwMQ==(base64解码)

 2024年小红书最新x-s-common签名算法分析以及点赞api接口测试nodejs(2024-01-05)_api接口_07

(图6成功点赞)

大功造成!!!








标签:web,01,encrypt,小红书,2024,headers,let,common,data
From: https://blog.51cto.com/u_16113078/9116643

相关文章

  • 2023-2024-1 20231312 《计算机基础与程序设计》第十五周学习总结
    作业信息这个作业属于哪个课程<班级的链接>2023-2024-1-计算机基础与程序设计|-这个作业要求在哪里<作业要求链接>2023-2024-1计算机基础与程序设计第6周作业|这个作业的目标课程总结|作业正文作业链接第一周目标:课程概论,工业革命与浪潮之巅,信息与信......
  • 6本报告,助你2024招聘「才」源滚滚!
    新的一年已经拉开序幕,面对全球经济的不确定性,,各行各业都在热切关注着他们未来的发展前景,人力资源行业正站在一个崭新的起点。在这个充满挑战与机遇的时代,技术进步的速度令人叹为观止,企业对技术创新和人才招聘的重视将进一步提升......在各种因素的共同作用下,新的一年将迎来哪些变革......
  • 2024香港数字经济峰会暨Web3.0标准化协会成立
    2024年1月4日,香港举办了数字经济发展峰会,这次盛会聚焦数字化转型对经济带来的新机遇,展望香港在数字经济领域的未来发展。此次峰会突出了大湾区数字化创新发展的重要性,致力于加速推进数字经济的发展。香港数字经济峰会亮点:全国政协副主席、大湾区国际信息科技协会主席梁振英、香港特......
  • 2024大模型的“搞钱”之道:先主宰产业助理Agent
    文|智能相对论(aixdlun)作者|沈浪大模型火了快一年,怎么赚钱成为了业内厂商头疼的事情。或许,这场由OpenAI旗下ChatGPT引爆的大模型热潮,还得继续聚焦OpenAI来寻求答案。前不久,OpenAI“煞有其事”地像谷歌、苹果那样办了第一场较为正式的“开发者大会”。从大会透露的信息来看,大模型......
  • 南外集训 2024.1.5 T3
    非常简单的一道题。要好好反思为什么没有做出来。题意给定一棵点带权的树,强制在线询问一条链上取恰好\(m\)个数按位与的最大值。\(1\len\le10^6,1\leq\le10^5,1\lem\le10,0\leV<2^{62}\)。解法考虑一个暴力:取出树链上所有点权,二分答案\(x\),则需要检查是否存在至......
  • CES 2024前瞻:PC迈入AI时代
    备受瞩目的2024年消费电子展(CES)将于美国西部时间1月9日在拉斯维加斯开幕,即将登场的大量突破性技术进步令人期待不已。尤其是在今年,AI人工智能当仁不让地成为焦点,由AI赋能的各类产品将覆盖人们生活的方方面面。根据已有消息,包括华硕、戴尔、NVIDIA、三星、英特尔、AMD、海信、......
  • KubeSphere 社区双周报 | 2023.12.21-2024.01.04
    KubeSphere社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过commit的贡献者,并对近期重要的PR进行解析,同时还包含了线上/线下活动和布道推广等一系列社区动态。本次双周报涵盖时间为:2023.12.21-2024.01.04。贡献者名单新晋KubeSpherecon......
  • 2024年:数字化转型的冷思考与务实前行_光点科技
    随着2023年的落幕,企业界对于数字化的热潮似乎也逐渐降温。曾经,数字化转型被视为企业发展的救星,它预示着效率的提升和竞争力的增强。然而,经过一年的实践和探索,许多企业开始从数字化的虚火中清醒,进入更加理性的思考期。在这一转变的关键时刻,我们必须反思数字化转型的本质是什么,以及我......
  • AutoCAD Civil 3D 2024:实现精准建模与仿真,优化基础设施项目
    AutoCADCivil3D2024是一款专门为土木工程师和土地设计师打造的高级三维设计软件。它基于AutoCAD平台,并提供了丰富的工具和功能,以支持从规划、设计到施工的整个基础设施项目生命周期。点击获取AutoCADCivil3D2024AutoCADCivil3D2024引入了许多新功能和改进,以提升用......
  • SolidWorks 2024:实现高效、精确的3D建模与仿真
    SolidWorks2024是一款功能强大的三维CAD(计算机辅助设计)软件,广泛应用于机械、汽车、航空航天、电子和消费品等领域的工程设计。它为用户提供了一个易于使用的界面和丰富的工具集,以帮助工程师创建、分析和优化产品设计。点击获取SolidWorks2024 SolidWorks2024引入了许多新......