js判断最后一个字符是不是指定字符_Python爬虫进阶必备知识点:JS加密逆向

前言

文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

作者: 煌金的咸鱼

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取

http://note.youdao.com/noteshare?id=3054cce4add8a909e784ad934f956cef

cfb12625410259b90fe0654328722ad1.png

这次来分析某个小说网站

分析请求

先来看看页面的请求

34d9b803e78f7c928e1355948e1eb82c.png

经过查看请求,并没有请求的加密参数,但是响应的内容却不正常,许多文字在响应中都变成了 span 标签

3f8cf27cf422dece7d75248785d0c106.png

这样的反爬虫措施,如何分析?

定位加密

既然这里替换的内容都是 span 那就从它开始入手吧。 可以看到应该显示在正文的内容显示在 CSS 的 content 中

56b8bdc2a238b1144f583235007605ac.png

我们大致清楚原来它是一种 CSS 的隐式写法。

一般 CSS 样式我们可以通过点击右上角的链接跳转到相应的文件位置,但是这里是无法跳转的

8f59667a9dac0d762f312c6953672c4c.png

我们照着之前的思路,搜索一波看看能不能找到一些蛛丝马迹。 先试试搜索类名,找到的是请求页面的响应内容,并没有找到有用的信息。

b06a392e04506823df79df8fbcbbfe31.png

继续搜索::before,这次找到的同样是请求页面的响应内容但是::before在文件的位置值得我们打开看看。

9ee03bbe9fa7c53642ec6eff66394e5f.png

点开文件再次搜索,在这里就定位到了疑似加密的地方,对!只是疑似加密。

87fdf316e3cda8c894b6fb30b93ee99c.png

你不能因为代码长得丑、难理解就怀疑它是加密。

ea9ea48142fec08be693b4fe2a102185.png

其实这里也可以全局搜索.context_kw可以找到操作 DOM 的代码,可以找到操作 DOM 的加密位置,搜索方法大同小异。

这里就不细说了,我们只要找到加密逻辑的整体位置就行,不妨碍我们分析。

分析与改写

既然找到一个疑似加密的位置,我们肯定是要分析一波看看是不是我们要找的。

通过大概的梳理,可以看到整个 JS 分为两个部分,第一部分 JS 是CryptoJS的加解密的内容,第二部分是经过混淆的内容,根据部分 JS 可以猜测第二部分的 JS 操作了 DOM ,完成了 CSS 相关的解密。

关于第一部分的CryptoJS没啥好改的,照着用就好了。

第二部分值得研究一下,因为是混淆过的内容,照着还原回原来的代码意义不大且费时费力,需要做的就是不停调试你看不明白的代码,争取能明白这个代码的意思,能理解的代码越多,去改写越简单。

fe9c307b2eaa73a4c37c913ee3d30508.png

简单说下代码的逻辑:

  1. 先取出 _0xa12e这个数组里面一个加密过的元素,取出后用 AES解密
  1. 解密后的值放入到secWords中,对secWords中的值遍历并做了一堆骚操作,将处理过后的值放入到words当中,注意这里words就已经是文字了。
  2. 最后在 JS 的最后操作 DOM 进行替换

部分解析

这个 JS 不是很难,从网页复制的 JS 加上两个打印直接就可以使用,但是在 node 中直接运行发现输出的字符和实际页面展现的并不相同。

正确的字符是这样的

65dff8ba60a37152a54aee423c301b5b.png

在 node 中运行输出的结果是这样的

2d466454192cc5f84419f2a380bfb5bf.png

明显 node 环境下输出的结果不是我们要的,而且字符数也少了两个,同一份代码环境不同,可以大致猜到可能是代码里做了一些对环境属性的判断。

这个时候理解代码的好处就来了,可以很快定位到下面这行代码

78339b1f5ec0f55a79054961ccab68a0.png

这里检测的是当前的 URL ,在浏览器中这个判断条件是不成立的,所以不执行判断中代码。

ca22f545a8c7fd2ea540222ec83ad31f.png

到了 node 环境下是没有浏览器的window属性的,所以执行这句会出现异常,执行的是异常处理中的代码,所以我们直接把这段if代码注释掉。

继续向下,找找还有没有相关的代码,只要是判断浏览器相关属性的都需要注意一下。

很快看到这一行的代码也进行了相关的判断。

9f573f1924923b957ae258c528cde6da.png

在浏览器环境下代码的结果是这样的

5857cd25c8dcec69edacd631be7d1386.png

但是在 node 环境下是这样的,计算结果也相应的出现了错误

c1f2afb8cce3fcd492ce3c99ac820f65.png

所以这里需要做相应的修改,让结果能够计算正确。

例如:

这样 node 环境下的计算结果就正常了。

将经过处理后的 JS 运用到 Python 爬虫中,就可以看到正确的内容了

80fda1f423d24d878a03c8faededf578.png

总结

这个网站的加密不是很难,不过加密的方法很典型,前段时间有不少读者朋友在群里讨论研究,非常值得学习一下。

不过既然是小说网站,这里也涉及到相关的版权问题,所以希望大家不要搞事,以学习的态度和目的阅读本文。

已标记关键词 清除标记
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页