【JS逆向】2024年9月20日-小红书最新x-s算法还原

作者声明:文章仅供学习交流与参考!严禁用于任何商业与非法用途!否则由此产生的一切后果均与作者无关!如有侵权,请联系作者本人进行删除!

初步分析

我们先抓包看下x-s长什么样子。

在这里插入图片描述

很明显x-sXYW_加上一个JSON格式字符串的 Base64编码,我们来解码看看原始文本是什么。

在这里插入图片描述

{
   
   "signSvn":"55","signType":"x2","appId":"xhs-pc-web","signVersion":"1","payload":"31e72e37c22408bd6ef26b0dc7a900a097d7e43b0f7c42fea858bcb9ce2959af1085070b7c69939302fb45af46dd33e67c594e165ae05e4df9208f24769d509c41858c5fe82146e8428f54b8ddb21ff6b7ac10bba9646577c56d67bd441f45d32878667fa67b185f568b665797657dbfc575d037fb9d3004961f645a109648c5ebd4e06ddf01702ecee5c23e15352f441c85b4222eb907c9063ea5ea34443793985706ed60dc2b309f1a678c1f695200c1feb8821220ee5a32d980c15c9250d7db3f2e61b378216dd5e0796f9c701d3c"}

可以看到只有payload字段是加密了。接下来我们在JS代码中定位到x-s的生成位置。打开F12,搜索"X-s",在这里打上断点。

### 前程无忧 JavaScript 逆向工程最新案例分析 在现代 Web 开发中,JavaScript 逆向工程是一种常见的技术手段,用于研究目标系统的运行机制并提取有用的信息。对于前程无忧这样的招聘平台而言,其前端交互通常依赖于复杂的加密逻辑和动态加载的数据接口[^2]。 #### 数据采集与加密机制解析 通过对前程无忧的前端页面进行分析可以发现,该网站采用了多种安全措施来保护其 API 接口不被滥用。其中包括但不限于 HmacSHA256 加密算法以及特定的会话令牌(如 `acw_sc__v2`)。这些加密方法主要用于验证请求合法性,并防止未经授权的数据抓取行为。 为了绕过此类防护机制,在实际操作过程中需要深入了解以下几个方面: 1. **HmacSHA256 实现** 使用标准库或第三方工具重新构建服务器端所使用的签名生成函数。这一步骤涉及对原始消息体、密钥以及其他可能影响最终哈希值的因素进行全面剖析。 2. **Session Token 动态追踪** 部分重要参数可能会随时间变化而更新,因此必须找到它们的具体计算方式或者刷新周期规律。例如,“acw_sc__v2”的生命周期及其关联规则就是典型代表之一。 3. **API 请求模拟** 结合以上两点成果编写自动化脚本来伪装成合法客户端发起查询动作。此时需要注意设置恰当头部信息(User-Agent, Referer 等),以便尽可能贴近真实环境下的网络通信模式。 #### HTML 结构分析 除了关注后台服务层面上的安全设计外,我们还应该重视前端渲染部分的内容布局特点。从前述资料可知,每条招聘信息均包裹在一个名为 `<div class="joblist-item">` 的容器标签内部;并且各个子属性分别对应不同的业务维度描述字段[^3]。 基于此认识,开发者能够更加精准定位所需爬取的目标节点位置,进而提升整体效率水平的同时降低误判概率。 ```javascript // 示例代码片段:选取单个职位详情区域 const jobItems = document.querySelectorAll('.joblist-item'); for (let item of jobItems) { const title = item.querySelector('h3').innerText.trim(); // 职位名称 console.log(`Position Title: ${title}`); } ``` #### 封装 Python 接口 当完成了基础层面的技术积累之后,则可进一步考虑如何将其整合至更高级别的解决方案当中去。比如利用 Python 编写专门面向某类场景需求定制化的 SDK 工具包等形式展现出来。 具体做法如下所示: - 导入必要的外部模块资源; - 定义核心功能单元; - 提供灵活配置选项支持个性化调整能力等等。 ```python import hmac import hashlib from urllib.parse import urlencode def generate_hmac_signature(secret_key, message): """Generate HMAC-SHA256 signature.""" mac = hmac.new( secret_key.encode(), msg=message.encode(), digestmod=hashlib.sha256 ) return mac.hexdigest() class WuyouApiWrapper: BASE_URL = "https://example.com/api" def __init__(self, app_id, secret_key): self.app_id = app_id self.secret_key = secret_key def fetch_data(self, params={}): timestamp = int(time.time()) query_string = urlencode({ 'timestamp': str(timestamp), **params, }) headers = { 'Authorization': f'Bearer {generate_hmac_signature(self.secret_key, query_string)}', 'Content-Type': 'application/json' } response = requests.get(f"{WuyouApiWrapper.BASE_URL}?{query_string}", headers=headers) return response.json() ``` ---
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值