JS逆向——1

175 阅读3分钟

JS逆向

1.JS逆向介绍

  1. 参数加密:某些网站可能使用某种加密算法 对有个参数或者字段进行加密 我们携带这个参数进行请求需要是加密后的数据且值要是正确的.
  2. 定义:分析web网站JavaScript的执行流程 获取其代码的逻辑 算法 或进行改写。
  3. 前提:该网站需要进行JS逆向 通俗点就是有加密字段 注意:有些网站的加密字段可能没有校验 不带或者固定与随意给值的也不用逆向 加密字段一般是请求的参数 或者请求头字段
  4. 逆向过程:由结果往前推的过程 需要找到这些加密结果是怎么生成的 需要什么条件 准备好这些条件 用代码去模拟浏览器js生成结果

例:某网站登录 输入账号密码 点击登录触发登录事件 调用了某段JS 对我们输入的密码进行加密 加密完了以后传给服务器 服务器接收到请求 对密码进行解密 检验是否正确 正确成功 否则请求失败

逆向就是需要 去找到密码加密的位置 分析其加密流程与算法 找到加密所需要的条件 本地改写出值再发起请求校验是否正确

常见的加密算法

  1. 消息摘要算法(哈希算法) 系列

    哈希算法是做单向加密的 明文数据经过加密是不能解密的 一般的长度是固定的 sha系列长度比md5长 安全性更高 但是速度更慢

  2. 对称加密(加密解密密钥相同) 通信双方同时掌握一个密钥,加密解密都是由一个密钥完成的 一旦密钥被共享,泄漏几率增大

  3. 非对称加密(区分公钥和私钥):公钥对数据加密 私钥对数据解密 私钥网站不会给你 拿不到

    RSA密钥长度一般1024位 2048、3072 ....... 长度越长越安全 一般为1024

    rsa在加密的时候有个随机填充 由于填充的不同 计算的结果 与抓包看到的值是不一样的 但是不影响正常使用

注意:不必特别纠结加密算法原理 加密是怎么实现的 爬虫不是学密码学 只要知道网站加密的逻辑就行

常见的加密算法库

JavaScript

  1. Crypto-JS : 应用比较广泛支持算法较多 node下载命令:npm install crypto-js
  2. JSEncrypt: 对 RSA 算法提供了更加全面的支持 node下载命令:npm install jsencrypt (不推荐 新版源码有问题 我们可以直接扣取网站的代码)

python

  1. Cryptodome 或者 Crypto: Crypto 已经停止更新 Cryptodome 为替代 安装:pip install pycryptodome
  2. hashlib: hashlib 提供了常见的摘要算法,如 MD5,SHA 是python的标准库
  3. hmac: 对 HMAC 算法提供了支持 python的标准库
  4. pydes: DES 库 安装:pip install pydes
  5. rsa :RSA库 安装:pip install rsa