时间:2023-08-05
反爬:js逆向基础#header反爬>cookie(acw_sc__v2)+xq_a_token+无限debugger
网址:aHR0cHM6Ly94dWVxaXUuY29tL3RvZGF5
视频:https://www.bilibili.com/video/BV1Bm4y1W76o/
b64:http://www.jsons.cn/base64/
curl:https://spidertools.cn/#/curl2Request
声明:文章/代码/视频仅供学习交流,如有问题可到文章末尾加我联系删除
反爬参数如图
知识点提前Get
cookie要么是JS(客户端)生成的,要么是服务器返回的,需要在网页界面按Fn+F12打开开发者工具平台观察
可以通过Response Headers响应头是否是Set-Cookie判断为服务器cookie
或者是否有HttpOnly属性判断为服务器cookie
研究cookie,得先Fn+F12打开开发者工具平台,清空网页cookie缓存
第一种方式删除目标cookie清除
第二种直接全清,无论是哪个网址的cookie
第三种方式选择目标网址清cookie
视频讲解流程
详细分析流程
1.首先,我们如何判断有cookie反爬,先清空所有cookie,模拟请求
2.接着清空所有请求流,方便分析,刷新网页
3.然后搜索目标数据内容,定位具体的接口是哪个
4.这里我们确定了哪个接口后,可以过滤筛选只看这个接口
5.然后我们鼠标右击目标接口,copy>copy as curl(cmd)
6.打开https://spidertools.cn/#/curl2Request 直接生成requests请求
7.打开pycharm,新建python文件,复制上面的requests请求,运行代码,发现数据未正常返回,简单的看了下可能是cookie反爬
8.开始继续测试,我们试着注释掉部分cookie,发现也能拿到正常响应数据
9.但是当我们把xq_a_token注释掉后,无法正常返回数据,由此确定这个接口xq_a_token是cookie反爬
10.我们复制上面的xq_a_token的cookie往上逆推分析,发现在下面这个today接口找到,而且确定是服务器返回的cookie
11.重复操作步骤5~6,我们模拟这个today接口请求,发现响应头里面并没有生成我们要的xq_a_token的cookie请求,而且响应文本里面是一段纯js的内容,再回到浏览器分析,发现这个接口请求了两次
12.我们细细看这个两次接口的请求,也就是我们第一次请求today接口只返回了js,第二次接口请求才能真正返回我们需要的xq_t_token的cookie
13.那我们试试直接请求两次这个today接口看看cookie-xq_a_token是否返回,也没有返回
14.也就是说第二个接口请求可能还存在一个cookie反爬acw_sc__v2,而这个cookie就是第一次请求js生成返回的
15.所以我们先研究下acw_sc__v2这个cookie的由来,先清掉cookie缓存
16.清掉当前数据流,方便分析
17.由于acw_sc__v2这个cookie是js生成的,所以我们得新建一个hook-cookie的js脚本
18.刷新网页后发现无限debugger阻碍拦截,所以得先过无限debugger
19.调用堆栈分析该无限debugger,发现是一段js混淆的代码,到console界面手动还原js分析
20.简单了解下(function(){}constructor('debugger')() 反爬原理
21.过掉上面的无限debugger,我们选择hook脚本重写,在这个位置添加即可
22.然后我们重复操作流程15~16,并打上script断点,拦截js脚本
23.刷新网页后会断在此处,这时候我们一直往下调试拦截
24.这时候跳到了我们目标的js脚本这里,先在第一行打断点,然后运行我们写好的hook-cookie的脚本,然后把script断点取消掉
25.如下就hook到我们目标cookie了,接着我们通过堆栈回溯分析acw_sc__v2的由来
26.如下,可以看的acw_sc__v2其实本质是 reload(x)传过来的,也就是形参x值
27.继续回溯,可以知道acw_sc__v2就是arg2值
28.再回溯,可以知道arg2就是这段js代码生成的,于此同时,我们在此处下两个断点
29.我们把这两行js代码复制到vscode新建的js文件里面,并在console界面手动还原下混淆变量
30.运行会报错缺少变量arg1,实际上我们观察还缺少_0x5e8b26
31.接下来我们重复15~24的步骤流程,清cookie,刷新网页,这时候可以不用打script断点了,因为我们已经在目标js上面下了几个断点了,如果遇到无限debugger,运行下hook的脚本过掉,这时候会跳到我们目标的断点位置
32.在console界面输出两个未定义的变量,然后补上固定值,然后ctrl+s保存代码后,再次运行arg1.unbox未定义
33.到浏览器界面,输出下这个函数,然后将这部分函数代码复制到本地如下
34.同时我们需要把混淆变量手动还原下,如下,然后ctrl+s保存下js文件
35.再次运行js文件,这次报错如下_0x23a392.hexXor未定义
36.同样的方法,重复操作流程33~34,将该部分缺少的js函数复制下来
37.最后我们ctrl+s保存文件后,再次运行js文件,未报错,此时acw_sc__v2生成逻辑已经分析完成
38.我们稍微改下js代码,封装成函数传参输出的形式,其中可以多次调试发现需要传入参数动态arg1,其它都是定值
39.arg1我们搜索下看哪里生成的,发现在第一次响应请求里面生成的,所以我们修改下python代码正则re提取即可
40.同时把python调用js模块的代码也编辑好传入acw_sc__v2的cookie
41.再开始第二次today接口请求,这时候发现xq_a_token的cookie已经生成了,通过session直接管理服务器xq_a_token的cookie,如下就能正常拿到响应了
代码仅供学习交流
The End~ 更多交流加vx
原文始发于微信公众号(逆向OneByOne):爬虫入门-js端cookie反爬与无限debugger
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论