Python 爬虫进阶必备 | 某 d 榜单数据请求参数 k 加密逻辑分析

2022-12-10 16:08:43 浏览数 (1)

今日网站

aHR0cHM6Ly9hcHAuZGlhbmRpYW4uY29tL3JhbmsvaW9zLzEtNC0wLTc1LTI/dGltZT0xNjY4NTI4MDAwMDAwJmRldmljZT0x

这个网站是群友分享到群里的,之前应该没有写过,正好拿来当作素材

有一说一,第一次打开网站,我连加密参数是哪个都不知道

抓包分析

随便找一个榜单,然后点击全部榜单后无需登录

打开抓包,然后切换一下上面的分类就可以看到带有加密参数的请求了

请求如下

可以看到请求带有一个加密的参数 k

这就是本文需要分析的参数了

抓包部分多废话一下,避免有和我一样的憨批找不到加密的请求

加密定位

这种 xhr 请求的加密还是很好分析的

分析的方式有 xhr 断点,还有查看 js 调用堆栈 Initiator 等方法

接下来我们快速找找加密的位置,毕竟分析加密才是大头,找加密位置,只要足够耐心多多调试基本能找的到

打上 xhr 断点,然后切换一下榜单

通过 xhr 断点可以看到请求的位置,params 中已经有了加密好的 k 参数

所以按照堆栈继续向上分析

在堆栈里可以看到下面的这个段代码

看过之前文章的就知道,很多站点都会在这里做一些操作

先不停的放过断点,等到这里的 t 和我们分析的 url 相同的时候

进去打个埋伏,就能找到加密的地方了

进去之后,可以看到下面的代码,我们先打上断点

看到 interceptors 的时候,基本可以确定就是这里了

这个时候放过断点,这个时候逻辑就会运行到 e(n) 这行的位置

我们再单步进去看 e 方法做了什么操作

可以看到最终执行的是 L

单步下去可以看到 k 的通过 Object(O.a)(r,path,{xxx}) 得到的

跟进去可以看到加密的位置如下

加密分析

这个加密就很简单了,虽然看着很多的样子,但是最后返回的时候就是一个 base64

主要关注的是前面对于请求参数的处理

可以看到最后参与到 base64 编码的是 y

而这里的 y 是一个匿名方法,参数是 content、t和 e

而这里的 content 是由下面的方法两个方法计算得到的

简单的分析一下就是将请求参数的值取出来,然后拼接

拼接后的结果连同时间戳计算、当前请求的path以及n.sort 一块传入下面的方法

这个方法也是对传入的参数用 (&&) 拼接,这个结果就是 content

这里的 t 是一个固定的字符串,这里不列举出来,感兴趣的可以自行调试一下

e 固定为 10

将上述的三个参数带入匿名函数,得出一串乱码,然后带入 base64 编码得出 k 的值

我们用本地的 js 代码验证一下

在线执行的结果

本地 node 运行的结果

两者相同

Python 请求验证参数

直接带入请求就可以获取到了

End.

以上就是全部的内容了,咱们下次再会~

0 人点赞