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

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

反爬前置信息

站点: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 datetime

import requests


def 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)
相关推荐
alex10018 分钟前
AI Agent开发学习系列 - langchain之LCEL(5):如何创建一个Agent?
人工智能·python·语言模型·langchain·prompt·向量数据库·ai agent
小白iP代理33 分钟前
动态IP+AI反侦测:新一代爬虫如何绕过生物行为验证?
人工智能·爬虫·tcp/ip
flashier35 分钟前
ESP32学习笔记_Components(1)——使用LED Strip组件点亮LED灯带
学习·esp32·led·led灯带·esp32组件
Shining05961 小时前
Datawhale AI 夏令营—科大讯飞AI大赛(大模型技术)—让大模型理解表格数据(列车信息表)
人工智能·学习·其他
海哥编程1 小时前
Python 数据分析(二):Matplotlib 绘图
python·数据分析·matplotlib
go54631584652 小时前
Python点阵字生成与优化:从基础实现到高级渲染技术
开发语言·人工智能·python·深度学习·分类·数据挖掘
猫头虎2 小时前
2025年02月11日 Go生态洞察:Go 1.24 发布亮点全面剖析
开发语言·后端·python·golang·go·beego·go1.19
希望奇迹很安静2 小时前
SSRF_XXE_RCE_反序列化学习
学习·web安全·ctf·渗透测试学习
仰望天空—永强2 小时前
PS 2025【七月最新v26.5】PS铺软件安装|最新版|附带安装文件|详细安装说明|附PS插件
开发语言·图像处理·python·图形渲染·photoshop
MediaTea2 小时前
Python 库手册:xmlrpc.client 与 xmlrpc.server 模块
开发语言·python