Python爬虫之Js逆向案例(2)-某乎搜索

Python爬虫之Js逆向案例(2)-知乎搜索

声明:某乎加密逆向分析仅用于研究和学习

大家好,今天继续分享关于某乎关键词搜索接口为案例的Js逆向实战。如果你是一名新手,而且还没有来得及看上一篇《Python爬虫之Js逆向案例(1)-某乎搜索》的话,建议你先去看完再来看这一篇,因为里面有很多有利于新手实操的高能总结,还包含了一些js调试技巧,上一篇里中总结的内容在后续案例中不会再那么详细的讲了,不然有些冗余,见谅哈!;

今天的内容是在昨天的基础上继续深入。通常情况下,我们的爬虫肯定不只是取第一页的数据,例如,我们需要获取前20页的数据,该怎么办呢?下面演示,使用爬虫获取翻页数据;

下面会进行以下几步进行分析(下方演示过程全部使用chrome浏览器);

  1. 锁定关键字段;
  2. 破解关键字段;
  3. python爬虫结果演示;

一.锁定关键字段

昨天我们已经定位到搜索接口,所以今天的获取翻页数据就是在昨天的接口上继续处理。

根据昨天的“高能总结”,锁定关键字段只需要比对连续几次接口请求时的不同点即可,对比之后,很容易得到答案:

  1. handers里的x-zse-96,这个我们上一篇已经破解了,扣好的加密文件直接用即可得到;
  2. 请求参数上多了2个字段,变了2个字段,如下图:
    在这里插入图片描述

上拉刷新后第二页的请求参数里面多的字段:search_hash_id、vertical_info,第二次之后这俩字段都一样;
第一页基础上改变的字段:lc_idx、offset,这俩字段每次请求都相同;

综上:今天只需要解出search_hash_id的值就行了。老方法,直接在接口上找到字段search_hash_idjs文件出现的位置,如下图:

在这里插入图片描述

定睛一看,哦呵!就两个地方出现了,这是不是有点简单呀???跑偏了?出现这种情况不要慌,仔细分析一下,这两个地方既然都不是给search_hash_id赋值的,那说明什么?说明这个东西看似一个md5加密的值,但又不是在前端加密完成的值,那又能来自哪呢?

高能总结:
技巧:如果关键值在前端没有出现赋值语句,那只能来自三种地方:

  1. 该值在前端某个地方写死的,是个定植一直都不变;
  2. 来自cookies里取的;
  3. 接口返回的,直接根据这个键名在某个地方取出来的,比如obj.a.b[‘XXX’];

二.破解关键字段;

根据上面的情况,我们一个个的排查,第一种情况能直接排除,因为换个关键词再翻页的话,这个值就变了,说明这里并不是前端写死的;第二种情况,我们翻看cookies发现里面并没有这个值;只剩下第三种情况了,那我们就在接口上搜索一下呗,如下图:
在这里插入图片描述

还真有命中项,这个关键字我只请求了三次,这个关键字在三次接口里既然都有出现,那第一次出现的地方不就是后面接口的来源了吗?我们点开第一个,然后在右下方再搜索,如下图:
在这里插入图片描述

我们发现上面分析到的值这里貌似都能找到,所以翻页的时候,只需要把第一次的这个值保存下来,拼接到url参数里就行了呗,这次的内容是不是比上一篇的要简单多了;

这里再分析一个小技巧,如何快速定位请求头里的字段哪些是关键字段呢?
在这里插入图片描述

高能总结:
技巧:

  1. 如上图,在接口上右键,拷贝当前接口的curl版,放在编辑器中的控制台去请求一下,在能请求通的前提下,每次都减少一些字段,直到不能再减少为止;
  2. 上面的的方式对curl来说能找到少请求头参数,但是如果用python的request包请求的话,可能略有字段差异,大家试一下就知道了;

三.python爬虫结果演示

在上一篇基础上微改,抓取请求前三页数据就很轻松了吧:

在这里插入图片描述

后期会持续分享爬虫案例-100例,有兴趣的同学可加入我的知识星球,有更多技巧、高能总结等你哦!!!;

欢迎加入「python、爬虫、逆向Club」知识星球

### JavaScript 逆向工程实例分析 #### 背景介绍 JavaScript 逆向工程通常用于理解前端代码的行为逻辑,尤其是在处理动态生成的数据、加密算法或复杂的业务逻辑时。以下是几个典型的 JavaScript 逆向工程案例及其分析。 --- #### 案例一:Ajax 请求中的 Token 动态生成机制解析 某些网站会在每次请求中动态生成一个 `token` 参数,防止 CSRF 攻击或其他安全威胁。这种情况下,可以通过 JavaScript 逆向找到其生成逻辑并加以利用[^3]。 ##### 分析过程 1. **抓包观察** 使用浏览器开发者工具查看网络请求,发现每次请求都携带不同的 `token` 参数。 2. **源码定位** 查找页面加载的 JavaScript 文件,寻找与 `token` 或类似字段相关的定义和计算逻辑。 3. **插桩调试** 利用插桩技术,在目标函数内部插入日志打印语句,捕获传入参数和返回值。例如: ```javascript (function() { const originalTokenGenerator = window.generateToken; window.generateToken = function(...args) { console.log('Original Arguments:', args); const result = originalTokenGenerator.apply(this, args); console.log('Generated Token:', result); return result; }; })(); ``` 4. **结果还原** 如果无法直接获取生成逻辑,可以尝试在本地环境中运行该脚本,或者通过 Node.js 模拟执行环境重现行为。 --- #### 案例二:签名算法逆向 许多 Web 应用程序会使用签名算法保护接口安全性,比如基于时间戳、随机数和其他参数生成唯一签名字符串。以下是一个常见的场景: ##### 描述 假设某个 API 接口需要提供如下参数: - 时间戳 (`timestamp`) - 随机数 (`nonce`) - 用户 ID (`userId`) - 签名 (`signature`) 其中,`signature` 是由其他三个参数经过某种哈希运算得到的结果。 ##### 解决思路 1. **静态分析** 下载网页对应的 JavaScript 文件,搜索关键词如 `sign`, `hash`, `crypto` 等,找出可能的签名函数。 2. **动态调试** 在浏览器控制台中实时监控变量变化,确认哪些数据参与了签名计算。例如: ```javascript debugger; // 设置断点 const signatureFunction = window.calculateSignature; console.log(signatureFunction.toString()); ``` 3. **重构逻辑** 将提取出的核心算法移植到 Python 中实现自动化调用。例如: ```python import hashlib def generate_signature(timestamp, nonce, user_id, secret_key="example"): data = f"{timestamp}{nonce}{user_id}" hashed = hashlib.md5((data + secret_key).encode()).hexdigest() return hashed ``` --- #### 案例三:表单验证逻辑逆向 一些登录界面可能会采用客户端校验方式阻止非法提交。此时可通过逆向了解具体规则[^4]。 ##### 场景描述 用户填写用户名和密码后触发 JavaScript 函数完成初步检测再决定是否继续流程。 ##### 方法论 1. 定位事件绑定关系; 2. 反编译混淆后的代码片段; 3. 构建测试框架验证假定条件成立与否; --- ### 工具推荐 对于初学者来说掌握几款高效辅助工具有助于提升效率: - Burp Suite Free Edition – 抓取 HTTP(S)流量便于后续研究; - Chrome DevTools / Firefox Developer Tools – 提供强大的调试功能; - JSDetox – 自动化去混淆部分简单编码样式文件内容; - PyExecJS – 方便地跨平台调用多种引擎解释执行指定代码段落。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玛卡`三少

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值