aHR0cHM6Ly9kYy5zaW11d2FuZy5jb20v
这类网站需求量蛮大的,不过想这类网站大多需要实名注册,所以爬虫 er 还是适可而止吧,不要瞎搞
打开网站,往下找到翻页请求,点击翻页,可以在请求列表里面看到下面的请求包

这个包的返回值是一大串的加密 data,还有一大段的 js 代码

这样的就不好分析了,先一个一个来,看看这个数据是怎么解密的
先通过 js 调用栈把断点打上,找一个看的懂得点进去


在这一步断点然后刷新,data 就已经是明文了,所以要向上分析
接下来就是异步的位置了

我们在异步的上一个堆栈打上断点,然后继续分析
可以看到这里嵌套了很多异步

我们继续单步,可以看到下面这里的请求拦截器

这里分别对应request和response
建议这两个都打上断点,然后再单步调试
在request的拦截器里会进入到下面的逻辑,就是xhr.send逻辑

是的,这里就是异步套娃,一个接着一个,这样看来直接xhr断点会更加方便
这里发起了xhr之后,就进入到解密的环节了

再单步几次就进到如下混淆的地方了

接下来就是继续单步调试了
这里先是判断了data.data以及data.data.encode是否存在

然后给script标签赋值了返回的代码,使用eval执行了这一大段代码,并获取到window[data.data.id]作为结果,赋值给 key

这样就很好理解前面 respose 中data那一大段代码的作用了,是用来生成一个字符串,可以理解为是一个密钥
这里我们自己用代码试一下,验证下我们的猜想
粘贴出来格式化可以看到这里有一个eval

这个 eval 还原大家都会把,直接用console.log就完事了

运行结果就是这样一段赋值的代码,可以理解为给 window 赋值了一个属性值,这个属性值也可以通过 response 获取,获取到之后得到 key ,和我们猜想的完全一致,然后这里的 key 就参与到下面的计算了
接下来就是一段js解密的操作了

眼不眼熟,这不就是aes嘛,key就是上面的代码计算出来的 key 然后md5的结果,然后iv就是这个结果切割后16位,padding就是pkcs7
有这三元素还不是分分钟还原出来了
上个结果对比图


完事~