使用JSRPC实现前端加密破解,自动化加密
字数 1122 2025-08-19 12:41:20

JSRPC实现前端加密破解与自动化加密教学文档

一、前言

前端加密是网站安全防护的重要手段,传统破解方法需要逆向JS代码、提取加密函数并补全运行环境。JSRPC(JavaScript Remote Procedure Call)提供了一种更高效的解决方案,通过远程调用浏览器中的JS加密函数,无需深入分析加密逻辑。

二、JSRPC核心原理

  1. 远程调用协议:本地代码通过WebSocket与浏览器建立连接
  2. 函数调用机制:直接调用浏览器中已加载的加密函数
  3. 环境优势:利用浏览器完整的JS执行环境,避免补环境问题

三、实现流程详解

1. 准备工作

  • 识别加密参数(以人人网为例):
    • appKey:固定值
    • password:MD5加密
    • callId:时间戳
    • sig:需要破解的主要加密参数

2. 服务端实现

基础版本服务端代码

import sys
import asyncio
import websockets

async def receive_message(websocket):
    while True:
        send_text = input("请输入要加密的字符串:")
        if send_text == "exit":
            print("退出!")
            await websocket.send(send_text)
            await websocket.close()
            sys.exit()
        else:
            await websocket.send(send_text)
            response_text = await websocket.recv()
            print("加密结果:", response_text)

start_server = websockets.serve(receive_message, "127.0.0.1", 8088)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

改进版服务端代码(支持多连接)

import asyncio
import websockets

connected = set()

async def server(websocket):
    connected.add(websocket)
    try:
        async for message in websocket:
            for conn in connected:
                if conn != websocket:
                    await conn.send(message)
    finally:
        connected.remove(websocket)

start_server = websockets.serve(server, "127.0.0.1", 8088)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

3. 浏览器端JS改写

  1. 打开Chrome开发者工具(F12)
  2. 选择Sources → Overrides → Select folder for Overrides
  3. 创建并选择用于存放改写JS的文件夹
  4. 找到目标JS文件,右键选择Override content
  5. 添加WebSocket客户端代码:
(function () {
    var ws = new WebSocket("ws://127.0.0.1:8088")
    var secretKey = "bcceb522717c2c49f895b561fa913d10" // 关键密钥
    
    ws.onmessage = function(evt) {
        console.log("收到消息:" + evt.data);
        var dataObject = JSON.parse(evt.data);
        if (evt.data == "exit"){
            ws.close();
        }else{
            ws.send(ze.getSign(dataObject,secretKey)); // 调用加密函数
        }
    }
})();

4. 自动化加密接口实现

import asyncio
import json
import websockets
from flask import Flask,request

app = Flask(__name__)
loop = asyncio.get_event_loop()

async def encode(message):
    async with websockets.connect("ws://127.0.0.1:8088") as websocket:
        await websocket.send(message)
        return await websocket.recv()

def get_encrypt(message):
    return str(loop.run_until_complete(encode(message)))

@app.route('/encrypt', methods=['POST'])
def encode_str():
    if request.is_json:
        data_dict = {}
        data = request.get_json()
        data_dict['user'] = data.get('user')
        data_dict['password'] = data.get('password')
        data_dict['appKey'] = data.get('appKey')
        data_dict['sessionKey'] = data.get('sessionKey')
        data_dict['callId'] = data.get('callId')
        dataobject = json.dumps(data_dict)
        return get_encrypt(dataobject)

if __name__ == '__main__':
    app.run(port=5001)

四、实际应用流程

  1. 启动WebSocket服务端
  2. 启动Flask加密接口服务
  3. 在浏览器中加载目标网站并覆盖JS文件
  4. 通过Burp Suite构造请求:
    • 将加密参数提交到本地加密接口(http://127.0.0.1:5001/encrypt)
    • 接口返回加密结果
  5. 使用加密结果完成请求

五、相关工具推荐

  1. Sekiro RPC框架

    • 多语言支持
    • 分布式架构
    • 网络拓扑无关
    • GitHub: https://github.com/yint-tech/sekiro-open
  2. JsRPC项目

    • 专门用于JS远程调用
    • GitHub: https://github.com/jxhczhl/JsRpc

六、关键注意事项

  1. 密钥处理:确保浏览器端JS中正确设置了secretKey等关键参数
  2. 函数调用:准确识别并调用目标加密函数(如示例中的ze.getSign)
  3. WebSocket连接:保持服务端和客户端的端口一致
  4. 跨域问题:所有服务建议在localhost环境下运行以避免跨域限制
  5. 加密参数结构:确保传递给加密函数的数据结构与原网站一致

七、扩展应用

  1. 批量自动化测试:结合爬虫实现大规模数据加密
  2. 动态参数处理:处理时间戳等动态变化的参数
  3. 多站点适配:通过配置不同的加密函数和参数适应不同网站

通过以上方法,可以高效地破解前端加密而无需深入分析加密算法,显著提高渗透测试效率。

JSRPC实现前端加密破解与自动化加密教学文档 一、前言 前端加密是网站安全防护的重要手段,传统破解方法需要逆向JS代码、提取加密函数并补全运行环境。JSRPC(JavaScript Remote Procedure Call)提供了一种更高效的解决方案,通过远程调用浏览器中的JS加密函数,无需深入分析加密逻辑。 二、JSRPC核心原理 远程调用协议 :本地代码通过WebSocket与浏览器建立连接 函数调用机制 :直接调用浏览器中已加载的加密函数 环境优势 :利用浏览器完整的JS执行环境,避免补环境问题 三、实现流程详解 1. 准备工作 识别加密参数(以人人网为例): appKey:固定值 password:MD5加密 callId:时间戳 sig:需要破解的主要加密参数 2. 服务端实现 基础版本服务端代码 改进版服务端代码(支持多连接) 3. 浏览器端JS改写 打开Chrome开发者工具(F12) 选择Sources → Overrides → Select folder for Overrides 创建并选择用于存放改写JS的文件夹 找到目标JS文件,右键选择Override content 添加WebSocket客户端代码: 4. 自动化加密接口实现 四、实际应用流程 启动WebSocket服务端 启动Flask加密接口服务 在浏览器中加载目标网站并覆盖JS文件 通过Burp Suite构造请求: 将加密参数提交到本地加密接口(http://127.0.0.1:5001/encrypt) 接口返回加密结果 使用加密结果完成请求 五、相关工具推荐 Sekiro RPC框架 多语言支持 分布式架构 网络拓扑无关 GitHub: https://github.com/yint-tech/sekiro-open JsRPC项目 专门用于JS远程调用 GitHub: https://github.com/jxhczhl/JsRpc 六、关键注意事项 密钥处理 :确保浏览器端JS中正确设置了secretKey等关键参数 函数调用 :准确识别并调用目标加密函数(如示例中的ze.getSign) WebSocket连接 :保持服务端和客户端的端口一致 跨域问题 :所有服务建议在localhost环境下运行以避免跨域限制 加密参数结构 :确保传递给加密函数的数据结构与原网站一致 七、扩展应用 批量自动化测试:结合爬虫实现大规模数据加密 动态参数处理:处理时间戳等动态变化的参数 多站点适配:通过配置不同的加密函数和参数适应不同网站 通过以上方法,可以高效地破解前端加密而无需深入分析加密算法,显著提高渗透测试效率。