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
有这三元素还不是分分钟还原出来了
上个结果对比图
完事~