【更新】 简析小红书Web端两个请求参数

admin 2024年5月18日16:25:39评论11 views字数 2321阅读7分44秒阅读模式

这是小红书web端前一个版本

心态与度量,公众号:随心记事(限免版)逆向分析小红署Web端请求参数

很久前有朋友反馈说小红书请求参数加密方式变了,一直没时间看。

话不多说,进入正题。这里就不对某些细节进行赘述了。

再探请求参数

【更新】 简析小红书Web端两个请求参数

发现多了这玩意,根据朋友反馈说 feed 请求不加 X-S-Common 参数也能返回数据。

不过在爬取数据时候,我们还是对其进行分析重现比较稳妥些。

关于 X-S-Common 参数的分析

【更新】 简析小红书Web端两个请求参数

在有函数调用的地方下个断点,之后触发一下:

【更新】 简析小红书Web端两个请求参数

NEED_XSCOMMON_URLS 这个数组表示哪些请求路径要加X-S-Common 参数

【更新】 简析小红书Web端两个请求参数

feed 请求能够进入到断点,说明是在这个列表里面。

getSigCount 这个函数应该是表示带参数请求了几次,但很可能会涉及到风控问题。未登录爬取数据时候可以随便写。

【更新】 简析小红书Web端两个请求参数

MINI_BROSWER_INFO_KEY 的值是 b1,表示从本地存储中取出 b1 的值。

RC4_SECRET_VERSION_KEY 的值是固定的 1,应该是代表加密版本。

getPlatformCode 用于获取操作系统对应的代码,我是MacOS对应的值是 3

LOCAL_ID_KEY 的值是 a1,从cookie里读取 a1 的值

concat_default 函数原型是 ()=>(o=>o.concat); 就是字符串拼接。

现在我们来看下:

【更新】 简析小红书Web端两个请求参数

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

来简化下这一串:

n="".concat(u)

u 是参数header里的x-t值是数值类型,这个操作把数值类型转成字符类型。

concat_default()(x-t).call(x-t, c)

concat_default 返回了字符串拼接函数。call 方法的第一个参数是函数内this指向,后面的参数是函数的参数。c 是 x-s 的值所以又可简化成:

x-t + x-s

.call(r, f) f是本地存储里的b1的值,所以又可以简化成:

x-+ x-s + b1

对比一下结果:

【更新】 简析小红书Web端两个请求参数

可以看到确实是这样的。

除此之外还有另一种方法,不用一个个表达式进行拆分。这样太累了

我们可以 hook 字符串的拼接函数,根据打印出来的拼接内容来确定:

【更新】 简析小红书Web端两个请求参数

之后就是 encrypt_mcr 函数了,定位到函数所在之处:

【更新】 简析小红书Web端两个请求参数

多往上翻翻,可以发现是个 webpackage 模块中的一个函数:

【更新】 简析小红书Web端两个请求参数

【更新】 简析小红书Web端两个请求参数

直接折叠起来,选中。复制粘贴到文本。接着使用AST处理下先把这个模块一层的函数都扣出来:

【更新】 简析小红书Web端两个请求参数

扣完以后运行肯定会报错,这时候缺啥补啥。这部分代码补起来简单,也就是几个变量需要补一下。

【更新】 简析小红书Web端两个请求参数

运行这条命令后,chrome的devtools会出现nodejs的图标:

【更新】 简析小红书Web端两个请求参数

点这个图标,就可以使用chrome的devtools来调试本地的js代码了。不过要注意的是虽然看过去是devtools的样子,但实际上代码是node环境。也就是没有浏览器的一些环境,例如 dom 环境。

这是浏览器上执行出来的结果:

【更新】 简析小红书Web端两个请求参数

我们把加密之前的数据复制一下,到node环境的devtools中去测试:

【更新】 简析小红书Web端两个请求参数

可以看到加密出来的结果一致,证明本地代码是没有问题的。这里我特地在控制台查看了document,可以看出此时是在node环境下而非浏览器环境。

至此,x-s-common 已本地化完毕。

关于 X-S 参数的分析

接在当前文件搜索 X-s 后,找到给headers赋值的地方下断。因为前边的x-s-common函数的参数中x-s是包含在headers对象之中。

【更新】 简析小红书Web端两个请求参数

可以看到 window._webmsxyw 函数,是挂载到window对象上的。这一点很重要。

把鼠标放在函数上,提示函数定义的位置是在另一个文件中:

【更新】 简析小红书Web端两个请求参数

点进去看一下:

【更新】 简析小红书Web端两个请求参数

【更新】 简析小红书Web端两个请求参数

【更新】 简析小红书Web端两个请求参数

看到是个闭包,大量的 p0 - p6 说明是个 jsvmp

如果你在经验不足的时候独自看到这,你会产生莫名的头疼以及一脸的绝望。

那,这咋办啊?莫慌,静下心来。

你这个事啊,我们讲不是说,不是说不办,那么但是呢,没有说啊,没有任何一件事我们谈说,说一定怎么怎么样,说不‌‌‌‌‌‌‌‌‌行吗,也不是,我们讲事在人为啊 ,我们可以想办法啊,可以想办法,这样,你这个晚一点,咱们到时候呢,对吧,我们这个,对吧,包括哎我这个到时候你看一看对吧,完了呢我给你把这个事对吧,好吧就先这样。

那么,既然这样,为什么不可以那样。

还记得我上边标红加粗的几个字:挂载到window对象上的。

也就是说这个函数是在vmp环境初始化完成时暴露出去的。

加上闭包的特性,就代表着它要与世隔绝。那我们还分析做甚?

直接全选,复制。代码部分扣完了...

验证一下,新开个标签页后把代码粘贴到控制台,回车。。再输入函数关键字,这不就蹦出来了。直接无视jsvmp里面具体在干些什么。

【更新】 简析小红书Web端两个请求参数

接下来就是熟悉的补环境环节,大致思路可以参照

这篇文章

心态与度量,公众号:随心记事知乎 X-Zse-96 参数

【更新】 简析小红书Web端两个请求参数

这一套组合拳下来,就差不多了。别忘了固定住几个随机数:

【更新】 简析小红书Web端两个请求参数

要补的跟浏览器计算出来的结果一模一样,还是得费些时间的。但是补的可以用于请求,那工作量就小多了。虽然说这样做可能会涉及到风控,但是披上代理IP的面具后在乎这个吗,对吧

测试生成的x-s是否可用有一个简单的方法,就是在赋值x-s时候下一个断点手动修改一下:

【更新】 简析小红书Web端两个请求参数本地生成的x-s值

【更新】 简析小红书Web端两个请求参数小红书页面上生成的x-s值

【更新】 简析小红书Web端两个请求参数修改 l 的值

这样做的好处是,可以不用准备 x-s-common 前提下对 x-s 测试。

修改完成后放开断点让请求发出去,如果响应了正确的内容那么恭喜你x-s通关了

文末结语

有问题,公众号内私聊。不一定会及时回复

本文完。

原文始发于微信公众号(随心记事):【更新】 简析小红书Web端两个请求参数

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年5月18日16:25:39
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【更新】 简析小红书Web端两个请求参数https://cn-sec.com/archives/2040436.html

发表评论

匿名网友 填写信息