JsRpc+Yakit热加载实现明文编辑加密发包
字数 1146 2025-09-01 11:26:11

JsRpc + Yakit 热加载实现明文编辑加密发包技术文档

一、技术背景

在渗透测试过程中,前端请求数据加密已成为常见的安全防护措施,这给安全测试带来了以下挑战:

  • 需要逆向JavaScript代码分析加密逻辑
  • 传统方法需搭建复杂运行环境
  • 加密算法提取困难
  • 动态调试效率低下

JsRpc + Yakit热加载技术组合解决了这些问题,实现了:

  • 明文编辑加密请求
  • 实时修改并重新加密
  • 无需完整逆向加密算法
  • 高效动态调试

二、核心组件

1. JsRpc

  • 基于WebSocket的JavaScript远程调用框架
  • 核心功能:
    • 浏览器环境与外部工具通信
    • 拦截和修改加密函数
    • 提供加密/解密服务接口

2. Yakit

  • 集成化安全测试平台
  • 热加载特性:
    • 实时修改请求内容
    • 自动重新加密
    • 可视化编辑界面

三、技术实现步骤

1. 环境准备

# 安装Yakit
wget https://yakit.xxx.com/latest/yakit -O /usr/local/bin/yakit
chmod +x /usr/local/bin/yakit

# 启动Yakit
yakit start

2. JsRpc注入

// 示例注入代码
(function() {
    const ws = new WebSocket("ws://localhost:8080/jsrpc");
    ws.onmessage = function(event) {
        const data = JSON.parse(event.data);
        if(data.method === "encrypt") {
            const result = window.targetEncryptFunction(data.params);
            ws.send(JSON.stringify({id: data.id, result: result}));
        }
    };
    
    // 替换原加密函数
    window.originalEncrypt = window.targetEncryptFunction;
    window.targetEncryptFunction = function(params) {
        return window.originalEncrypt(params);
    };
})();

3. 热加载配置流程

  1. 在Yakit中创建新项目
  2. 配置WebSocket连接地址(ws://localhost:8080/jsrpc)
  3. 设置拦截规则:
    • 目标URL匹配模式
    • 加密函数名称
    • 请求/响应处理钩子

4. 请求拦截与修改

# Yakit热加载处理脚本示例
def on_request(request):
    if request.path == "/api/login":
        # 获取明文数据
        plain_text = jsrpc_call("decrypt", request.body)
        
        # 修改明文
        modified = plain_text.replace("test", "admin")
        
        # 重新加密
        request.body = jsrpc_call("encrypt", modified)
    
    return request

四、关键技术点

1. 加密函数定位

  • 方法:

    • 搜索常见加密函数名(crypto, encrypt, AES等)
    • XHR/fetch请求断点
    • 调用栈分析
  • 特征:

    // 典型加密函数结构
    function encryptData(data) {
        const key = "xxxxxxxx";
        const iv = "xxxxxxxx";
        return CryptoJS.AES.encrypt(JSON.stringify(data), key, {iv: iv}).toString();
    }
    

2. WebSocket通信协议

  • 请求格式:

    {
      "id": "uuid",
      "method": "encrypt|decrypt",
      "params": "data_to_process"
    }
    
  • 响应格式:

    {
      "id": "uuid",
      "result": "processed_data"
    }
    

3. 热加载处理流程

  1. 拦截加密请求
  2. 通过WebSocket发送到外部工具
  3. 在Yakit中编辑明文
  4. 调用JsRpc重新加密
  5. 发送修改后的请求

五、实战案例

案例:登录接口加密绕过

  1. 发现登录接口/api/v1/login使用AES加密
  2. 注入JsRpc脚本拦截加密函数
  3. 捕获加密请求:
    {"username":"user1","password":"123456"}
    
  4. 修改为:
    {"username":"admin","password":"admin123"}
    
  5. 自动重新加密并发送

调试技巧

  • 使用console.log输出中间值
  • 设置断点检查加密前后数据
  • 保存不同版本的修改记录

六、常见问题解决

  1. 连接失败

    • 检查WebSocket地址是否正确
    • 验证CORS策略
    • 确保注入脚本执行顺序正确
  2. 加密函数不生效

    • 确认函数名称和上下文正确
    • 检查原型链调用
    • 验证函数是否被二次封装
  3. 性能问题

    • 优化WebSocket消息大小
    • 减少不必要的拦截
    • 使用批量处理模式

七、高级应用

1. 自动化测试集成

import yakit

client = yakit.connect()
test_cases = [
    {"input": "test1", "expected": "..."},
    {"input": "test2", "expected": "..."}
]

for case in test_cases:
    encrypted = client.jsrpc("encrypt", case["input"])
    response = client.request("/api/test", body=encrypted)
    decrypted = client.jsrpc("decrypt", response.body)
    assert decrypted == case["expected"]

2. 多加密算法支持

// 多算法路由处理
ws.onmessage = function(event) {
    const data = JSON.parse(event.data);
    let result;
    
    switch(data.method) {
        case "aes_encrypt":
            result = aesEncrypt(data.params);
            break;
        case "rsa_encrypt":
            result = rsaEncrypt(data.params);
            break;
        // ...
    }
    
    ws.send(JSON.stringify({id: data.id, result: result}));
};

八、安全注意事项

  1. 仅用于授权测试
  2. 测试完成后移除注入脚本
  3. 加密通信使用wss协议
  4. 敏感信息处理需谨慎

九、总结

JsRpc + Yakit热加载技术提供了一种高效处理前端加密请求的方案,相比传统方法具有以下优势:

  • 无需完整逆向加密算法
  • 实时交互式调试
  • 支持复杂加密场景
  • 集成化工作流

该技术特别适用于:

  • 登录接口测试
  • 敏感操作验证
  • 加密协议分析
  • 自动化安全测试
JsRpc + Yakit 热加载实现明文编辑加密发包技术文档 一、技术背景 在渗透测试过程中,前端请求数据加密已成为常见的安全防护措施,这给安全测试带来了以下挑战: 需要逆向JavaScript代码分析加密逻辑 传统方法需搭建复杂运行环境 加密算法提取困难 动态调试效率低下 JsRpc + Yakit热加载技术组合解决了这些问题,实现了: 明文编辑加密请求 实时修改并重新加密 无需完整逆向加密算法 高效动态调试 二、核心组件 1. JsRpc 基于WebSocket的JavaScript远程调用框架 核心功能: 浏览器环境与外部工具通信 拦截和修改加密函数 提供加密/解密服务接口 2. Yakit 集成化安全测试平台 热加载特性: 实时修改请求内容 自动重新加密 可视化编辑界面 三、技术实现步骤 1. 环境准备 2. JsRpc注入 3. 热加载配置流程 在Yakit中创建新项目 配置WebSocket连接地址(ws://localhost:8080/jsrpc) 设置拦截规则: 目标URL匹配模式 加密函数名称 请求/响应处理钩子 4. 请求拦截与修改 四、关键技术点 1. 加密函数定位 方法: 搜索常见加密函数名(crypto, encrypt, AES等) XHR/fetch请求断点 调用栈分析 特征: 2. WebSocket通信协议 请求格式: 响应格式: 3. 热加载处理流程 拦截加密请求 通过WebSocket发送到外部工具 在Yakit中编辑明文 调用JsRpc重新加密 发送修改后的请求 五、实战案例 案例:登录接口加密绕过 发现登录接口 /api/v1/login 使用AES加密 注入JsRpc脚本拦截加密函数 捕获加密请求: 修改为: 自动重新加密并发送 调试技巧 使用 console.log 输出中间值 设置断点检查加密前后数据 保存不同版本的修改记录 六、常见问题解决 连接失败 检查WebSocket地址是否正确 验证CORS策略 确保注入脚本执行顺序正确 加密函数不生效 确认函数名称和上下文正确 检查原型链调用 验证函数是否被二次封装 性能问题 优化WebSocket消息大小 减少不必要的拦截 使用批量处理模式 七、高级应用 1. 自动化测试集成 2. 多加密算法支持 八、安全注意事项 仅用于授权测试 测试完成后移除注入脚本 加密通信使用wss协议 敏感信息处理需谨慎 九、总结 JsRpc + Yakit热加载技术提供了一种高效处理前端加密请求的方案,相比传统方法具有以下优势: 无需完整逆向加密算法 实时交互式调试 支持复杂加密场景 集成化工作流 该技术特别适用于: 登录接口测试 敏感操作验证 加密协议分析 自动化安全测试