# 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 加密

---

*此分析仅供安全研究和学习目的*
