当前位置: 首页 > java >正文

1.JS逆向简介

1.什么是JS逆向

JS逆向(JavaScript逆向),是指通过分析网站前端的JavaScript代码,理解其加密逻辑、参数生成方式、请求流程等,以模拟浏览器行为或绕过反爬机制,获取目标数据的过程。

它主要应用于以下场景:

  1. 加密参数还原:有些接口需要特定的加密参数,必须通过逆向JS逻辑来生成这些参数。

  2. 模拟用户行为:例如滑动验证码、点击验证,需要还原真实用户操作。

  3. 破解反爬机制:如动态加载内容、cookie加密校验、频率限制等。

  4. 辅助爬虫:当常规爬虫无法获取数据时,JS逆向能深入底层逻辑,提取有效信息。

通俗来说,JS逆向就是“搞懂网页是怎么保护数据的”,然后“用技术手段绕过它”。

2.JS逆向和JS加密是什么操作

  • JavaScript加密:是指在网页前端使用各种加密算法(如Base64、MD5、AES、RSA等)对敏感数据进行处理,以增强安全性或防止接口被直接调用。

    JavaScript逆向:是对网页中JavaScript代码进行反向分析的过程,旨在理解其逻辑、加密流程和数据交互方式。它并不是直接还原加密信息为明文,而是通过分析加密逻辑,使用如Python等编程语言模拟加密过程,生成网站所需的参数,从而实现数据抓取。

    需要强调的是:逆向的核心不在于破解密文本身(因为绝大多数加密算法不可逆),而是模拟整个加密流程,即“按网站预期的方式,构造出正确的请求”。

3.为什么需要加密

  1. 保障数据传输安全
    在Web应用中,客户端与服务器之间常会传输敏感信息,如登录凭证、支付数据等。通过加密处理,可以防止这些数据在传输过程中被窃听、篡改或伪造。

  2. 保护客户端数据
    某些敏感信息(如Token、用户标识等)需在本地存储。前端加密能在一定程度上增加本地数据的安全性,降低被直接读取或劫持的风险。

  3. 提升密码安全性
    尽管密码最终应以哈希形式存储在服务器上,但在客户端进行初步加密(如加盐哈希)能增加攻击难度,尤其在登录、注册等敏感操作中起到预防作用。

  4. 实现数字签名与身份验证
    某些接口需要验证数据来源和完整性,通过前端参与加密签名或验签过程,有助于防止请求被伪造或数据被篡改。

  5. 算法测试与安全研究
    在部分业务或研发场景中,前端实现加密算法可用于验证逻辑、模拟服务端流程,或进行加密机制的研究与性能测试。

4. 常见的加密方式

在前端逆向与爬虫实战中,我们经常会遇到以下几种加密形式:

1. 请求头加密

网站除了常规请求头字段(如 User-AgentHostOriginReferer)外,还会附带一些特殊参数,如自定义的Token、校验码等,这些就是经过加密或动态生成的请求头字段。识别这些加密字段并还原其生成逻辑,是逆向的关键步骤之一。
📌 示例网址:
https://www.qcc.com/web/search?key=小米&p=2

2. 请求参数加密

URL中看似普通的请求参数,实则已经过加密处理,如POSTGET参数中的签名、时间戳、加密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校验、响应数据加密等多个环节,数据完全不可见,通常采用复杂的加密算法或非对称加密方式,逆向难度较高。
📌 示例网址:
中国观鸟记录中心 - 活动报告...

http://www.xdnf.cn/news/10285.html

相关文章:

  • JSR 303(即 Bean Validation)是一个通过​​注解在 Java Bean 上定义和执行验证规则​​的规范
  • 704SJBH蓝天影院订票网站的设计
  • 极智项目 | 多模态大模型推理平台-Streamlit版(支持Qwen2.5/InternVL3/KimiVL三大模型)
  • b. 组合数
  • 第3节 Node.js 创建第一个应用
  • 六.MySQL增删查改
  • JWT 入门
  • 利用nginx完成iframe请求的身份认证
  • 【NLP 78、手搓Transformer模型结构】
  • Namespace 命名空间的使用
  • (7)-Fiddler抓包-Fiddler状态面板-QuickExec命令行
  • 项目日记 -Qt音乐播放器 -搜索模块
  • 如何手搓扫雷(待扩展)
  • pytest中的元类思想与实战应用
  • C++基础算法————贪心
  • Kafka 如何保证不重复消费
  • Linux搭建DNS服务器
  • BLE协议全景图:从0开始理解低功耗蓝牙
  • 堆与堆排序及 Top-K 问题解析:从原理到实践
  • 玩客云WS1608控制LED灯的颜色
  • 光电设计大赛智能车激光对抗方案分享:低成本高效备赛攻略
  • C 语言栈实现详解:从原理到动态扩容与工程化应用(含顺序/链式对比、函数调用栈、表达式求值等)
  • python连接邮箱的协议选择
  • C语言结构体的别名与创建结构体变量
  • jetpack compose 界面刷新的几种方式 如何避免无效的界面刷新
  • Remote Sensing投稿记录(投稿邮箱写错、申请大修延期...)风雨波折投稿路
  • Adobe Acrobat 9.1.2 Pro (install)
  • 电路图识图基础知识-常用仪表识图及接线(九)
  • 特征图可视化代码
  • 数据库核心技术深度剖析:事务、索引、锁与SQL优化实战指南(第四节)----从行级锁到死锁处理的系统梳理