数据采集面对JS加密无所适从?善用这3个工具,搞定一大半的JS逆向!

时间:2022-07-24
本文章向大家介绍数据采集面对JS加密无所适从?善用这3个工具,搞定一大半的JS逆向!,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

在如今的互联网,想要简简单单地通过一个HTTP请求就采集到数据已经是越来越难了。越来越多的网站对网页的数据加强了限制。

其中,最常见的,就是在请求头里面添加各种加密参数,如:token、UUID等请求头。

面对这些加密限制,并不是完全无能为力的。对于大多数网站而言,在了解一定JavaScript脚本知识的基础上,善用下述3个工具,就可以搞定。如果搞不定的,也离搞定不远了。

浏览器调试控制台

浏览器的调试控制台是进行数据采集的小伙伴再熟悉不过的工具了。基本上,网页数据的ajax接口都是通过浏览器的调试控制台找到的。

除了找数据接口,我们还可以直接在调试控制台中寻找加密请求头参数的生成位置,也就是找到它是通过调用哪个JavaScript脚本文件生成的。

在此举个例子,在某网站上,其数据接口的请求需要附带上几个特殊的请求头:

如果请求中不带上这几个头参数,嗯,直接返回错误码。

很显然,这几个参数不会平白无故产生,一定是从什么地方引用或是生成的。这时候,我们就可以通过调试控制台进行搜索:

比如上面举例的请求头参数,我们就搜索到了:

点击一个搜索结果,就会跳转到对应文件的显示界面。在大多数情况下,我们看到的是一堆经过压缩的JavaScript代码,嗯,就像一堆屎一样:

那么密密麻麻的代码,哪里分得清哪是哪呢?这就要借助到下面的工具了

JavaScript代码格式化工具

面对一堆一坨的JavaScript,只有把它们格式化、恢复成本来的面貌才能继续我们的探索之旅。

JavaScript代码格式化的工具有很多,州的先生一般现用现搜,选择自己中意的网站即可:

经过JavaScript代码格式化,我们终于能够看清它本来的面貌了,这就像《千与千寻》里洗干净了澡的河神一样。

把它复制到文本编辑器中,有高亮提示的那种。州的先生一般配合使用VS Code和Notepad++。

继续对它抽丝剥茧,搜索请求头参数对应的JavaScript生成函数。

js2py模块

通常来说,JavaScript代码进行的操作,在Python中也能实现,比如下面这些JavaScript代码:

用来获取时间戳、拼接字符串等,可以直接用Python代码还原。但是如果面对一些比较繁琐的JavaScript函数,比如下图这种:

又臭又长,那还是通过Python直接调用执行这个JavaScript函数吧。

有很多Python第三方模块提供了在Python中执行JavaScript代码的功能,州的先生经常使用的是js2py这个模块。

直接把JavaScript代码里面的函数以字符串的形式复制Python文件中,赋值给一个变量,直接调用即可:

>>> import js2py

>>> f = js2py.eval_js('function f(x) {return x + x}')

>>> f(2)

4

>>> f()

nan

>>> f(f)

function f(x) { [python code] }function f(x) { [python code] }

简单、直接、粗暴。

最后

通过这三个工具,基本可以找到加密函数、加密参数和位置,它们的生成方式,以及通过Python代码对其进行生成。然后就是一顿操作猛如虎,顺利拿到数据了。