当前位置: 首页 > news >正文

JSRPC实战:前端加密逆向与Burp爆破联动的自动化解决方案

1. JSRPC技术原理与实战价值

前端加密逆向一直是安全测试中的难点,尤其是遇到动态加密场景时,传统的手工调试方法效率极低。JSRPC(JavaScript Remote Procedure Call)技术通过远程调用前端加密函数,完美解决了这个痛点。简单来说,它就像给你的浏览器装了个"遥控器",可以在不修改网页源码的情况下,直接调用页面中的加密函数。

我去年测试过一个电商网站,他们的登录接口采用了动态变化的RSA加密,每次刷新页面公钥都会改变。传统方法需要反复调试加密逻辑,而使用JSRPC后,只需要三步:定位加密函数、创建RPC实例、调用远程接口。实测下来,原本需要2小时的分析工作,用这个方法10分钟就能搞定。

这项技术的核心优势在于:

  • 实时性:直接调用页面当前加载的加密函数,自动适应动态变化
  • 无侵入:不需要修改网站原始代码,避免触发反调试机制
  • 可编程:所有操作都可以通过API调用,方便集成到自动化流程

2. 加密函数定位与本地覆盖

2.1 使用js_tools快速定位

定位加密函数是整个流程的第一步,也是最重要的一步。推荐使用Chrome开发者工具的Sources面板配合js_tools插件:

// 示例:搜索加密关键词 js_tools.search(/encrypt|password|key/i)

在实际项目中,我总结出几个高效定位的技巧:

  1. XHR断点法:在Network面板找到目标请求,右键设置XHR断点
  2. 堆栈追踪法:在Console执行console.trace()查看调用栈
  3. 特征搜索法:搜索常见加密库名称如crypto-js、forge等

2.2 本地覆盖技术详解

找到加密函数后,我们需要创建本地覆盖。以美团登录页为例:

  1. 在Sources面板找到目标js文件
  2. 右键选择Save for overrides
  3. 在本地修改文件中插入RPC代码:
// 示例:插入RPC调用代码 var demo = new Hlclient("ws://127.0.0.1:12080/ws?group=test"); demo.regAction("encrypt", function(resolve, param) { resolve(encrypt.encrypt(param)); });

这里有个坑要注意:某些网站会校验文件哈希值。遇到这种情况可以尝试Hook函数而不是替换整个文件:

// Hook示例 let oldEncrypt = window.encrypt.encrypt; window.encrypt.encrypt = function(param) { console.log("加密参数:", param); return oldEncrypt.apply(this, arguments); };

3. RPC实例创建与接口调用

3.1 搭建JSRPC服务端

推荐使用ws模块快速搭建服务端:

const WebSocket = require('ws'); const wss = new WebSocket.Server({ port: 12080 }); wss.on('connection', ws => { ws.on('message', message => { const { group, action, param } = JSON.parse(message); // 处理逻辑... ws.send(JSON.stringify({ data: "加密结果" })); }); });

3.2 多接口管理策略

当需要管理多个加密函数时,可以采用分组+命名的方式:

// 注册多个动作 demo.regAction("login_encrypt", param => loginEncrypt(param)); demo.regAction("pay_encrypt", param => payEncrypt(param)); // 调用时指定name参数 http://127.0.0.1:12080/go?group=test&name=login_encrypt&param=123

在实际项目中,我建议为每个加密类型创建独立的分组。比如:

  • login组:处理所有登录相关加密
  • payment组:处理支付相关加密
  • api组:处理通用接口签名

4. BurpSuite爆破实战技巧

4.1 加密字典预处理方案

对于固定加密算法,可以预先加密整个字典:

import requests def encrypt_dict(input_file, output_file): with open(input_file) as f: words = [line.strip() for line in f] results = [] for word in words: resp = requests.get(f"http://localhost:12080/go?group=test&action=encrypt¶m={word}") results.append(resp.json()['data']) with open(output_file, 'w') as f: f.write("\n".join(results))

4.2 动态加密实时处理方案

对于动态加密场景,需要使用Burp的AutoDecoder插件配合Flask中间件:

from flask import Flask, request import requests app = Flask(__name__) @app.route('/encode', methods=['POST']) def handle_encode(): data = request.form.get('dataBody') resp = requests.get(f"http://localhost:12080/go?group=dynamic&action=encrypt¶m={data}") return resp.json()['data']

配置Burp的AutoDecoder时需要注意:

  1. 设置Encoder URL为http://127.0.0.1:8888/encode
  2. 勾选"URL-encode these characters"选项
  3. 在"Headers to add"中添加Content-Type: application/x-www-form-urlencoded

5. 常见问题排查指南

在实际使用中,我遇到过几个典型问题:

问题1:WebSocket连接失败

  • 检查防火墙是否放行12080端口
  • 确认服务端代码正确启动
  • 浏览器控制台查看是否有CORS错误

问题2:加密结果不一致

  • 检查是否遗漏了随机数参数
  • 确认时间戳参数是否动态生成
  • 查看是否有环境检测代码干扰

问题3:Burp响应超时

  • 调整AutoDecoder的超时设置
  • 检查中间件是否处理了异常情况
  • 确认JSRPC服务端性能是否足够

对于动态密钥场景,建议在regAction中添加密钥获取逻辑:

demo.regAction("dynamic_encrypt", (resolve, param) => { const key = getCurrentKey(); // 实时获取最新密钥 resolve(encryptWithKey(param, key)); });

这套方案已经在多个金融级安全防护系统中验证通过,包括动态令牌、行为验证等复杂场景。关键在于理解每个环节的技术原理,遇到问题时可以快速定位到具体环节。建议先从简单的MD5加密开始练习,逐步过渡到更复杂的加密方案。

http://www.jsqmd.com/news/619612/

相关文章:

  • HC32F030无叶风扇FOC驱动方案代码深度解析
  • PyQt5应用打包进阶:Nuitka实战中如何优雅处理插件警告与外部数据文件(Windows平台)
  • 3个步骤解决老Mac无法升级新系统的困境:OpenCore Legacy Patcher完整指南
  • 哔咔漫画下载器终极指南:3步打造个人漫画图书馆的完整解决方案
  • 保姆级教程:Mindie服务化推理环境变量配置全解析(含OOM避坑指南)
  • RSA加密算法攻击:从数学原理到CTF实战攻击(CTF实战概念篇)
  • 新手友好!TensorFlow 2.15环境搭建5步法,附问题排查
  • Pretext:值得关注的文本排版引擎乓
  • 告别黑盒:用QEMU+GDB单步调试Linux内核,亲手揪出第一个Bug
  • AI原生软件容灾设计避坑指南(2024最新Gartner认证框架实操版)
  • 低代码遇上Agent:平民开发者的超能力时刻
  • Jimeng AI Studio(Z-Image Edition)提示词工程:创作高质量AI图像的关键
  • rz /sz 命令详解(Linux 本地↔服务器文件传输)
  • C++之类和对象
  • AI 短剧系统私有化部署,搭建企业专属 AI 制片厂
  • 锂电池建模到底怎么玩?今天咱们来拆解二阶RC模型(也就是常说的二阶戴维南模型)。这个模型就像给电池拍X光片,把复杂的电化学反应翻译成电工能看懂的电路元件
  • Ragent day-03 RAG
  • AI建站工具选型指南:五维评估法与不同模式对比
  • 保姆级教程:手把手教你查看FortiGate防火墙的‘固件和通用更新’服务状态
  • 基于OneNet的智能家居安防系统
  • Openlaw语音控制之语音命令语法设计最佳实践
  • 免杀手法 ---> 重写R3API 一些思路给你说说看
  • 【Agent-阿程】AI先锋杯·14天征文挑战第14期-第3天-大模型应用开发实战
  • 张祥前统一场论7.0(11-14章)
  • 零基础入门大模型:20个核心概念解析(收藏版)
  • 嵌入式学习——Linux驱动(1)
  • FPGA综合工具Vivado/Quartus报‘Timing Loop’别慌:手把手教你定位并拆解这个Verilog‘死循环’
  • OpenClaw Skills 开发实战笔记
  • Qwen3-14B私有部署镜像YOLOv11目标检测结果报告智能生成
  • AI原生分支策略失效预警:Feature Branch vs. Model-First Trunk-Based Development对比实测