爬虫逆向学习(十一):实战分享反爬机制快速定位与破解

devtools/2024/10/22 14:26:20/

此分享只用于学习用途,不作商业用途,若有冒犯,请联系处理

反爬前置信息

站点:aHR0cHM6Ly9jenFqZC5qc3p3ZncuZ292LmNuL2tkY3B1YXBvcnRhbC8jLw==
接口:/kong/InnerGateway/kdcpua/lib/project/publicity

反爬机制定位

在抓取某个站点时,我们需要找到目标接口,然后确定目标接口所使用的反爬机制,常见反爬机制有cookie请求头签名校验等,只有找到它所使用的反爬机制我们才能对点下药。

找到对应的接口,右键复制其cUrl,然后使用爬虫工具库将其转成python requests代码,这样便于我们快速进入调试定位反爬机制
在这里插入图片描述
在这里插入图片描述

可以看到它只存在两个变量,就是cookie请求头,接下来使用控制变量法,结果如下:

  1. 请求传入headers,传入cookie,请求成功
  2. 请求不传入headers,传入cookie,请求失败
  3. 请求传入headers,不传入cookie,请求成功
  4. 请求不传入headers,不传入cookie,请求成功

根据结果确定它的反爬机制只有请求头

大家看下,红色横线对应的那些请求头不会是检测点,而像AcceptAccept-LanguageRefererUser-Agent都是可以写死的,大家可能会说User-Agent也是反爬机制,User-Agent确实可以反爬,不过它的反爬机制对应的是采集频率,我们现在是请求请求前的反爬
在这里插入图片描述

剔除这些后,剩下的AuthorizationTokenx-date就很明显是动态生成且容易作为检测点了,这里Token不需要关注,我们测试一下Authorizationx-date,结果如下:

  1. 保留Authorization,保留Token,请求成功
  2. 保留Authorization,不保留Token,请求失败
  3. 不保留Authorization,保留Token,请求失败
  4. 不保留Authorization,不保留Token,请求失败

结果两次测试结果可以确定AuthorizationToken是检测点且两者之间存在关系。通过这种方法我们最终确定了接口的反爬机制,接下来就是如何破解它了。

逆向研究

这个站点没有特别的混淆,全局搜索x-date直接锁定关键代码位置,它是一个原生的hmac-sha256加密,加密文本就是x-datex-date是UTC时间字符串
在这里插入图片描述

算法破解

python">import base64
import hashlib
import hmac
from datetime import datetimeimport requestsdef get_hmac_authorization():hit_time = datetime.utcnow().strftime('%a, %d %b %Y %H:%M:%S GMT')key = '1S7JzAkstxUV1g51IB22otDrwRkFxRJ3'.encode()message = 'x-date: {}'.format(hit_time).encode()hmac_sha256 = hmac.new(key, message, digestmod=hashlib.sha256)hmac_digest = hmac_sha256.digest()encrypt_result = base64.b64encode(hmac_digest).decode()return {'Authorization': 'hmac username="kdcpua", algorithm="hmac-sha256", headers="x-date", signature="{}"'.format(encrypt_result),'x-date': hit_time,}headers = {"Accept": "*/*","Accept-Language": "zh-CN,zh;q=0.9","Origin": "Origin","Referer": "Referer","Token": "undefined undefined","User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36",
}
headers.update(get_hmac_authorization())
url = "url "
response = requests.post(url, headers=headers)print(response.text)

http://www.ppmy.cn/devtools/127856.html

相关文章

Mybatis--简略2

mybatis常用功能设置 开启日志 在<settings>标签下加入命令 <setting name"logImpl" value"STDOUT_LOGGING"/> 开启java属性驼峰格式与数据库下划线连接格式封装自动转换设置 <setting name"mapUnderscoreToCamelCase" value&…

vue与u3d互调

vue与u3d互调 u3d配置 给前端发送数据的方法中使用下面的方法给Window注册个事件 // eventname 方法名: 随意取, 前端用这个名判断是获取哪个事件的数据 // data 给vue 传递的参数 window.ReportReady(UTF8ToString(eventname), UTF8ToString(data));vue配置 将u3d导出好…

微信小程序实现计数器,微信小程序震动,微信小程序提示音

一、效果 通过微信小程序实现简单的计数器功能&#xff0c;点一下1的同时震动及发出提示音。 预览效果&#xff1a; 扫码进入小程序体验&#xff0c;或者微信搜索“即享工具箱”进入到“计数器”模块体验。 二、编码 wxml: <!--pages/camcelToUnderlane/count.wxml--&g…

前端学习---(1)HTML

一个后端狗, 在公司悄摸得学习前端技术 在公司上班时间看视频影响不太好 按照这个来吧: https://gitee.com/chinese-gitee/Web 前端基础要学: HTML, CSS,JS 浏览器 浏览器中最重要的是渲染引擎(浏览器内核),JS引擎(常见的V8引擎) 渲染引擎: 用来解析 HTML与CSS。渲染引擎决定了…

Unity Mirror NetworkManager初识

文章目录 Network Manager网络管理器什么是网络管理器&#xff1f;通过Transports进行定制化网络连接管理自定义连接地址和端口号Game State Management游戏状态管理Network Manager HUD玩家预制体及其生成控制Spawn Prefabs其他预制体注册Scene Management场景管理 Network Ma…

重新阅读《马说》,感悟“伯乐相马”背后的被选择与选择的大智慧

“初闻不识曲中意&#xff0c;再听已是曲终人”。世有伯乐&#xff0c;然后有千里马。千里马常有&#xff0c;而伯乐不常有。无论你是考研考公等考试大军中的一员&#xff0c;还是已步入社会的打工人或者领导&#xff0c;当你面临被人选择或者选择人时&#xff0c;皆可从《马说…

九种排序,一次满足

我们在算法题进行练习提升时&#xff0c;经常会看到题目要求数据从大到小输出&#xff0c;从小到大输出&#xff0c;前一半从小到大输出&#xff0c;后一半从大到小输出等&#xff0c;那么这时候就需要用到排序算法&#xff0c;通过排序算法将数据按照一定的顺序进行排序。本文…

15分钟学Go 第8天:控制结构 - 循环

第8天&#xff1a;控制结构 - 循环 在Go语言中&#xff0c;循环是一种基本的控制结构&#xff0c;用于重复执行一段代码。今天我们将深入了解Go语言中的for循环&#xff0c;包括它的各种用法、语法结构、以及如何在实践中有效地应用循环。 1. for 循环的基本概念 for循环是G…