python爬虫文字加密_Python爬虫进阶必备 | X薯中文网加密分析

此次来分析某个小说网站。

aHR0cHM6Ly9nLmhvbmdzaHUuY29tL2NvbnRlbnQvOTM0MTYvMTM4Nzc5MTIuaHRtbA==node

分析请求

先来看看页面的请求【图1-1】数组

图1-1

通过查看请求,并无请求的加密参数,可是响应的内容却不正常,许多文字在响应中都变成了 span 标签【图1-2】浏览器

图1-2

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

定位加密

既然这里替换的内容都是 span 那就从它开始入手吧。

能够看到应该显示在正文的内容显示在 CSS 的 content 中【图2-1】。app

图2-1

这个是什么操做?容我百度一下。async

CSS中,::before 建立一个伪元素,其将成为匹配选中的元素的第一个子元素。常经过 content 属性来为一个元素添加修饰性的内容。此元素默认为行内元素。

这里附带一个语法示例【图2-2】,加深理解:ide

图2-2

如今经过上面的实例描述,咱们大体清楚原来它是一种 CSS 的隐式写法。

通常 CSS 样式咱们能够经过点击右上角的连接跳转到相应的文件位置,可是这里是没法跳转的【图2-3】学习

图2-3

咱们照着以前的思路,搜索一波看看能不能找到一些蛛丝马迹。

先试试搜索类名【图2-4】,找到的是请求页面的响应内容,并无找到有用的信息。

网站

图2-4

继续搜索::before,此次找到的一样是请求页面的响应内容可是::before在文件的位置值得咱们打开看看。【图2-5】加密

图2-5

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

图2-6

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

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

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

ps : 怕本身找错能够多试几回,相关文件都打开看看。

分析与改写

既然找到一个疑似加密的位置,咱们确定是要分析一波看看是否是咱们要找的。

经过大概的梳理,能够看到整个 JS 分为两个部分,第一部分 JS 是CryptoJS的加解密的内容,第二部分是通过混淆的内容,根据部分 JS 能够猜想第二部分的 JS 操做了 DOM ,完成了 CSS 相关的解密。【图3-1】

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

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

图3-1

简单说下代码的逻辑:

先取出 _0xa12e这个数组里面一个加密过的元素,取出后用 AES解密

var _0xa12e = ['appendChild', 'fromCharCode', 'ifLSL', 'undefined', 'mPDrG', 'DWwdv', 'styleSheets', 'addRule', '::before', '.context_kw', '::before{content:\x20\x22', 'c***ules', 'pad', 'clamp', 'sigBytes', 'YEawH', 'yUSXm', 'PwMPi', 'pLCFG', 'ErKUI', 'OtZki', 'prototype', 'endWith', 'test', '8RHz0u9wbbrXYJjUcstWoRU1SmEIvQZQJtdHeU9/KpK/nBtFWIzLveG63e81APFLLiBBbevCCbRPdingQfzOAFPNPBw4UJCsqrDmVXFe6+LK2CSp26aUL4S+AgWjtrByjZqnYm9H3XEWW+gLx763OGfifuNUB8AgXB7/pnNTwoLjeKDrLKzomC+pXHMGYgQJegLVezvshTGgyVrDXfw4eGSVDa3c/FpDtban34QpS3I=', 'enc', 'Latin1', 'parse', 'window', 'location', 'href', '146385F634C9CB00', 'decrypt', 'ZeroPadding', 'toString', 'split', 'length', 'style', 'type', 'setAttribute', 'async', 'getElementsByTagName', 'NOyra', 'fgQCW', 'nCjZv', 'parentNode', 'insertBefore', 'head'];

解密后的值放入到secWords中,对secWords中的值遍历并作了一堆骚操做,将处理事后的值放入到words当中,注意这里words就已是文字了。

最后在 JS 的最后操做 DOM 进行替换

部分解析

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

正确的字符是这样的【图3-2】

图3-2

在 node 中运行输出的结果是这样的【图3-3】

图3-3

很明显 node 环境下输出的结果不是咱们要的,并且字符数也少了两个,同一份代码环境不一样,能够大体猜到多是代码里作了一些对环境属性的判断。

这个时候理解代码的好处就来了,能够很快定位到下面这行代码【图3-4】:

图3-4

这里检测的是当前的 URL ,在浏览器中这个判断条件是不成立的【图3-5】,因此不执行判断中代码。

图3-5

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

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

很快看到【图3-6】这一行的代码也进行了相关的判断。

图3-6

在浏览器环境下代码的结果是这样的【图3-7】

图3-7

可是在 node 环境下是这样的,计算结果也相应的出现了错误【图3-8】

图3-8

因此这里须要作相应的修改,让结果可以计算正确。

例如:

_0x1532b6[_0xea12('0x26')](_0x490c80, 0x3 * +!('object' === _0xea12('0x27')))

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

将通过处理后的 JS 运用到 Python 爬虫中,就能够看到正确的内容了【图3-9】

图3-9

总结

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

不过既然是小说网站,这里也涉及到相关的版权问题,因此但愿你们不要搞事,以学习的态度和目的阅读本文。

Peace~

鱼说闲话

咸鱼从初一就开始看网络小说了,能够算是个老书虫,当时用攒了好几个月的生活费买了部 MP4 ,拜托家里有电脑的同窗帮忙下载小说,就这样开始了个人追更之旅。

当我看小说的设备不断更新直到今天的智能手机,那些年躲在被窝里看小说的日子留下的只剩下那些年追更的回忆,还有残存很少的小说.txt文件。

谨以此文,记念过去追更的日子。

EOF

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值