雪重 Python Developer 知识 汗水 灵感 机遇
2021年7月30日   spider js逆向

某红书web个人主页cookie:timestamp2生成

某红书web版上面的数据比较少,本着学习的态度,我们来看下web版访问页面必带的cookie:timestamp2的生成算法。网站地址(base64):aHR0cHM6Ly93d3cueGlhb2hvbmdzaHUuY29tL3VzZXIvcHJvZmlsZS81YzZjMzA5OTAwMDAwMDAwMTAwMWQ3MGQ=

1.确认必传的cookie值

个人主页的视频列表是静态数据,当我们不带cookie直接访问时会返回这样的一坨东西,没有我们想要的数据

image-20210726223621090

当我们带着cookie访问时,能正常返回数据(经过测试cookie里的timestamp2,为必传的值)

image-20210726223746143

2.定位cookie生成位置

我们全局搜索timestamp2的值(eg.20210726f5tr7588haec2ffad1601610)时会在https://**.xiaohongshu.com/fe_api/burdock/v2/shield/registerCanvas?p=cc这个接口发现response headers里有set-cookie: timestamp2=20210726f***,只要我们能访问这个接口就能获得cookie timestamp2的值。

此接口有两个请求参数,id和sign

image-20210726224833738

设置一个xhr断点,就能找到生成请求参数的那段js了

image-20210726225133634

这已经很明显了,我们继续根据堆栈调用找i,a。这个地方i.data为浏览器的一些属性(指纹),直接拷贝下来copy(i.data),参数有了,我们再将e方法扣下来

image-20210726225408394

image-20210726225506862

3.扣代码(不用补环境,已经将浏览浏览器属性收集完了i.data)

e方法长这样,直接拷贝下来,node运行哪里报错点哪里

image-20210726225926568

e方法结尾处u,c就是我们需要的id和sign,所以这个l方法直接注释掉,在这里直接return [u,c]

image-20210726230018224

当时迷惑的地方T()(o = ["webgl"]).call(o, i.key) && M()(i.value)),一个方法()(参数),可以理解为

image-20210726230811422

方法里好多用到了检查参数类型的地方比如,基本都是return true的

image-20210726231221222

最终来看一下我们能不能通过js生成的id和sign去请求registerCanvas?p=cc接口获得timestamp2 cookie

image-20210726231549872

带着这个cookie去访问个人主页,就能获取博主的视频列表啦