1.JS逆向简介
1.什么是JS逆向
JS逆向(JavaScript逆向),是指通过分析网站前端的JavaScript代码,理解其加密逻辑、参数生成方式、请求流程等,以模拟浏览器行为或绕过反爬机制,获取目标数据的过程。
它主要应用于以下场景:
-
加密参数还原:有些接口需要特定的加密参数,必须通过逆向JS逻辑来生成这些参数。
-
模拟用户行为:例如滑动验证码、点击验证,需要还原真实用户操作。
-
破解反爬机制:如动态加载内容、cookie加密校验、频率限制等。
-
辅助爬虫:当常规爬虫无法获取数据时,JS逆向能深入底层逻辑,提取有效信息。
通俗来说,JS逆向就是“搞懂网页是怎么保护数据的”,然后“用技术手段绕过它”。
2.JS逆向和JS加密是什么操作
-
JavaScript加密:是指在网页前端使用各种加密算法(如Base64、MD5、AES、RSA等)对敏感数据进行处理,以增强安全性或防止接口被直接调用。
JavaScript逆向:是对网页中JavaScript代码进行反向分析的过程,旨在理解其逻辑、加密流程和数据交互方式。它并不是直接还原加密信息为明文,而是通过分析加密逻辑,使用如Python等编程语言模拟加密过程,生成网站所需的参数,从而实现数据抓取。
需要强调的是:逆向的核心不在于破解密文本身(因为绝大多数加密算法不可逆),而是模拟整个加密流程,即“按网站预期的方式,构造出正确的请求”。
3.为什么需要加密
-
保障数据传输安全
在Web应用中,客户端与服务器之间常会传输敏感信息,如登录凭证、支付数据等。通过加密处理,可以防止这些数据在传输过程中被窃听、篡改或伪造。 -
保护客户端数据
某些敏感信息(如Token、用户标识等)需在本地存储。前端加密能在一定程度上增加本地数据的安全性,降低被直接读取或劫持的风险。 -
提升密码安全性
尽管密码最终应以哈希形式存储在服务器上,但在客户端进行初步加密(如加盐哈希)能增加攻击难度,尤其在登录、注册等敏感操作中起到预防作用。 -
实现数字签名与身份验证
某些接口需要验证数据来源和完整性,通过前端参与加密签名或验签过程,有助于防止请求被伪造或数据被篡改。 -
算法测试与安全研究
在部分业务或研发场景中,前端实现加密算法可用于验证逻辑、模拟服务端流程,或进行加密机制的研究与性能测试。
4. 常见的加密方式
在前端逆向与爬虫实战中,我们经常会遇到以下几种加密形式:
1. 请求头加密
网站除了常规请求头字段(如 User-Agent
、Host
、Origin
、Referer
)外,还会附带一些特殊参数,如自定义的Token、校验码等,这些就是经过加密或动态生成的请求头字段。识别这些加密字段并还原其生成逻辑,是逆向的关键步骤之一。
📌 示例网址:
https://www.qcc.com/web/search?key=小米&p=2
2. 请求参数加密
URL中看似普通的请求参数,实则已经过加密处理,如POST
或GET
参数中的签名、时间戳、加密ID等。需要通过JS逆向分析其加密过程并在Python中模拟。
📌 示例网址:
全国 本科 大学排名-极志愿
3. Cookie 验证
部分网站在初次访问或操作前,会通过JS动态设置cookie,其中包含身份验证信息或校验码。这类cookie值往往经过加密处理,需要通过逆向找出生成逻辑。
📌 示例网址:
http://www.fangdi.com.cn/new_house/new_house_jjswlpgs.html
4. 响应数据加密
即便请求成功,返回的数据也可能是加密格式(如Base64、Hex、AES加密JSON等),需要通过逆向提取解密逻辑,还原为可读数据。
📌 示例网址:
数位观察 - 查线下数据,就上数位观察
5. 全加密(请求体加密 + 响应加密)
这种情况最复杂,包含请求参数加密、cookie校验、响应数据加密等多个环节,数据完全不可见,通常采用复杂的加密算法或非对称加密方式,逆向难度较高。
📌 示例网址:
中国观鸟记录中心 - 活动报告...