网络爬虫-cloudflare五秒等待验证逆向破解

Cloudflare是国外的一家安全防护公司,最近在很多网站上也看到了他的身影,比较明显的特征就是让你等待5秒钟以验证你是否是真实的浏览器。

https://www.biovision.com/ 为例在这里插入图片描述

另一个明显的特征就是它的cookie里面会包含__cfduid, cf_clearance 这个两个字段。 如果你发现你访问的网站里有这些特征,那么毫无疑问他就是采用了 Cloudflare的安全防护了,我们这里讲他的初级防护,也就是等待5秒的js逆向分析。


首先访问网站,抓包分析。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

可以很清晰地看到,第一次请求访问该网站会503,然后给你一个__cfduid的cookie,带着这个cookie以及某几个参数(后面会讲到)去访问第二个url,会返回给你cf_clearance这个cookie,最后带着这俩cookie再次访问该网站即可正常拿到数据了。


接下来就是找第二个链接里面的params参数了,不难发现,前面三个参数都是直接在第一次访问网站时返回的静态html里面,用正则取出来即可,所以我们重点关注的是第四个参数jschl_answer,因为我们在源码里面没有发现他。

在这里插入图片描述

_s = re.findall('name="s" value="(.*?)"', r.text)[0]
_jschl_vc = re.findall('name="jschl_vc" value="(.*?)"', r.text)[0]
_pass = re.findall('name="pass" value="(.*?)"', r.text)[0]

然后我们看第一次访问网站时返回给我们的html,可以发现里面有一大段很奇怪的js。

在这里插入图片描述
在这里插入图片描述

我们可以看到 这个a其实就是我们要的东西,a.value实际上就是我们需要找到的加密参数。接下来只需要用execjs把这段js运行出来,拿到a.value的值即可。

r = s.get('https://www.biovision.com/', headers=headers)
print(r.text)

pattern = re.compile('setTimeout\(function\(\)\{(.*?)f.action \+= location.hash;', re.S)
code = pattern.findall(r.text)
code = re.sub('\s+(t = document.*?);\s+;', '', code[0], flags=re.S)
code = re.sub('a.value', 'value', code)
code = re.sub('t.length', '17', code)
code = 'function test(){' + code.strip() + ';return value;}'
s1 = execjs.compile(code)
t = s1.call('test')
print(t)
这里讲解一下t.length替换为17是怎么来的,以免有些同学一头雾水。直接拿源码中的js去浏览器运行,因为这个是固定值,所以我直接替换了,如下图:

在这里插入图片描述

然后我们可以拿fiddler抓包拿到的这段js去运行,看看生成的结果是否和抓包里的jschl_answer一致。

在这里插入图片描述

可以看到完全一致,至此逆向分析结束。

OK 大功告成

Ending

Github传送门

持续更新ing (欢迎各种star与fork)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章