# 爬虫逆向 **Repository Path**: lucze/crawler-reverse ## Basic Information - **Project Name**: 爬虫逆向 - **Description**: 记录爬虫心得与爬虫项目 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2025-11-18 - **Last Updated**: 2026-02-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: Spider ## README # 爬虫逆向 ## 逆向方法 1. ctrl + shift + F 全局搜索参数 (最快) 2. hook注入debugger 3. xhr断点栈堆分析 (最稳) 4. 禁止使用启动器 ## 扣代码方式 ### 单扣 1. 运行效率高 2. 花费时间多 3. 一般情况下,全扣,人的工作效率低,但机器的运行效率高 ### 全扣 1. 运行效率低 2. 在代码有几十万行时,会导致解释器卡死(这时需要使用单扣) 3. 可能存在一个文件引用另外一个文件的情况 4. 如果为单文件,代码较少,全扣可以节省大量时间 5. 变量变多可能需要补更多的变量,一般情况下,需要补充浏览器的环境变量(node.js不包含浏览器的环境变量)) 6. 一般情况下,全扣,机器运行效率低,但人的工作效率高 ## 全局搜索 1. 后端返回的为加密数据,可以全局搜索 $.ajax(查看其中的success或者done) JSON.parse decrypt interceptors 2. 前端向后端发送加密数据,可以全局搜索 json.stringify encrypt setPublicKey 3. 请求标头存在加密信息可以搜 interceptors.request.use setRequestHeader 4. 响应存在加密数据,可以全局搜索 interceptors.response.use ## 全局搜索词汇分析 1. interceptors.request.use : 请求拦截器(XML),一般对即将发生给服务器返回的数据进行拦截并做出处理 2. interceptors.response.use : 响应拦截器(XML),一般对服务器返回的结果进行拦截并做出处理 3. JSON.parse : **JSON字符串** 类型的数据无法直接渲染到浏览器上,需要转换为 **JavaScript对象** 才能渲染到浏览器上 4. decrypt : 对称加密与非对称加密算法的关键字,作用为**解密**数据 5. encrypt : 对称加密与非对称加密算法的关键字,作用为**加密**数据 6. $.ajax(其中的success或者done) : ajax**请求成功**后的回调函数 7. json.stringify : 加密数据,一般会先将 **JavaScript对象转为JSON字符串** 后再进行 **加密** 处理 8. setPublicKey : 一般在JSEncrypt中使用,只能用于加密,常用于浏览器 ## 加密 1. 对称加密 2. 非对称加密 ## 对称加密(加密结果是固定的) 1. AES算法与DES算法 2. 加解密关键词:encrypt、decrypt 3. JS包 : crypto-js ### DES算法(分组进行加解密,对明文进行分组,每组64bit(不足64位时会进行补位)) 1. 工作模式: ECB模式 存在一个密钥(key + 明文/密文) 2. 工作模式: CBC模式 存在一个密钥和一个偏移量(key + iv + 明文/密文) 3. key的长度要求为8位,为64个bit ### AES算法(密钥长度可选) 1. aes-128:key 长度为16位 2. aes-192:key 长度为24位 3. aes-256:key 长度为32位 4. iv的长度固定要求为16位 5. 工作模式: ECB模式 存在一个密钥(key + 明文/密文) 6. 工作模式: CBC模式 存在一个密钥和一个偏移量(key + iv + 明文/密文) ## 非对称加密(加密结果是不固定的) 1. RSA算法 2. 存在setPublicKey、setKey、setPrivateKey、getPublicKey等关键词 3. 存在一堆密钥,通常公钥加密,私钥解密,也可以私钥加密,公钥解密 4. 非对接加密生成的秘钥对 5. node-rsa使用pkcs8-public 进行生成的秘钥开头随着key长度进行变化,512、1024、2048、4096均不同 6. node-rsa使用pkcs8-private 进行生成的秘钥开头为MIC 7. JS包: node-rsa 可以进行加密解密和生成秘钥对 8. JS包: jsencrypt 无法生成秘钥对,并且只能进行加密,多用于浏览器中 ## 摘要算法 1. md5 32位(大部分)/16位(小部分) 2. sha1 40位 3. sha224 56位 4. sha256 64位 5. sha384 96位 6. sha512 128位 7. Hmac存在一个密钥 ## Error: Malformed UTF-8 data错误原因 1. key 错误 2. text 不完整 3. iv 错误 ## webpack打包 加载器 插件(模块) 怎么确定 是否调用了 webpack 调用方法 调用的方法是一个单独的字母 入参是 数字 或者 字符串 n(123) n('abc') n方法中有 return e[t].call(a.exports, a, a.exports, n) webpack打包的方法 加载器 存方法 取方法 方法存在 直接取 方法不存在 加载一遍 把加载的内容存在缓存里 ## this定位 1. 看this指向的类 2. 通过ctrl+f搜索 this.属性名 = 进行定位 3. 一般情况下为 this.xxx = new xxx() ## 注意事项 1. 遇到window级别的参数需要在js代码内将此参数设置为global 2. 注意环境参数,可能需要补windows环境 3. 遇到webpack,先去拿到webpack加载器 4. 多次刷新看参数,如果参数不变,可以直接使用参数的值 5. 进行参数测试,可以确认哪些参数需要逆向,降低工作量,但容易直接被403。 6. 请求频率过高,容易403,注意设置休眠时间 7. 请求时"Content-Type": "application/json"此内容会影响发送数据时的数据类型,数据类型错误服务器将无法返回数据 8. 存在传递参数不对 依然返回数据,但是数据是错误的数据 9. 应用版本更新后,老版本的api接口可能依旧存在,通常情况下,某些老版本接口不验证参数依旧可以访问数据 10. 解密后的数据一般为字符串(str),字符串是无法在前端渲染的,需要使用JSON.parse转换为JSON对象后再渲染到前端页面 ## node下载 1. 下载nvm 2. nvm install 16 3. nvm list 4. nvm use 16 ## 存放文件 1. 笔记 2. 项目 + 思维分析 ### Python执行js输出中文出现乱码 #### 方法一 在每个python文件开头添加下面的代码 ```python import subprocess from functools import partial subprocess.Popen = partial(subprocess.Popen, encoding='utf-8') ``` #### 方法二 原始配置 PYTHONUNBUFFERED=1; 错误:读取中文时出现乱码 或者 执行js时出现报错 解决: 在运行/调试配置内的编辑配置,选择左下角编辑配置模版,选择Python,选择环境变量 PYTHONUNBUFFERED=1;PYTHONIOENCODING=utf-8;PYTHONUTF8=1 之后代码运行无需再进行配置或添加代码 # selenium使用文档 >Chrome驱动网址:https://googlechromelabs.github.io/chrome-for-testing/ 1. 查看Chrome浏览器版本 2. 下载对应版本的ChromeDriver 3. 安装与配置 4. 配置环境变量: 右键“此电脑” → 属性 → 高级系统设置 → 环境变量 → 编辑Path,添加ChromeDriver。