爬虫|Js逆向某加速 cookie 加密分析

本文介绍了如何分析和破解一个使用Js加密的Cookie反爬策略。作者通过抓包发现三次请求中Cookie的加密变化,并详细解析了加密流程,包括混淆代码的还原,最终揭示了三种加密算法的选择机制。提供了源码地址供读者参考学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

声明:本文只用于学习研究,禁止用于非法用途,如有侵权,请联系我删除,谢谢!

大家好,我是村长~~

2021年7月19日开发中遇到一个加速乐cookie加密的网址

当天即解决处理了并把加密的JS代码扣了下来并上传了

请注意时间线 2021-07-19日。由于平常工作繁忙,解决完之后并没有立即写文章,打算几天后才写。故在 07-28 日发表了文章!

今天给大家分享一个常见的 cookie 加密反爬,这个加密以前也遇到过,不过只有一层

现在升级了,做了两层加密,不过看起来套路差不多,问题不太!

话不多说,地址如下:

aHR0cDovL3N3ai5oZWZlaS5nb3YuY24vY29udGVudC9jb2x1bW4vNjc5NDAyMT9wYWdlSW5kZXg9MQ&

### 爬虫逆向分析网页技术教程 #### 什么是爬虫逆向爬虫逆向是一种通过对目标网页的结构、代码以及交互逻辑进行深入分析,从而突破反爬机制并成功抓取所需数据的技术。随着互联网的发展,许多网站采用了复杂的反爬策略,如动态加载内容、加密传输和行为检测等。因此,传统的静态爬虫已难以满足需求,而爬虫逆向则成为一种有效的解决方案[^2]。 #### 基础概念 1. **请求-响应模式** 传统爬虫依赖于HTTP协议下的请求-响应模型,通过发送GET/POST请求获取HTML页面的内容。然而,当面对JavaScript渲染的动态页面时,这种方法往往失效[^1]。 2. **反爬机制** 反爬机制主要包括但不限于以下几种形式: - 动态加载内容(AJAX调用)。 - 数据加密或混淆。 - 行为验证(如滑动验证码)。 - IP封禁与频率限制。 3. **逆向工程的核心** 爬虫逆向的目标是对抗上述反爬措施。其核心在于理解目标系统的内部工作流程,并利用合适的工具和技术实现自动化数据采集[^4]。 --- #### 实现爬虫逆向的关键步骤 ##### 1. 分析网页行为 使用浏览器开发者工具(F12),观察网页加载过程中的网络活动。重点关注以下几个方面: - 查找API接口地址及其参数。 - 检查是否存在加密算法或签名生成逻辑。 - 记录Cookie、User-Agent和其他必要的头部信息。 示例代码展示如何捕获XHR请求: ```python import requests url = 'https://example.com/api/data' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)', 'Referer': 'https://example.com/' } response = requests.get(url, headers=headers) print(response.text) ``` ##### 2. 处理动态加载内容 对于由前端框架(Vue.js、React等)驱动的单页应用程序(SPA),可以尝试解析JavaScript文件以定位实际的数据源。如果遇到复杂的情况,则需借助Selenium或其他无头浏览器模拟真实用户的操作环境[^4]。 示例代码演示启动ChromeDriver实例访问指定URL: ```python from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() chrome_options.add_argument('--headless') # 启用无界面模式 driver = webdriver.Chrome(options=chrome_options) target_url = 'https://dynamic-content.example.com' driver.get(target_url) html_content = driver.page_source driver.quit() with open('output.html', 'w', encoding='utf-8') as f: f.write(html_content) ``` ##### 3. 应对加解密挑战 某些站点会在客户端执行特定计算得出校验码后再发起正式请求。此时可考虑运用抽象语法树(AST)剖析相关脚本片段,进而还原整个运算链条[^3]。 简单例子说明如何提取JS函数定义并通过Python重新实现它: 假设原生代码如下所示: ```javascript function generateToken(seed) { let result = ''; for(let i=0;i<seed.length;i++) { const charCode = seed.charCodeAt(i); result += String.fromCharCode(charCode ^ 7); // XOR operation with fixed value } return result; } console.log(generateToken('hello')); // Output: jgnnq ``` 转换后的版本可能是这样的: ```python def generate_token(seed): result = '' for c in seed: char_code = ord(c) transformed_char = chr(char_code ^ 7) # Perform bitwise exclusive OR result += transformed_char return result token_value = generate_token('hello') print(token_value) # Expected output: jgnnq ``` ##### 4. Hook技术的应用 在更高级别的场景下,可能还需要拦截目标进程内的敏感动作甚至篡改它们的结果。这便是所谓的Hook技术发挥作用之处——允许我们在不修改原始二进制的前提下注入自定义逻辑[^2]。 以下是PyInstaller打包后嵌入DLL插件的一个简化版方案概览: ```cpp #include <windows.h> #include <detours.h> // Define the target function prototype. typedef int (__stdcall *PFN_MyFunction)(int); __declspec(naked) void MyDetour() { __asm jmp OriginalMyFunction; } BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { PFN_MyFunction pFunc = (PFN_MyFunction)GetProcAddress(GetModuleHandle("TargetApp.exe"), "MyFunction"); DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); DetourAttach(&(PVOID&)pFunc, &MyDetour); DetourTransactionCommit(); return TRUE; } ``` --- #### 总结 综上所述,掌握爬虫逆向技能不仅有助于解决日益严峻的反爬难题,还能培养个人关于计算机科学多个分支的知识体系。从基础理论到实践技巧均有所涉猎之后,便能够更加从容地应对各类项目需求[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

全村之希望

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

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

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

打赏作者

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

抵扣说明:

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

余额充值