Python 爬虫进阶必备 | 某新闻资讯站点参数 _signature 逻辑分析 (无...

咸鱼学Python

共 1757字,需浏览 4分钟

 ·

2022-01-21 01:21

点击上方“咸鱼学Python”,选择“加为星标

第一时间关注Python技术干货!


bda43e31a0701c2c1feaa29c311100b5.webp

图源:极简壁纸

今日网站

aHR0cHM6Ly93d3cudG91dGlhby5jb20v

不会吧,不会吧,不会有人还不会头条的sign

抓包分析与加密定位

打开网页,随便找到一个栏目,向下滑动可以抓到以下的请求包

22a0df70696afbdae3cdf4f199394ea9.webp

这里提交的参数里就有我们需要分析的参数_signature

现在直接搜索_signature,就可以直接定位到相关的位置了

a6d6c42faac979f66ba9bbef0ee5a163.webp

在这个文件中再次搜索,就可以看到如下代码

8b379c22d25eb4fded85a2333d1d79e3.webp

这里的r就是我们需要获取到的_signature

加密分析

先打上断点,可以看到,当代码运行到n的时候,还没有生成_signature

71efb35c93a95645ccb1a803cbeaf450.webp853abb2b845847bfa5ef5024127ce119.webp

当继续向下运行到r的时候就返回_signature的值了,所以上面那一大坨的代码里面只有S的逻辑才是我们需要的

e6add9f185f3eaf0f5c3ffe01e067024.webp

进入S中再次分析

7e4dc4c85b4b06bb355b065035de922d.webp

这里可以看到传入的参数只和url有关,o以上的代码都很简单就是对url进行拼接的操作而已,但是最后返回的o等于一大长串

继续看o的逻辑

var o = (null === (n = window.byted_acrawler) || void 0 === n ? void 0 : null === (r = n.sign) || void 0 === r ? void 0 : r.call(n, i))

看这个逻辑之前,需要有几个关于 js 的姿势储备

1、===,这个的意思就是判断三等号左右两端的值和类型是否相等,只有值和类型都相等才为true

2、value = 条件?值1:值2,这个是当前面的条件判断为true时,赋值值1,为false时返回值2

3、||, 或的逻辑运算符,参与运算的任意一个参数为 true,返回的结果就为 true,否则返回 false

了解了上面的几个 js 知识之后,现在再来看o

首先null === (n = window.byted_acrawler)肯定是不相等的,所以这个时候o可简写为

var o = (false || void 0 === n ? void 0 : null === (r = n.sign) || void 0 === r ? void 0 : r.call(n, i))

之后void 0 === n肯定也是不相等的结果为 false,所以void 0 === n ? void 0 : null === (r = n.sign)返回的是null === (r = n.sign),同时null === (r = n.sign)也是不相等的,这个时候o可简写为

var o = (false || false || void 0 === r ? void 0 : r.call(n, i))

同样的void 0 === r的结果是false,返回的是r.call(n, i),这个时候o可简写为

var o = (false || false || r.call(n, i))

这个时候的逻辑运算结果var o = r.call(n, i)

这里的nwindow.byted_acrawler,这里的i是上面拼接好的urlrn.sign也就是window.byted_acrawler.sign

var i = {
    url: a + e
};

所以o就是window.byted_acrawler.sign.call(window.byted_acrawler,url),简化的结果就是window.byted_acrawler.sign(url)

现在就是jsvmp了,反正我干不出来,补环境直接冲就是了

9b5aac29f3d1ce0f1c3291aef500434c.webp

这个js放到html就能直接用

7d7ef2d29a31efa1c3cd806ae2df176a.webp

就是有点短,不过用来请求问题不大

如果要用node直接运行,肯定会报错的,因为node少浏览器环境,这个大家应该都知道

这里提供两个方案

1、jsdom,这个不会补环境的朋友应该没少用吧,npm instal jsdom,就可以安装了,然后按照运行报错缺啥补啥就行了

2、这个可以参考补环境的课程,用 vm2 补,补的视频链接放后台,回复【补环境】获取,照着来就行。

好了,以上就是今天的全部内容了。

我是没有更新就在摸鱼的咸鱼

收到请回复~

我们下次再见。

5f3a6e56bd926b0c5e9909c7ef135bfa.webp对了,看完记得一键四连,这个对我真的很重要。

浏览 51
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报