文章目录
- 一、写在前面
- 二、抓包分析
- 三、逆向分析
一、写在前面
加速乐(JSL)是阿里推出的一项反爬虫服务,其生成cookie的原理基于浏览器的行为特征
我们知道普通网站生成cookie是在请求时生成,而它先生成cookie,然后向服务器请求同一个网址,通过JS生成cookie覆盖掉原来的cookie,然后带着最后生成的cookie请求网址
这种cookie动态生成的网站是无法直接看到JS文件的,网站不让浏览器缓存JS文件,这样就可以防止被轻易拿到JS代码分析。也是一种反爬虫得手段
分析站点:
aHR0cHM6Ly93d3cubXBzLmdvdi5jbi9uMjI1NDA5OC9uNDkwNDM1Mi9pbmRleF8zNDk3MzQxXzcwLmh0bWw=
二、抓包分析
在浏览抓包是看不到什么有用的东西,这里我们使用抓包工具抓一下:
可以看到上图中有两个URL是空响应,是在正常响应之前触发的。这两个URL做的一件事就是设置cookie,最后被第三个URL给覆盖
第一个URL设置了名为__jsluid_s的cookie:
第二个uURL又添加了名为__jsl_clearance_s的cookie:
最后一个URL请求重新设置了__jsl_clearance_s的cookie:
仔细比对会发现第三个URL已经返回响应了,但是返回的内容是纯HTML文本内容,没有任何JS代码,这是因为这个网站做了处理,不让浏览器缓存JS文件
source里面查看缓存文件是没有JS文件的,通过上面抓包分析可知_jsl_clearance_s的值是动态生成的
__jsluid_s的cookie值为:
2c352ae5536707728ce997d91eb1f040
抓包拿到的第一次请求响应的JS代码如下:
document.cookie=('_')+('_')+('j')+('s')+('l')+('_')+('c')+('l')+('e')+('a')+('r')+('a')+('n')+('c')+('e')+('_')+('s')+('=')+((+true)+'')+(3+3+'')+(1+[0]-(1)+'')+(-~1+'')+(2+3+'')+(-~(8)+'')+(3+3+'')+(-~1+'')+(2+5+'')+(-~(8)+'')+('.')+((1<<3)+'')+(3+6+'')+(1+5+'')+('|')+('-')+(+!+[]+'')+('|')+('J')+('W')+('f')+('m')+((+false)+'')+('p')+('X')+('K')+('B')+('e')+('u')+('O')+('c')+('k')+('m')+('b')+('V')+('F')+(-~(8)+'')+('X')+('r')+('I')+('v')+('x')+('o')+('E')+(~~{}+'')+('%')+(-~[2]+'')+('D')+(';')+('m')+('a')+('x')+('-')+('a')+('g')+('e')+('=')+((1|2)+'')+(6+'')+((+[])+'')+(~~{}+'')+(';')+('p')+('a')+('t')+('h')+('=')+('/');location.href=location.pathname+location.search
可以看到每一次刷新网站,document.cookie生成cookie都是不一样的,如下图所示:
仔细对比上面两个生成cookie所抓包拿到的JS代码,会发现是有差别的,所以每次得到的cookie是不一样的
接下来,我们看第二次请求的URL。它是带上了第一次生成的cookie去请求的,响应如下图抓包所示:
响应的JS代码我们推测是用来生产cookie的,第三次请求URL时,这段JS代码会生成__jsl_clearance_s的cookie覆盖掉
接下来就是第三次请求,访问最终正常的网站URL。当第三次请求url时,程序会执行第二次请求时的JS代码,然后生成cookie覆盖掉第二次请求__jsl_clearance_s的cookie,最后带着生成的cookie请求服务器
三次请求都是针对一个URL,最后一次正常。中间一系列对Cookie的操作,主要目的就是为了对抗爬虫
三、逆向分析
接下来我们需要做的就是对第二次请求响应的JS代码进行分析,逆向__jsl_clearance_s的cookie值
这里把JS扣出来,这里我不贴代码了,几百行呢!分析如上截图所示!下面我直接采用补环境的方式本地调试混淆的JS代码
提示我们window未定义。因为我现在是在本地调试不在浏览器,所有没有DOM跟BOM,这是我们需要我们补的
找到window定义的代码:
控制台调试打印如下:
得到我们的window代码如下:
window['navigator']['userAgent'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36'
补到JS里面的环境如下:
var window = {navigator:{userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36'}
}
继续运行JS代码,发现提示document、location都需要补,是没有定义的,最终需要补代码如下:
var document = {cookie: ''};var location = {href:''
};var window = {navigator:{userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36'}
};
补完环境线下环境运行如下,上面调试的JS代码都是动态混淆的,大家调试的时候根据自己扣到的代码进行即可:
至此我们就拿到了__jsl_clearance_s
好了,到这里又到了跟大家说再见的时候了。创作不易,帮忙点个赞再走吧。你的支持是我创作的动力,希望能带给大家更多优质的文章