Python爬虫进阶必备 | 关于某监测网站的内容加密分析
点击上方“咸鱼学Python”,选择“加为星标”
第一时间关注Python技术干货!
目标网站
IGh0dHBzOi8vd3d3LmFxaXN0dWR5LmNuLw0K
还是上次的那个网站,上一篇分析了关于反爬的绕过,在正文里随口提了一句说这个网站关于正文加密的部分很简单,晚上就收到几位读者的私信,希望能够讲讲关于正文的加密是如何解密的。
打开网站,关于如何过 debugger 反爬,直接参考上一篇的内容,这里不做重复了。
请求分析
打开控制台之后,重新加载一下页面,捕捉请求。【图2-1】
可以看到有一条xxxapi
的请求链接,可以看到请求参数也加密了。【图2-2】
除了参数之外,同样这个请求的返回值同样也是密文的。【图2-3】
经过请求分析,明确了现在要分析的加密是参数和返回值。
加密参数分析
先开始关于参数的分析。
通过多次加载请求,发现所有的参数加密的名字都是不相同的,所以全局检索参数名定位到参数加密的可能性很小。所以直接用 XHR 断点。【图3-1】
重新加载页面,加载数据就断上了。
可以看到这里是请求发起的地方,数据已经加密好了。【图3-2】
所以需要分析堆栈,在【图3-3】所示的位置,我们找到了生成好的参数。
在这里可以看得到,参数是经过pxteFCahl
这个方法生成的。【图3-4】
追进去可以看到参数的生成逻辑了。【图3-5】
加密参数就是将相关的参数哈希之后再 Base64 编码的结果,如果直接用 Python 复写需要注意 NodeJS 与 Python 的关于 Json 转化是有一点点区别的。
如果搞不明白的可以直接扣一下代码,对新手友好。
返回值解密
分析完加密参数后,再来看看返回值是如何解密的。
在上一部分,我们定位到了加密参数生成的地方,在生成的位置下方就是加密返回值解密的位置。
在 Ajax 中,发起请求后,可以根据请求的结果执行不同的操作,这里在请求成功后,执行了结果的解密。【图4-1】
上图的daA0vPWcfr2
就完成了返回结果的解密,我们可以追进去看看他的逻辑。【图4-2】
可以看到这个逻辑也是很简单的,加密的结果先后经过 AES
+ DES
+ BASE64
的解密/解码就可以得到明文的代码了。
并且相关的秘钥都可以直接检索得到。【图4-3】
这类简单的加密代码,扣取起来难度很低,也可以用 Python 直接复写。
简单扣取之后,就可以直接将加密的返回值带入运算了。【图4-4】
总结
这个网站还是比较适合新手练手,加密的难度相比上一个版本略有下降,更多的是对浏览器使用方面的考察。
没有动手扣过代码的可以试试扣取一下代码,非常适合新手动手实践。
[ 完 ]
喜欢文章,点个在看