Skip to content

Commit 4fb95aa

Browse files
author
lijun05
committed
first commit
0 parents  commit 4fb95aa

File tree

15 files changed

+1836
-0
lines changed

15 files changed

+1836
-0
lines changed

.gitignore

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
# Java相关
2+
*.class
3+
*.jar
4+
*.war
5+
*.ear
6+
*.zip
7+
*.tar.gz
8+
*.rar
9+
hs_err_pid*
10+
11+
# Gradle相关
12+
.gradle/
13+
build/
14+
!gradle/wrapper/gradle-wrapper.jar
15+
*.log
16+
*.gz
17+
bin/
18+
.settings/
19+
.project
20+
.classpath
21+
22+
# Node.js相关
23+
node_modules/
24+
npm-debug.log
25+
yarn-debug.log*
26+
yarn-error.log*
27+
package-lock.json
28+
29+
# WebStorm / IntelliJ IDEA 相关
30+
.idea/
31+
*.iml
32+
*.iws
33+
*.ipr
34+
*.ids
35+
*.orig
36+
out/
37+
38+
# Eclipse 相关
39+
.classpath
40+
.project
41+
.settings/
42+
43+
# VS Code 相关
44+
.vscode/
45+
*.code-workspace
46+
47+
# 日志文件
48+
logs/
49+
*.log
50+
npm-debug.log*
51+
52+
# 运行时生成的数据
53+
params-data.json
54+
*.json.bak
55+
56+
# Mac OS 相关
57+
.DS_Store
58+
.AppleDouble
59+
.LSOverride
60+
Icon
61+
._*
62+
.Spotlight-V100
63+
.Trashes
64+
65+
# Windows 相关
66+
Thumbs.db
67+
ehthumbs.db
68+
Desktop.ini
69+
$RECYCLE.BIN/
70+
*.cab
71+
*.msi
72+
*.msm
73+
*.msp
74+
75+
# 临时文件
76+
tmp/
77+
temp/
78+
*.tmp
79+
*.bak
80+
*.swp
81+
82+
# 项目特定
83+
# 添加此项目特有的需要忽略的文件
84+
playwright-browser-data/
85+
playwright/.cache/
86+
burp-plugin/build/libs/
87+
server/params-data.json

README.md

Lines changed: 302 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,302 @@
1+
# 瑞数VMP bypass工具 - 综合文档
2+
3+
> 本项目是完全利用cursor编写的瑞数VMP bypass工具,过程文档目录中是在编码过程中我自己写的一些需求和cursor自己生成的总结文档。
4+
5+
## 项目概述
6+
7+
该工具用于捕获和替换HTTP请求参数,特别针对路径与特定参数的映射关系,主要应用于Burp Suite的请求重放场景。工具可以自动捕获关键参数(如自定义参数和Cookie),并在后续请求中自动替换这些参数,大大提高测试效率。
8+
9+
最新版本增加了多线程参数预获取和缓存功能,解决了每次请求都需要调用Playwright导致的延迟问题。
10+
11+
## 需求背景
12+
13+
### 基本需求
14+
15+
这个项目旨在解决以下问题:
16+
17+
1. 当用户在burpsuite中使用repeater或intruder重放数据包时,有些特定参数(如LCXcLVWn和Cookie)需要实时捕获
18+
2. 这些参数通常在浏览器环境中动态生成,一旦使用就会失效
19+
3. 手动获取这些参数非常繁琐,影响测试效率
20+
21+
### 进阶需求
22+
23+
在基本功能实现后,我们发现了一些性能问题:
24+
25+
1. Burp Suite插件调用Playwright获取参数和cookie的时候需要一定的时间,导致请求存在明显延迟
26+
2. 需要在第一次执行请求时就启动多个线程获取多组未使用的参数,然后缓存起来
27+
3. 之后的请求可以直接使用缓存的参数,使用后标记为已使用并删除
28+
29+
## 实际应用举例
30+
31+
以下是一个典型的请求示例:
32+
33+
```
34+
POST http://xxx:7501/mobileAppServer/100/110?LCXcLVWn=0qvpJZalqWJ_pyGIwbrcmbA6qW8eC6Gyo3mw.ju8JN3eHCLo5N2AfEwwoXGKrFy4Rkk4g4XMq9kk64X.INSQMq0jXihtiuWYCNWf0cu6qaKBYRDCXJ4I6RLPe4EBTYOrJyQeAXj9p5t3 HTTP/1.1
35+
Host: xxx:7501
36+
Content-Length: 24
37+
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36
38+
Accept: application/json, text/plain, */*
39+
DNT: 1
40+
Content-Type: application/x-www-form-urlencoded
41+
Origin: http://xxx:7501
42+
Referer: http://xxx:7501/mobileApp/
43+
Accept-Encoding: gzip, deflate, br
44+
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
45+
Cookie: RrWXLfYMshGCS=60lOjnFBW5QTn5PV8dgLRvGu2bBjM_pqRC5PmtmaE17CgvoclbRqq7eNM_dhXa.ghME3vOEwVjwuFabAegSxHDxA; RrWXLfYMshGCT=050jJCeyBXw9PTJGHuZmERGfkL0waOB46EE3B85egv56sO3ZJddNE7DLBpadpO5XHjUXpLVC0R.w.6Yav6Q7S4O0SGZWEh9ysiKUvnPpPPewjWIoNp1oTOvW0K_bbXzGrLILFF.YyPHSZ1gTYiObqK.eL6nD.EfPYELjK24luAph_9SiKYNViwRKI1DoFu.5ETWw9hTYiofSdEX5vTzMci.wt4EyUWEVh17c1s9ID8dVaS6_HIpg64WCmeoTErzPqXklglTfsqumBNxw2VXZak0Tdl9cyO7L6VVW72sUIYKHhN_8AnzSnWBxGvXfdmrgkWSql3p_h33IujblEshhgp4xZEhXhrFNUDg4X19_uyq1VyeFaL6PPQtkCZUA_yTHRkyYa_HKTvIfoFBCqpC7wAhyfAHs8IKAPZDtCQT9zL4L
46+
sec-ch-ua-platform: "Windows"
47+
sec-ch-ua: "Not/A)Brand";v="8", "Chromium";v="118", "Google Chrome";v="118"
48+
sec-ch-ua-mobile: ?0
49+
Connection: keep-alive
50+
51+
showLoading=false&token=
52+
```
53+
54+
这个请求中的LCXcLVWn参数和Cookie是不能直接使用的,需要在浏览器中模拟此请求后自动生成。而且,生成后不能发送数据包,否则这些参数就会失效。我们的工具就是要自动提取在浏览器中生成的这些参数,并在后续请求中使用。
55+
56+
最新版本支持自定义参数名称,不再局限于"LCXcLVWn",可以根据具体应用场景进行配置。
57+
58+
## 系统组件
59+
60+
系统由三个主要组件组成:
61+
62+
1. **Burp Suite插件** (Java)
63+
- 实现了Burp Suite的扩展接口
64+
- 提供用户界面进行配置
65+
- 拦截和修改HTTP请求
66+
- 与Playwright脚本交互
67+
- 管理参数缓存池
68+
69+
2. **Playwright脚本** (Node.js)
70+
- 模拟HTTP请求
71+
- 拦截请求并提取参数
72+
- 通过WebSocket发送参数到服务器
73+
74+
3. **WebSocket服务器** (Node.js)
75+
- 接收参数并保存到JSON文件
76+
- 提供数据持久化存储
77+
78+
## 工作流程
79+
80+
### 基本流程
81+
82+
1. 当用户在Burp Suite中使用Repeater或Intruder重放数据包时,插件提取数据包内容并通过Playwright模拟
83+
2. Playwright拦截此请求不发送,提取相关参数:
84+
- GET请求:提取路径和Cookie参数
85+
- POST请求:提取路径、自定义参数(默认为LCXcLVWn)和Cookie参数
86+
3. 捕获的参数通过WebSocket发送到服务器
87+
4. WebSocket服务器将数据保存到JSON文件
88+
5. Burp Suite插件加载此JSON文件,并在发出请求时自动替换相应参数
89+
90+
### 优化后的流程(多线程预获取)
91+
92+
1. 首次执行请求时,除了获取当前所需的参数外,还会启动多个线程同时获取多组未使用的参数
93+
2. 预获取的参数被缓存到内存中,以供后续使用
94+
3. 后续请求时,直接从缓存中获取参数,无需等待Playwright
95+
4. 当缓存中的参数用完后,自动启动新的预获取任务
96+
97+
## 新功能说明:多线程参数预获取与缓存
98+
99+
### 主要改进
100+
101+
1. **多线程参数预获取**
102+
- 首次执行请求时,会启动多个线程同时获取多组未使用的参数
103+
- 默认启动3个线程,可在界面中自定义线程数
104+
- 预获取的参数被缓存到内存中,以供后续使用
105+
106+
2. **参数缓存管理**
107+
- 按请求路径分类管理缓存的参数
108+
- 使用一组参数后自动从缓存中删除
109+
- 当缓存中的参数用完后,自动启动新的预获取任务
110+
111+
3. **性能优化**
112+
- 避免每次请求都启动Playwright,大大减少操作延迟
113+
- 实现"用一组、补一组"的机制,保证参数供应
114+
- 线程池管理,避免创建过多线程
115+
116+
4. **自定义参数名称**
117+
- 不再局限于固定的"LCXcLVWn"参数名
118+
- 用户可以自定义需要捕获和替换的参数名称
119+
- 支持任意名称的参数捕获和替换
120+
121+
### 配置选项
122+
123+
1. **预获取线程数**
124+
- 控制同时启动的预获取任务数量
125+
- 默认值:3
126+
- 建议值:2-5(根据系统性能调整)
127+
128+
2. **自定义参数名称**
129+
- 设置需要捕获和替换的自定义参数名称
130+
- 默认值:"LCXcLVWn"
131+
- 可根据目标应用调整为任意参数名
132+
133+
3. **清除缓存**
134+
- 提供"清除参数缓存"按钮,可手动清空所有缓存的参数
135+
- 当需要重新获取全新参数时使用
136+
137+
### 使用方法
138+
139+
1. **激活插件**
140+
- 点击"激活插件"按钮,启动插件并初始化线程池
141+
- 可以根据需要调整"预获取线程数"和"自定义参数名称"
142+
143+
2. **首次请求**
144+
- 第一次在Repeater或Intruder中发送请求时,插件会实时获取参数
145+
- 同时会启动多个线程预获取更多参数用于后续请求
146+
147+
3. **后续请求**
148+
- 后续请求会直接使用缓存中的参数,无需等待Playwright
149+
- 缓存中的参数用完后,会自动获取新的参数
150+
151+
### 日志说明
152+
153+
插件日志中增加了以下相关信息:
154+
155+
- `线程池已初始化,线程数: X` - 线程池创建完成
156+
- `从缓存获取参数,路径: XXX,剩余: X` - 成功从缓存获取参数
157+
- `缓存中没有路径 'XXX' 的参数,启动实时获取` - 缓存未命中
158+
- `计划预获取 X 组参数,路径: XXX` - 开始预获取参数
159+
- `启动预获取任务 #X,路径: XXX` - 预获取任务开始
160+
- `预获取任务 #X 完成,已添加到缓存,当前缓存大小: X` - 预获取任务完成
161+
- `参数缓存已清除` - 手动清除缓存操作完成
162+
163+
## 项目结构
164+
165+
```
166+
.
167+
├── README.md # 项目说明
168+
├── README_新功能.md # 新功能说明
169+
├── INSTALL.md # 安装和使用指南
170+
├── SUMMARY.md # 项目总结
171+
├── burp-plugin/ # Burp Suite插件代码
172+
│ ├── build.gradle # Gradle构建文件
173+
│ └── src/ # 源代码目录
174+
│ └── main/java/com/http/paramcapture/
175+
│ └── BurpExtender.java # 插件主类
176+
├── playwright-script/ # Playwright脚本代码
177+
│ ├── index.js # 脚本主文件
178+
│ └── package.json # Node.js依赖配置
179+
└── server/ # WebSocket服务器代码
180+
├── server.js # 服务器主文件
181+
└── package.json # Node.js依赖配置
182+
```
183+
184+
## 安装步骤
185+
186+
### 系统要求
187+
188+
- Burp Suite Professional
189+
- Node.js 14+
190+
- Java JDK 1.8+
191+
- Gradle(用于构建Burp插件)
192+
193+
### 1. 安装WebSocket服务器
194+
195+
```bash
196+
cd server
197+
npm install
198+
```
199+
200+
### 2. 安装Playwright脚本
201+
202+
```bash
203+
cd playwright-script
204+
npm install
205+
# 安装Playwright浏览器
206+
npx playwright install chromium
207+
```
208+
209+
### 3. 构建Burp Suite插件
210+
211+
```bash
212+
cd burp-plugin
213+
gradle build
214+
```
215+
216+
构建完成后,JAR文件将位于 `burp-plugin/build/libs/` 目录下。
217+
218+
## 使用说明
219+
220+
### 1. 启动WebSocket服务器
221+
222+
```bash
223+
cd server
224+
npm start
225+
```
226+
227+
服务器将在端口8081上启动WebSocket服务。
228+
229+
### 2. 在Burp Suite中加载插件
230+
231+
1. 打开Burp Suite Professional
232+
2. 导航到 `Extender` -> `Add`
233+
3. 选择构建好的JAR文件
234+
4. 点击 `Next` 直到插件加载完成
235+
236+
### 3. 配置插件
237+
238+
1. 在Burp Suite中打开 `瑞数VMP bypass` 选项卡
239+
2. 设置Node.js路径(默认为 `/usr/local/bin/node`
240+
3. 设置Playwright脚本路径(默认为用户主目录下的 `playwright-script`
241+
4. 设置JSON文件路径(默认为用户主目录下的 `server/params-data.json`
242+
5. 设置自定义参数名称(默认为 `LCXcLVWn`
243+
6. 设置预获取线程数(默认为 `3`
244+
7. 点击 `激活插件` 按钮启用功能
245+
246+
### 4. 使用插件捕获和替换参数
247+
248+
1. 在Burp Suite的Repeater或Intruder中发送请求
249+
2. 插件将自动捕获请求并通过Playwright模拟
250+
3. 捕获的参数将通过WebSocket发送到服务器并保存到JSON文件
251+
4. 后续请求将自动使用保存的参数,实现参数替换
252+
253+
## 注意事项
254+
255+
1. 预获取操作在后台进行,不会阻塞UI或其他操作
256+
2. 建议根据系统性能和网络状况调整线程数
257+
3. 如果参数泄露或失效,可以使用"清除参数缓存"重新获取
258+
4. 确保Playwright脚本和WebSocket服务器正在运行
259+
5. 插件默认每10秒重新加载一次参数数据,也可点击 `重新加载参数数据` 按钮手动加载
260+
6. 日志区域显示插件的运行状态和错误信息
261+
262+
## 故障排除
263+
264+
### 无法连接到WebSocket服务器
265+
266+
- 确保WebSocket服务器正在运行
267+
- 检查防火墙设置是否允许端口8081的连接
268+
- 检查服务器地址是否正确(默认为 `ws://localhost:8081`
269+
270+
### 参数未被捕获
271+
272+
- 检查Playwright脚本路径是否正确
273+
- 确保Node.js已正确安装
274+
- 查看插件日志区域中的错误信息
275+
276+
### 参数未被替换
277+
278+
- 确保插件已激活
279+
- 检查JSON文件路径是否正确
280+
- 尝试手动点击 `重新加载参数数据` 按钮
281+
282+
### 性能问题
283+
284+
- 增加预获取线程数可能提高性能,但会消耗更多系统资源
285+
- 减少预获取线程数可能降低性能,但会减少资源消耗
286+
- 根据实际情况进行调整
287+
288+
## 未来改进方向
289+
290+
1. **支持更多参数类型**:扩展对更多HTTP参数类型的支持
291+
2. **多会话支持**:支持多个测试会话的参数隔离
292+
3. **参数智能分析**:添加参数变化监测和智能分析功能
293+
4. **自动化测试**:添加自动化测试脚本,确保功能稳定性
294+
5. **性能优化**:进一步优化参数处理和替换的性能
295+
6. **更丰富的统计信息**:提供更详细的参数使用统计和性能指标
296+
7. **更多浏览器支持**:扩展对Firefox、Edge等浏览器的支持
297+
298+
## 安全考虑
299+
300+
1. **本地处理**:参数数据保存在本地,不涉及远程传输敏感数据
301+
2. **无网络泄露**:Playwright拦截请求不实际发送,避免测试请求泄露
302+
3. **访问控制**:WebSocket服务器仅在本地运行,减少外部访问风险

0 commit comments

Comments
 (0)