如何进行JS逆向某验滑动加密分析

发布时间:2021-12-14 11:14:27 作者:柒染
来源:亿速云 阅读:222
# 如何进行JS逆向某验滑动加密分析

## 前言

在Web安全与爬虫开发领域,破解验证码系统是常见的需求。某验(Geetest)作为广泛使用的验证码服务提供商,其滑动验证机制因动态加密特性成为重点研究对象。本文将深入剖析某验滑动验证码的JS加密逻辑,提供一套完整的逆向分析方法。

---

## 一、环境准备与工具配置

### 1.1 基础工具清单
- **浏览器开发者工具**:Chrome DevTools(推荐)
- **抓包工具**:Charles/Fiddler/Wireshark
- **调试工具**:
  - Fiddler AutoResponder(请求替换)
  - Chrome插件:Requestly
- **反混淆工具**:
  - AST解析:Babel/Parser
  - 在线工具:http://jsnice.org/

### 1.2 关键浏览器设置
```javascript
// 禁用无限debugger
Function.prototype.constructor_ = Function.prototype.constructor;
Function.prototype.constructor = function(x) {
    if(x == "debugger") { return function(){}; }
    return Function.prototype.constructor_(x);
};

二、某验滑动验证流程拆解

2.1 核心交互阶段

  1. 初始化阶段

    • 加载gt.js/fullpage.js等核心JS文件
    • 生成gt/challenge关键参数
  2. 滑动阶段

    • 生成轨迹数据(track
    • 加密参数计算(w参数)
  3. 验证阶段

    • 提交加密数据到/validate接口
    • 服务端二次校验

2.2 关键网络请求

GET /api/v1/get?t={timestamp}  # 获取初始参数
POST /api/v1/validate          # 提交验证数据

三、加密参数逆向分析

3.1 定位加密入口

通过XHR断点定位核心加密逻辑: 1. 在Chrome DevTools中打开XHR/fetch Breakpoints 2. 添加URL包含validate的断点 3. 滑动验证触发断点后查看调用栈

3.2 w参数生成逻辑

典型加密流程示例:

function get_w() {
    var e = {
        // 包含滑动轨迹、时间戳等数据
        track: [...],
        challenge: "7a20b2d3f...",
        userresponse: get_userresponse(),
        passtime: 2356,
        imgload: 1203,
        aa: get_aa_value(),
        ep: get_ep_data()
    };
    return AES_encrypt(JSON.stringify(e));
}

3.3 核心加密函数定位技巧

  1. 特征搜索法

    • 搜索userresponse/passtime等关键词
    • 查找AES/RSA等加密算法特征
  2. 调用栈回溯法

    console.trace();  // 在可疑函数内插入
    
  3. Hook大法示例

    // Hook JSON.stringify
    var _stringify = JSON.stringify;
    JSON.stringify = function(params) {
       if(params.track) console.log("Track data:", params);
       return _stringify(params);
    };
    

四、反混淆实战技巧

4.1 常见混淆类型处理

混淆类型 解决方案
变量名十六进制化 AST重命名
控制流平坦化 Babel插件反平坦化
字符串加密 查找解密函数并提取

4.2 自动化反混淆流程

  1. 使用babel-parser生成AST
  2. 应用反混淆插件:
    
    const { transformFromAst } = require('babel-core');
    transformFromAst(ast, code, {
       plugins: [
           "deobfuscate-var-names",
           "control-flow-deobfuscation"
       ]
    });
    

4.3 某验特有混淆破解

某验常见采用: - 动态函数名拼接 - try-catch干扰调试 - 环境检测(如window.outerWidth

对抗方案:

// 绕过环境检测
Object.defineProperty(window, "outerWidth", {
    get: () => 1920
});

五、轨迹加密算法还原

5.1 原始轨迹数据结构

{
    "x": [0, 3, 5, ..., 280],
    "y": [12, 15, 13, ..., 45],
    "t": [0, 120, 156, ..., 2356],
    "type": "down/move/up"
}

5.2 加密处理流程

  1. 坐标标准化

    function normalize(track) {
       return track.map(p => [
           p.x / 300 * 100, 
           p.y / 150 * 100
       ]);
    }
    
  2. 特征值计算

    • 加速度计算
    • 轨迹曲率分析
    • 停留点检测
  3. AES加密参数

    function aes_encrypt(data, key) {
       key = CryptoJS.MD5(key);
       return CryptoJS.AES.encrypt(data, key, {
           mode: CryptoJS.mode.CBC,
           padding: CryptoJS.pad.Pkcs7
       }).toString();
    }
    

六、完整验证流程模拟

6.1 Python实现示例

import requests
from Crypto.Cipher import AES

def get_slide_params():
    # 1. 获取初始参数
    res = requests.get("https://www.example.com/api/v1/get")
    data = res.json()
    
    # 2. 生成加密w参数
    w = generate_w_param(
        challenge=data["challenge"],
        track=generate_track()
    )
    
    # 3. 提交验证
    validate_res = requests.post(
        "https://www.example.com/api/v1/validate",
        data={"w": w}
    )
    return validate_res.json()

def generate_w_param(**kwargs):
    # 实现加密逻辑...
    pass

6.2 关键注意事项

  1. 时间戳必须与前端同步(误差<500ms)
  2. 滑动轨迹需包含人类特征:
    • 初始加速
    • 中间微调
    • 结束减速
  3. 注意challenge参数的时效性(通常3分钟)

七、进阶对抗方案

7.1 某验的动态防御机制

7.2 可持续维护策略

  1. 自动化监控

    • 设置JS文件变更监控
    • 关键函数hash校验
  2. 模块化设计

    class GeeTestCracker:
       def __init__(self, version="3.0"):
           self.load_schema(version)
    
    
       def load_schema(self, version):
           # 加载对应版本的解密方案
           pass
    
  3. 云端解密方案

    • 将核心JS代码放到Docker容器执行
    • 通过RPC调用获取加密结果

结语

JS逆向分析是持续对抗的过程,某验滑动验证的加密方案也在不断升级。建议开发者: 1. 掌握基础加密算法原理 2. 建立完善的逆向分析流程 3. 保持对验证码服务商更新的关注

重要声明:本文仅用于安全研究学习,请勿用于非法用途。 “`

注:实际文章可根据具体分析目标调整: 1. 补充具体某验版本号(如v3/v4) 2. 增加真实抓包截图示例 3. 插入AST解析过程示意图 4. 添加性能优化建议(如缓存解密key)

推荐阅读:
  1. Python爬虫进阶 | 某监测平台数据加密逆向分析
  2. 某网络监视器完整逆向

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

js

上一篇:Python如何绘制奥运五环图

下一篇:Spark2.x中如何实现SparkStreaming消费Kafka实例

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》