# 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 加密 --- *此分析仅供安全研究和学习目的*