Python爬虫破解中国人民银行(www.pbc.gov.cn)新闻获取反爬

目的

通过获取http://www.pbc.gov.cn/goutongjiaoliu/113456/113469/index.html
这个新闻页上的列表,并且访问其详情页

image.png

开干

先用console获取一下新闻列表url的内容,如下图所示:


image.png

很明显,根据爬虫经验,这种反爬类似于一种叫做”加速乐”的反爬机制,在红圈1处进行一些js运行的参数混淆加载,然后红圈2中进行主要的反爬逻辑,”加速乐”通常会通过js加密一串字符,然后在Cookie中需要带有该参数才能通过访问,而这里通过后面分析可以知道,这个网站是需要生成一个动态URL来让对方服务器校验。这里先进行的是解决eval函数里面的js参数解析
分析过程如下:
1.先拷贝代码到chrome里面运行一下看能生成一个什么结果


image.png

这里可以看到根据上面的eval执行的代码实际上会生成如上图的js变量并应用,那么我就可以通过python进行模拟
image.png

上图红圈位置实际上是模拟了JS里面的Number.toString方法。
通过分析JS的源代码可以从里面扣出逻辑并生成python代码

2.运行上边模拟的JS代码Debug到下图位置


image.png

图中real_var前面的逻辑实际上是从源网站里面提取到eval里面的代码,并且通过正则与逻辑从字符串中提取到我写的packet函数所需要的参数,并且返回的real_var正是与chrome里面生成的一模一样(类似)

3.再解决JS加密的模块,通过第一个步骤得到的红圈2里面的就是主要的JS加密处,通常我对于这种的混淆分析都会通过Vscode+nodeJS去模拟一个js运行的浏览器环境然后单步调试


image.png

红圈里面的就是我通过python运行后得到的变量,并且因为浏览器执行js代码的时候一般带有一些用到的全局对象例如window之类的,那么我这里设置一个空的
找到程序执行的入口


image.png

进入其代码看逻辑,实际上有用的部分就是下图这里
image.png

通过单步运行可以知道这三个值实际上目的是拼接一个下图这里的URL,也就是我开篇说说的动态URL


image.png

那么只要模拟到上面的3个参数就可以破解了
4.破解流程
image.png

image.png

这里通过运行可以知道函数是被映射到上边箭头所指向的地方,那么进去分析
image.png

这个函数的逻辑抠出来并用python实现就是我这一段代码
image.png

得到一段WZWS_CONFIRM_PREFIX_LABEL加上后缀参数的结果

然后运行第二个函数如下调用流程


image.png

image.png
image.png

到了这里,就是我python代码里面的_0x412a72函数的逻辑了
抠取里面的逻辑并且用python实现位置如下(红圈)


image.png

这里的变量复杂所以我在python里面也没改变量名了,直接用并且调试
如下图,这里的逻辑很明显就是传入的71652034就是下面switch逻辑运行的顺序

image.png

执行我写的逻辑得到如下结果


image.png

对比源js代码


image.png

最后一个函数实际上就是用一开始的dynamicurl与参数1,2还有下图字符进行拼接成动态url
image.png

最后python运行得到下面红线结果,完成破解
image.png

说明:实际上最快的解决方案可以是用python的executeJS库+本地nodejs环境来运行js源码,但是会存在调起nodejs运行环境的损耗以及容易发生一些难以控制的错误

本解决方案的所有代码都是使用python的环境进行编码并运行,是效率最高的方法,而在运行过程中也存在调用动态url失败的方法,通过获取到失败的一次js代码并且放到chrome中运行也是显示失败的,也证明对方服务器也存在一些错误
如下:

image.png

绿色圈中的key与value也调转了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容