Python环境下的JavaScript逆向技术分析

2021-11-02 06:03王朝阳范伊红李梦丹忽爱平
无线互联科技 2021年17期
关键词:断点爬虫逆向

王朝阳,范伊红,李梦丹,忽爱平

(河南科技大学软件学院,河南 洛阳 471000)

0 引言

在互联网的大千世界里,Python网络爬虫已经成为程序员对某个网站数据获取、数据分析的一项重要的工具。爬虫使人们的生活更加便利,尤其是其广泛运用于搜索引擎、数据收集、广告过滤等日常生活中的各个方面。如今,网络爬虫技术的基本实现方法不计其数,运用简单的互联网技术就能获取完整的爬虫代码,故本文不再复述这些代码,而主要聊聊一种爬虫中所用到的JavaScript逆向技术(下文简称“JS逆向技术”),这种技术主要是为了解决网络数据抓取时所遇到的参数加密、数据加密等问题[1]。

1 JS逆向技术介绍

当顺利抓取到网页的HTML代码时,有一部分网站,例如某翻译、某土地市场网等,夹杂着许多的加密数据,或者是一些看不懂的参数,这些数据会阻碍下一步的解析和运用,这时就需要运用JS逆向技术反解JS代码对这些数据进行解密,从而重写并模拟JS操作。

本文就以某翻译网站为例,来解析Python环境下的JS逆向技术的实现过程。也许这个网站解析出的数据价值性没有想象的高,但目的不是获取有价值的数据,而是通过对这个网站爬取时所遇到的数据加密问题进行解析,从而获取模拟真实的网络请求[2]。这个技术会是大家探索网络爬虫的一个重要方向。

2 某翻译网站数据爬取过程分析

2.1 获取点击“翻译”按钮时的请求数据

首先需要做的任务是利用爬虫技术获取翻译前后的内容。打开翻译网站,在左边输入框中输入‘man’英文字符,点击“翻译”按钮,右边翻译框会输出一个“男人”的译文。这时打开F12开发者工具,选择Network选项,从中可以获取到所有网络发出的请求。怎样找到哪一条是关键的请求呢?因为做的是翻译工作,可以尝试在Filter中输入‘tran’的字样进行过滤操作,果然过滤到了一条translate的请求,这时候可以盲猜这条请求就是所需要的请求。

2.2 确定请求头中的加密参数

用requests库编写一个基础的爬虫代码后,将请求头中的cookie,header等信息放入爬虫代码,把参数一个一个地注释,再进行编译并打印出状态码,从中可以看到,如果打印“500”则证明此参数影响了请求,则此参数是有价值的,这就是寻找有用参数的方法。通过寻找发现关键参数有“OUTFOX_SEARCH_USER_ID”“salt”“sign”3个参数,通过多次请求比较,将会发现第一个参数在每次请求中都是不变的,所以最终确定两个加密变化参数“salt”“sign”。

2.3 寻找参数的加密方式

在开发者工具中搜索这两个参数,能找到一个js文件,这个就是要对其逆向的文件。在文件中查找参数名,可以发现12条相关数据,从其中筛选出纯参数数据,在其位置打上断点并进行编译。通过刷新页面,可以发现下面这段代码出现了问题(见图1)。

图1 断点寻找加密方式

可以看出salt的值是变量i,在第8 371行中显示,i的值为变量r+14位的随机数,再从8 370行中可以看出,变量r是一个时间戳,这就完美地解出了“salt”变量的组成。同理,从中能了解到,“sign”变量的组成是一个md5加密的数据,提供的参数为要翻译的字符串和“salt”值的拼接。参数的组成清晰又明朗,对下一步的模拟请求发送起着关键性的作用[3]。

2.4 模拟请求发送

了解到数据如何构成之后,开始使用Python对整个请求发送进行模拟。自己定义时间戳和随机数,拼接为“salt”和“sign”参数,根据业务逻辑完成整个爬虫流程,如下文代码段。

得到模拟的请求参数之后,将参数嵌入爬虫代码中,并且根据网页结构找到翻译结果的位置,从而进行发送请求。实现方法如下文代码段。

2.5 请求成功,获得数据

模拟请求发送后,使用重写的爬虫,得到翻译框中翻译的数据,并且可以根据不同的语言得到不同的翻译结果。例如输入‘Long time no see’,得出结果“好久不见”。

3 结语

JS逆向技术可谓是探索爬虫领域的重要工具。通过对此翻译网站的网页结构分析,找出隐藏在其中的加密参数;通过断点技术,找出参数的加密方式。相比于传统爬虫,可谓是更上一层楼。希望这种技术可以为读者开辟一种新的思路。JS逆向技术的道路很长,有些网站构成复杂,仅仅拿到js文件并不是所谓的全部。在短短一秒钟内,执行的代码多达上万行,这时就需要耐心分析,一步一个脚印,找出神秘之处,从而达到所需的目标。如何从万行代码中突破重围,如何将JS逆向技术加以改进,所有从事IT行业的人们都任重而道远。

猜你喜欢
断点爬虫逆向
利用网络爬虫技术验证房地产灰犀牛之说
逆向而行
基于Python的网络爬虫和反爬虫技术研究
一类无限可能问题的解法
利用爬虫技术的Geo-Gnutel la VANET流量采集
主导电回路发生断点故障判断方法探讨
大数据环境下基于python的网络爬虫技术
逆向工程技术及应用
TKScope仿真调试Cortex-M3内核的高级手段
基于属性重要性的贪心算法的改进算法