JS逆向
1.JS逆向介绍
- 参数加密:某些网站可能使用某种加密算法 对有个参数或者字段进行加密 我们携带这个参数进行请求需要是加密后的数据且值要是正确的.
- 定义:分析web网站JavaScript的执行流程 获取其代码的逻辑 算法 或进行改写。
- 前提:该网站需要进行JS逆向 通俗点就是有加密字段 注意:有些网站的加密字段可能没有校验 不带或者固定与随意给值的也不用逆向 加密字段一般是请求的参数 或者请求头字段
- 逆向过程:由结果往前推的过程 需要找到这些加密结果是怎么生成的 需要什么条件 准备好这些条件 用代码去模拟浏览器js生成结果
例:某网站登录 输入账号密码 点击登录触发登录事件 调用了某段JS 对我们输入的密码进行加密 加密完了以后传给服务器 服务器接收到请求 对密码进行解密 检验是否正确 正确成功 否则请求失败
逆向就是需要 去找到密码加密的位置 分析其加密流程与算法 找到加密所需要的条件 本地改写出值再发起请求校验是否正确
常见的加密算法
-
消息摘要算法(哈希算法) 系列
哈希算法是做单向加密的 明文数据经过加密是不能解密的 一般的长度是固定的 sha系列长度比md5长 安全性更高 但是速度更慢
-
对称加密(加密解密密钥相同) 通信双方同时掌握一个密钥,加密解密都是由一个密钥完成的 一旦密钥被共享,泄漏几率增大
-
非对称加密(区分公钥和私钥):公钥对数据加密 私钥对数据解密 私钥网站不会给你 拿不到
RSA密钥长度一般1024位 2048、3072 ....... 长度越长越安全 一般为1024
rsa在加密的时候有个随机填充 由于填充的不同 计算的结果 与抓包看到的值是不一样的 但是不影响正常使用
注意:不必特别纠结加密算法原理 加密是怎么实现的 爬虫不是学密码学 只要知道网站加密的逻辑就行
常见的加密算法库
JavaScript
- Crypto-JS : 应用比较广泛支持算法较多 node下载命令:npm install crypto-js
- JSEncrypt: 对 RSA 算法提供了更加全面的支持 node下载命令:npm install jsencrypt (不推荐 新版源码有问题 我们可以直接扣取网站的代码)
python
- Cryptodome 或者 Crypto: Crypto 已经停止更新 Cryptodome 为替代 安装:pip install pycryptodome
- hashlib: hashlib 提供了常见的摘要算法,如 MD5,SHA 是python的标准库
- hmac: 对 HMAC 算法提供了支持 python的标准库
- pydes: DES 库 安装:pip install pydes
- rsa :RSA库 安装:pip install rsa