引言

在数据爬取和自动化测试过程中,人机验证(如滑块、点选、短信验证等)是常见的反爬手段。贝壳网(ke.com)作为国内领先的房产平台,其人机验证机制较为复杂,涉及前端JS加密、动态Token、行为检测等技术。本文将通过逆向分析贝壳网的人机验证JS加密逻辑,并给出Python实现方案,帮助开发者绕过验证机制,实现高效数据采集。

1. 贝壳网人机验证机制概述

贝壳网的人机验证通常包括以下几种形式:

  1. 滑块验证:用户需拖动滑块完成拼图。
  2. 点选验证:要求用户点击符合要求的图片区域。
  3. 动态Token验证:前端生成加密参数,提交至后端校验。

本文重点分析动态Token加密逻辑,即前端如何生成加密参数(如 **<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">token</font>****<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">signature</font>** 等),并模拟该过程实现自动化绕过。

2. 逆向分析流程

2.1 目标定位

  1. 抓包分析
    使用浏览器开发者工具(F12)或抓包工具(Charles/Fiddler)观察验证请求,找到关键API(如 **<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">/api/captcha/verify</font>**)。

关键参数识别
通常包含以下字段:

{"token": "xxxxxx","signature": "yyyyyy","timestamp": 1234567890,"behavior_data": "{...}"
}

这些参数由前端JS生成,需逆向其加密逻辑。

2.2 JS代码逆向

(1)查找加密入口
  1. 在浏览器中搜索关键词(如 **<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">token</font>****<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">signature</font>****<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">encrypt</font>**)。
  2. 通过调用堆栈(Call Stack)定位生成参数的函数。
(2)调试关键函数

假设发现以下关键函数:

function generateToken() {var e = Date.now();var t = encryptAES(e + "|" + Math.random());return t;
}

说明 **<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">token</font>****<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">AES加密(时间戳|随机数)</font>** 生成。

(3)提取加密算法
  • 使用 Chrome DevToolsSources 面板,格式化混淆的JS代码。
  • 找到 **<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">encryptAES</font>** 函数,提取密钥和加密模式(如 **<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">CBC</font>****<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">PKCS7Padding</font>**)。

2.3 Python模拟加密

逆向完成后,用Python实现相同的加密逻辑。以下是一个示例:

(1)安装依赖
(2)Python实现AES加密
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
import base64
import time
import randomdef encrypt_aes(data, key, iv):cipher = AES.new(key.encode(), AES.MODE_CBC, iv.encode())padded_data = pad(data.encode(), AES.block_size)encrypted = cipher.encrypt(padded_data)return base64.b64encode(encrypted).decode()# 贝壳网AES加密参数(需根据实际逆向结果调整)
KEY = "xxxxxx"  # 替换为实际密钥
IV = "yyyyyy"   # 替换为实际IVdef generate_token():timestamp = int(time.time() * 1000)rand_num = random.random()raw_data = f"{timestamp}|{rand_num}"token = encrypt_aes(raw_data, KEY, IV)return token

3. 完整爬虫实现

3.1 获取验证参数

import requestsdef get_captcha_params():url = "https://ke.com/api/captcha/get"headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"}response = requests.get(url, headers=headers)return response.json()def submit_captcha(token, signature):url = "https://ke.com/api/captcha/verify"data = {"token": token,"signature": signature,"timestamp": int(time.time() * 1000)}response = requests.post(url, json=data, headers=headers)return response.json()

3.2 模拟验证流程

# 1. 获取验证参数
captcha_data = get_captcha_params()# 2. 生成加密Token
token = generate_token()# 3. 计算签名(假设signature由HMAC-SHA256生成)
import hmac
import hashlibdef generate_signature(token, secret_key):return hmac.new(secret_key.encode(), token.encode(), hashlib.sha256).hexdigest()SECRET_KEY = "zzzzzz"  # 替换为实际密钥
signature = generate_signature(token, SECRET_KEY)# 4. 提交验证
result = submit_captcha(token, signature)
print("验证结果:", result)

4. 反反爬策略

  1. IP代理池:避免IP被封。
  2. 请求头伪装:模拟浏览器行为。
  3. 浏览器自动化(Playwright/Selenium):用于复杂交互验证。

5. 结论

本文通过逆向分析贝壳网人机验证的JS加密逻辑,提取了AES加密和HMAC签名算法,并用Python模拟生成合法参数。该方法适用于需要绕过动态Token验证的爬虫场景,但需注意:

  • 贝壳网可能更新加密逻辑,需定期维护。
  • 高频请求可能触发风控,建议控制采集频率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/87466.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/87466.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/87466.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue3 + Element Plus中el-table加载状态分析

在 Vue 3 中&#xff0c;当 onMounted 钩子被触发时&#xff0c;父组件的 DOM 已经挂载完成&#xff0c;但子组件&#xff08;如 el-table&#xff09;可能尚未完成其内部渲染。具体分析如下&#xff1a; 1. onMounted 的执行时机 父组件挂载完成&#xff1a;onMounted 表示当前…

OpenCV图像拼接技术详解:从特征匹配到全景合成

本文将详细介绍如何使用OpenCV实现两幅图像的自动拼接&#xff0c;涵盖特征提取、单应性矩阵计算和图像融合等关键技术。 一、图像拼接概述 图像拼接是将多张有重叠区域的图像合并成一幅全景图的技术&#xff0c;广泛应用于全景摄影、卫星图像处理、医学影像等领域。其核心技术…

如何通过 5 种方式向 Android 手机添加音乐

想把音乐添加到你的安卓手机&#xff0c;然后随时随地无需网络连接就能欣赏你喜爱的音乐吗&#xff1f;这不再是麻烦。现在&#xff0c;你可以按照本指南中的有效方法&#xff0c;将音乐添加到你的安卓手机上。让我们在安卓手机上聆听我们美妙的歌曲吧。 第 1 部分&#xff1a;…

VS Code 项目中的 .vscode 目录详解

VS Code 项目中的 .vscode 目录详解 .vscode 目录是 VS Code 项目的核心配置中心&#xff0c;它包含特定于当前项目的配置&#xff0c;这些配置覆盖全局设置&#xff0c;确保团队成员获得一致的开发环境体验。 .vscode 目录中的核心文件 文件名作用是否应纳入版本控制settin…

Ubuntu22.04安装opengauss并配置远程访问、JDBC连接

内容概括 最近在研究怎么在ubuntu服务器环境下使用opengauss&#xff0c;看了下官方下载地址没有适配ubuntu的安装包。仔细翻了下官方文档&#xff0c;发现安装指南里有提供一个deb包安装方案&#xff0c;有适配ubuntu&#xff0c;经过实践可行&#xff0c;于是记录下来给有需要…

国产智能体“双子星”:实在Agent vs Manus(核心架构与技术实现路径对比)

2025年&#xff0c;人工智能领域迎来重要转折点——大模型的光环逐渐消散&#xff0c;落地应用成为行业焦点。 正如业内人士所言&#xff1a;“2023年&#xff0c;大家普遍觉得要买一个大模型&#xff0c;但训练完了怎么用起来&#xff0c;大家一头雾水。” 在这一背景下&…

pgAdmin 4 连接 postgreSQL

环境如下&#xff1a; 宿主机为Windows 11postgreSQL安装在宿主机上的Linux虚机中&#xff0c;Hypervisor是VirtualBoxpgAdmin 4 已安装在宿主机上 本文讲述&#xff1a;如何通过宿主机上的pgAdmin 连接到虚拟机中的PG。 设置监听 默认的PG监听主机为localhost&#xff0c;…

HTTP 缓存策略:强缓存与协商缓存的深入解析

在HTTP缓存策略中&#xff0c;强缓存和协商缓存是两种常用的机制&#xff0c;用于减少数据传输和提高网页加载速度。它们通过在客户端和服务器之间建立缓存来避免不必要的网络请求&#xff0c;从而优化性能并提高用户体验。本文将详细介绍这两种缓存策略的原理、优势和适用场景…

Node.js 中的 Token 认证机制详解

文章目录 Node.js 中的 Token 认证机制详解1. Token 认证基础1.1 什么是 Token 认证&#xff1f;1.2 Token 认证流程 2. JWT (JSON Web Token) 实现2.1 安装依赖2.2 生成 Token2.3 验证 Token 中间件 3. 完整实现示例3.1 登录接口3.2 受保护的路由 4. Token 安全最佳实践5. Tok…

23 - HaLoAttention模块

论文《Scaling Local Self-Attention for Parameter Efficient Visual Backbones》 1、作用 HaloNet通过引入Haloing机制和高效的注意力实现&#xff0c;在图像识别任务中达到了最先进的准确性。这些模型通过局部自注意力机制&#xff0c;有效地捕获像素间的全局交互&#xf…

2025Mybatis最新教程(五)

第5章 ORM映射 5.1 MyBatis自动ORM失效 MyBatis只能自动维护库表”列名“与”属性名“相同时的对应关系,二者不同时,无法自动ORM。 自动ORM失效建表 create table t_managers(mgr_id int primary key auto_increment,mgr_name varchar(50),mgr_pwd varchar(50) ); 添加数据…

解决lombok注解失效问题

Lombok 注解失效是 Java 开发中的常见问题&#xff0c;通常由依赖配置、IDE 支持或构建工具设置引起。最近在拉取别人springboot3jdk21版本的项目时遇到了lombok注解失效&#xff0c;导致项目无法启动的问题&#xff0c;以下是我的解决方案&#xff1a; 首先检查idea 的lombok…

3分钟搭建LarkXR实时云渲染PaaS平台,实现各类3D/XR应用的一键推流

LarkXR是由Paraverse平行云自主研发的去中心化实时云渲染平台&#xff0c;以其卓越的性能和丰富完备的功能插件&#xff0c;引领3D/XR云化行业风向标。LarkXR适用于3D/XR开发者、设计师、终端用户等创新用户&#xff0c;可以在零硬件负担下&#xff0c;轻松实现超高清低时延的3…

vue3 watch监视详解

watch监视 一 &#xff1a;watch监视{ref}定义的基本类型结构 <template><div class"person"><h1>情况一:watch监视{ref}定义的基本类型结构</h1><h1>当前的和为{{ sum }}</h1><button click"changeSum">点我…

TensorFlow Serving学习笔记2: 模型服务

本文深入剖析 TensorFlow Serving 的核心架构与实现机制&#xff0c;结合源码分析揭示其如何实现高可用、动态更新的生产级模型服务。 一、TensorFlow Serving 核心架构 1.1 分层架构设计 TensorFlow Serving 采用模块化分层设计&#xff0c;各组件职责分明&#xff1a; 组件…

共享云桌面为什么能打败传统电脑

近年来&#xff0c;随着云桌面技术的快速发展&#xff0c;共享云桌面作为一种新型的计算模式&#xff0c;正在逐步改变人们的工作和生活方式。它凭借其独特的优势&#xff0c;正在逐步取代传统电脑&#xff0c;成为企业和个人用户的新选择。之所以在部分场景中展现出替代传统电…

B站PWN教程笔记-12

完结撒花。 今天还是以做题为主。 fmtstruaf 格式化字符串USER AFTER FREE 首先补充一个背景知识&#xff0c;指针也是有数据类型的&#xff0c;不同数据类型的指针xx&#xff0c;所加的字节数也不一样&#xff0c;其实是指针指的项目的下一项。如int a[20]&#xff0c;a是…

零基础设计模式——总结与进阶 - 3. 学习资源与下一步

第五部分&#xff1a;总结与进阶 - 3. 学习资源与下一步 到这里&#xff0c;你已经完成了设计模式主要内容的学习。但这仅仅是一个开始&#xff0c;设计模式的精髓在于实践和持续学习。本节将为你提供一些优质的学习资源和后续学习的建议&#xff0c;帮助你在这条道路上走得更…

多模态大语言模型arxiv论文略读(125)

Uni-Med: A Unified Medical Generalist Foundation Model For Multi-Task Learning Via Connector-MoE ➡️ 论文标题&#xff1a;Uni-Med: A Unified Medical Generalist Foundation Model For Multi-Task Learning Via Connector-MoE ➡️ 论文作者&#xff1a;Xun Zhu, Yi…

【学习笔记】NLP 基础概念

1.1 什么是 NLP 定义&#xff1a; 自然语言处理&#xff08;NLP&#xff09;**是一种让计算机理解、解释和生成人类语言的技术。它是人工智能领域中极为活跃且重要的研究方向&#xff0c;旨在模拟人类对语言的认知和使用过程 特点&#xff1a; 多学科交叉&#xff1a;结合计…