对某登录站点的JS前端逆向思路
字数 1295 2025-08-10 08:28:13

JS前端逆向分析实战教程

一、JS逆向基础概念

JS逆向是指通过分析JavaScript代码,理解其加密、验证等逻辑的过程。主要应用场景包括:

  • 登录表单加密分析
  • API请求签名破解
  • 数据加密/解密流程还原

二、JS代码定位方法

1. 元素审查定位法

  1. 打开浏览器开发者工具(F12)
  2. 选择目标元素(如登录按钮)
  3. 查看"事件监听器"选项卡
  4. 定位相关JS文件(如login.js)

2. 全局搜索法

  1. 打开开发者工具
  2. 使用Ctrl+Shift+F进行全局搜索
  3. 搜索关键词如:
    • password
    • Crypto
    • encrypt/decrypt
    • secret/key/iv等加密相关术语

3. Onclick属性定位法

  1. 检查HTML元素的onclick属性
  2. 若属性值为JS函数,则可能是加密入口
  3. 追踪该函数定义位置

三、实战案例1:登录表单AES加密分析

1. 加密流程分析

function check() {
    var code = 'letu@levle'; // 加密密钥来源
    var ypassword = $("#ypassword").val();
    var newPassword = secret(ypassword, code, false); // 加密函数调用
    $("#xpassword").val(newPassword);
}

2. AES加密参数提取

通过调试发现:

  • Key: code.substring(16)f3991777154f4bd0
  • IV: code.substring(0,16)ace43e65106a77f6
  • 加密模式: CBC
  • 填充方式: Pkcs7

3. Python实现AES加密

import base64
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad

key = 'f3991777154f4bd0'
iv = 'ace43e65106a77f6'

def AES_Encrypt(data):
    cipher = AES.new(key.encode('utf-8'), AES.MODE_CBC, iv.encode('utf-8'))
    paddingdata = pad(data.encode('utf-8'), AES.block_size)
    encrypted = cipher.encrypt(paddingdata)
    return base64.b64encode(encrypted).decode()

四、实战案例2:API请求签名分析

1. 签名生成流程

const u = "fanyideskweb" // client
const d = "webfanyi"     // product

function k(e, t) {
    return j(`client=${u}&mysticTime=${e}&product=${d}&key=${t}`)
}

function j(e) {
    return c.a.createHash("md5").update(e.toString()).digest("hex")
}

function E(e, t) {
    const o = (new Date).getTime(); // 时间戳
    return {
        sign: k(o, e),  // 签名
        mysticTime: o,   // 时间戳
        // 其他固定参数...
    }
}

2. 签名生成关键点

  1. 固定参数:
    • client: "fanyideskweb"
    • product: "webfanyi"
    • key: "fsdsogkndfokasodnaso" (通过调试发现)
  2. 动态参数:
    • mysticTime: 当前时间戳
  3. 组合格式:client=${client}&mysticTime=${time}&product=${product}&key=${key}
  4. MD5哈希生成签名

3. Python实现请求签名

import hashlib
import time

localtime = str(int(time.time() * 1000))
canshu = f"client=fanyideskweb&mysticTime={localtime}&product=webfanyi&key=fsdsogkndfokasodnaso"
sign = hashlib.md5(canshu.encode(encoding='utf8')).hexdigest()

五、调试技巧

  1. 断点设置

    • 在可疑函数调用处设置断点
    • 在加密函数入口设置断点
    • 在参数生成位置设置断点
  2. 变量监控

    • 观察关键变量的值变化
    • 追踪参数传递路径
  3. 调用堆栈分析

    • 查看函数调用关系
    • 逆向追踪加密流程

六、常见加密算法识别

  1. AES加密特征

    • 出现key/iv参数
    • 有CBC/ECB等模式设置
    • 有Pkcs7等填充方式
  2. RSA加密特征

    • 出现公钥/私钥
    • 有setPublicKey等调用
    • 使用长字符串密钥
  3. MD5/SHA哈希特征

    • createHash方法调用
    • digest('hex')输出
    • 固定长度输出(32/64字符)

七、防御措施与注意事项

  1. 防御措施

    • 代码混淆(如变量名混淆)
    • 加密逻辑分散
    • 动态密钥生成
    • 反调试机制
  2. 注意事项

    • 仅用于学习研究
    • 遵守网站使用条款
    • 避免高频请求
    • 尊重版权和隐私

八、完整工作流程总结

  1. 定位加密入口点(全局搜索/事件监听)
  2. 分析加密函数调用链
  3. 提取关键加密参数(key/iv/salt等)
  4. 确定加密算法和模式
  5. 验证加密结果
  6. 编写对应解密/加密代码
  7. 集成到自动化工具中

通过以上方法,可以系统性地分析和逆向大多数前端JS加密逻辑。实际应用中需要根据具体情况灵活调整分析方法。

JS前端逆向分析实战教程 一、JS逆向基础概念 JS逆向是指通过分析JavaScript代码,理解其加密、验证等逻辑的过程。主要应用场景包括: 登录表单加密分析 API请求签名破解 数据加密/解密流程还原 二、JS代码定位方法 1. 元素审查定位法 打开浏览器开发者工具(F12) 选择目标元素(如登录按钮) 查看"事件监听器"选项卡 定位相关JS文件(如login.js) 2. 全局搜索法 打开开发者工具 使用Ctrl+Shift+F进行全局搜索 搜索关键词如: password Crypto encrypt/decrypt secret/key/iv等加密相关术语 3. Onclick属性定位法 检查HTML元素的onclick属性 若属性值为JS函数,则可能是加密入口 追踪该函数定义位置 三、实战案例1:登录表单AES加密分析 1. 加密流程分析 2. AES加密参数提取 通过调试发现: Key: code.substring(16) → f3991777154f4bd0 IV: code.substring(0,16) → ace43e65106a77f6 加密模式: CBC 填充方式: Pkcs7 3. Python实现AES加密 四、实战案例2:API请求签名分析 1. 签名生成流程 2. 签名生成关键点 固定参数: client: "fanyideskweb" product: "webfanyi" key: "fsdsogkndfokasodnaso" (通过调试发现) 动态参数: mysticTime: 当前时间戳 组合格式: client=${client}&mysticTime=${time}&product=${product}&key=${key} MD5哈希生成签名 3. Python实现请求签名 五、调试技巧 断点设置 : 在可疑函数调用处设置断点 在加密函数入口设置断点 在参数生成位置设置断点 变量监控 : 观察关键变量的值变化 追踪参数传递路径 调用堆栈分析 : 查看函数调用关系 逆向追踪加密流程 六、常见加密算法识别 AES加密特征 : 出现key/iv参数 有CBC/ECB等模式设置 有Pkcs7等填充方式 RSA加密特征 : 出现公钥/私钥 有setPublicKey等调用 使用长字符串密钥 MD5/SHA哈希特征 : createHash方法调用 digest('hex')输出 固定长度输出(32/64字符) 七、防御措施与注意事项 防御措施 : 代码混淆(如变量名混淆) 加密逻辑分散 动态密钥生成 反调试机制 注意事项 : 仅用于学习研究 遵守网站使用条款 避免高频请求 尊重版权和隐私 八、完整工作流程总结 定位加密入口点(全局搜索/事件监听) 分析加密函数调用链 提取关键加密参数(key/iv/salt等) 确定加密算法和模式 验证加密结果 编写对应解密/加密代码 集成到自动化工具中 通过以上方法,可以系统性地分析和逆向大多数前端JS加密逻辑。实际应用中需要根据具体情况灵活调整分析方法。