功能: - 激活码管理 (Pro/Auto 两种类型) - 账号池管理 - 设备绑定记录 - 使用日志 - 搜索/筛选功能 - 禁用/启用功能 (支持退款参考) - 全局设置 (换号间隔、额度消耗等) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
121 lines
4.8 KiB
Markdown
121 lines
4.8 KiB
Markdown
# CursorPro 反混淆分析报告
|
||
|
||
## 项目结构
|
||
|
||
```
|
||
deobfuscated/
|
||
├── extension.js # 扩展主入口
|
||
├── api/
|
||
│ └── client.js # API 客户端
|
||
├── utils/
|
||
│ ├── account.js # 账号管理工具
|
||
│ └── sqlite.js # SQLite 数据库操作
|
||
└── webview/
|
||
└── provider.js # Webview 提供者
|
||
```
|
||
|
||
## 功能分析
|
||
|
||
### 1. extension.js - 扩展入口
|
||
- **cleanServiceWorkerCache()**: 清理 Cursor 的 Service Worker 缓存
|
||
- **activate()**: 注册 webview provider 和状态栏
|
||
- **updateUsageStatusBar()**: 更新状态栏显示使用量
|
||
|
||
### 2. api/client.js - API 客户端
|
||
与远程服务器通信,主要 API:
|
||
|
||
| 函数 | 端点 | 说明 |
|
||
|------|------|------|
|
||
| `verifyKey()` | POST /api/verify | 验证激活码 |
|
||
| `switchAccount()` | POST /api/switch | 切换账号 |
|
||
| `getSeamlessStatus()` | GET /api/seamless/status | 获取无缝模式状态 |
|
||
| `injectSeamless()` | POST /api/seamless/inject | 注入无缝模式 |
|
||
| `getProxyConfig()` | GET /api/proxy-config | 获取代理配置 |
|
||
|
||
**默认 API 服务器**: `https://api.cursorpro.com` (从混淆代码中提取)
|
||
|
||
### 3. utils/account.js - 账号管理
|
||
|
||
**getCursorPaths()** - 返回 Cursor 配置路径:
|
||
|
||
| 平台 | 数据库路径 |
|
||
|------|-----------|
|
||
| Windows | `%APPDATA%/Cursor/User/globalStorage/state.vscdb` |
|
||
| macOS | `~/Library/Application Support/Cursor/User/globalStorage/state.vscdb` |
|
||
| Linux | `~/.config/Cursor/User/globalStorage/state.vscdb` |
|
||
|
||
**writeAccountToLocal()** - 写入账号数据到本地:
|
||
- 修改 SQLite 数据库中的认证 token
|
||
- 更新 storage.json 中的设备 ID
|
||
- 写入 machineid 文件
|
||
- Windows: 写入注册表
|
||
|
||
**关键数据库字段**:
|
||
```
|
||
cursorAuth/accessToken - 访问令牌
|
||
cursorAuth/refreshToken - 刷新令牌
|
||
cursorAuth/WorkosCursorSessionToken - WorkOS 会话令牌
|
||
cursorAuth/cachedEmail - 缓存邮箱
|
||
cursorAuth/stripeMembershipType - 会员类型
|
||
telemetry.serviceMachineId - 服务机器ID
|
||
telemetry.devDeviceId - 设备ID
|
||
```
|
||
|
||
### 4. utils/sqlite.js - SQLite 操作
|
||
通过 `sqlite3` 命令行工具直接操作 Cursor 的 VSCode 状态数据库:
|
||
- `sqliteGet()` - 读取单个值
|
||
- `sqliteSet()` - 写入单个值
|
||
- `sqliteSetBatch()` - 批量写入 (使用事务)
|
||
|
||
### 5. webview/provider.js - Webview 界面
|
||
实现侧边栏 UI,提供:
|
||
- 激活码验证界面
|
||
- 使用统计显示
|
||
- 无缝模式配置
|
||
- 代理设置
|
||
- 账号切换功能
|
||
|
||
## 工作原理
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ CursorPro 工作流程 │
|
||
├─────────────────────────────────────────────────────────────┤
|
||
│ │
|
||
│ 1. 用户输入激活码 │
|
||
│ ↓ │
|
||
│ 2. 发送到远程 API 服务器验证 │
|
||
│ ↓ │
|
||
│ 3. 服务器返回账号数据 (token, email, 设备ID等) │
|
||
│ ↓ │
|
||
│ 4. 写入本地 Cursor 配置文件: │
|
||
│ - state.vscdb (SQLite 数据库) │
|
||
│ - storage.json │
|
||
│ - machineid │
|
||
│ ↓ │
|
||
│ 5. 提示重启 Cursor 生效 │
|
||
│ │
|
||
└─────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
## 安全风险分析
|
||
|
||
1. **远程服务器控制**: 所有账号数据来自 `api.cursorpro.com`
|
||
2. **本地文件修改**: 直接操作 Cursor 数据库和配置文件
|
||
3. **设备指纹伪造**: 替换 machineId, devDeviceId 等标识
|
||
4. **进程控制**: 可强制关闭 Cursor 进程
|
||
|
||
## 混淆技术分析
|
||
|
||
原代码使用了以下混淆技术:
|
||
|
||
1. **字符串数组 + 解密函数**: 所有字符串存储在数组中,通过 RC4 算法解密
|
||
2. **十六进制变量名**: `_0x50c5e9`, `_0x2b0b` 等
|
||
3. **控制流平坦化**: 使用 switch-case 打乱代码执行顺序
|
||
4. **死代码注入**: 插入无用的条件分支
|
||
5. **Base64 + RC4 双重编码**: 字符串先 Base64 再 RC4 加密
|
||
|
||
---
|
||
|
||
*此分析仅供安全研究和学习目的*
|