今日网站
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.
以上就是全部的内容了,咱们下次再会~