[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-81187":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":14,"stars30d":14,"stars90d":14,"forks30d":14,"starsTrendScore":14,"compositeScore":15,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":16,"fork":16,"defaultBranch":17,"hasWiki":18,"hasPages":16,"topics":19,"createdAt":9,"pushedAt":9,"updatedAt":20,"readmeContent":21,"aiSummary":22,"trendingCount":14,"starSnapshotCount":14,"syncStatus":23,"lastSyncTime":24,"discoverSource":25},81187,"windsurf-register-free-2","AERT-7Y\u002Fwindsurf-register-free-2","AERT-7Y","利用ida和个人知识，通过反编译将windsurf切号和注册账号付费程序，实现批量注册free账号，理解切号和额度查询的规则和方案",null,"JavaScript",26,8,27,0,39.86,false,"main",true,[],"2026-06-12 04:01:32","# windsurf-register\n\n![Platform](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fplatform-Chromium%20%7C%20Windows-lightgrey)\n![License](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-see_LICENSE-blue)\n![Status](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fstatus-已归档--仅供参考-orange)\n\n> ⚠️ **维护状态声明**\n>\n> **若 Windsurf 未更新其注册\u002F认证机制，本项目将不再继续维护。**\n>\n> - 本项目代码仅供参考与学习研究，**不适合日常生产环境使用**。\n> - 作者已转移精力至其他项目，**不再主动更新或修复本仓库**。\n> - 如遇功能异常，请优先检查 Windsurf 官方是否已变更接口或 DOM 结构。\n> - 欢迎 Fork 自行修改，但不接受新特性 PR。\n\n本仓库包含两个可配合使用的部分：**浏览器扩展（批量完成网站注册流程）**与 **桌面管理程序（本地账号库、会话刷新、IDE 切换）**。下文说明如何安装使用、如何按需配置、以及二者在实现上的底层逻辑（不涉及任何密钥、令牌或私密路径的罗列）。\n\n---\n\n## 开源治理与文档索引\n\n| 文档 | 说明 |\n|------|------|\n| [TUTORIAL.md](TUTORIAL.md) | **分步教程**：扩展加载、桌面端启动、配置要点、推到 GitHub |\n| [CONTRIBUTING.md](CONTRIBUTING.md) | 参与贡献、分支与提交约定、禁止向仓库提交敏感信息 |\n| [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) | 社区参与者行为准则 |\n| [SECURITY.md](SECURITY.md) | 安全漏洞与合规问题的反馈方式 |\n| [CHANGELOG.md](CHANGELOG.md) | 版本与变更记录 |\n\nGitHub 仓库可额外使用 `.github\u002FISSUE_TEMPLATE\u002F` 与 `.github\u002FPULL_REQUEST_TEMPLATE.md` 中的模板，便于 Issue \u002F PR 信息完整。\n\n---\n\n## 研究与溯源声明（重要）\n\n作者在研究与文档化过程中，曾使用 **IDA Pro**、**Ghidra**，以及适用于不同运行时与文件格式的 **常见反编译与静态分析工具**（例如面向托管程序、移动包、脚本资源等场景的工具链），并结合 **浏览器开发者工具** 对网络与存储行为进行观测。上述操作均限于 **本地环境、技术交流与互操作性分析**，目的在于理解客户端与服务器之间的协议形态及本地状态组织方式，**不构成、也不鼓励任何违法破解或盗版行为**。\n\n- **本仓库不包含** 任何第三方商业软件的完整反编译源码树、破解补丁、注册机或用于绕过付费授权与法律保护机制的专用工具。公开内容为基于理解的 **独立参考实现**。  \n- **禁止** 将本仓库用于：非法侵入他人系统、传播盗版、绕过依法对软件与数据的保护、或违反目标产品服务条款的用途。  \n- 若您认为仓库内容涉及合法权益，请按 [SECURITY.md](SECURITY.md) 说明的方式联系处理。\n\n---\n\n## 架构与流程（图示）\n\n以下 **Mermaid** 图示便于建立整体认知；与实现细节不一致时以源码为准。\n\n### 单仓组件全景\n\n```mermaid\nflowchart TB\n  subgraph Mono[\"windsurf-register\"]\n    subgraph EXT[\"browser-extension\"]\n      MV3[Manifest V3]\n      BG[Service Worker]\n      CS[Content Scripts]\n      SP[Side Panel]\n      MV3 --> BG\n      MV3 --> CS\n      BG \u003C--> SP\n      BG \u003C--> CS\n    end\n    subgraph APP[\"windsurf-auto-free-main\"]\n      MAIN[Electron Main]\n      PRE[Preload]\n      REN[Renderer]\n      WS[网络与会话模块]\n      DB[(本地账号库)]\n      SWI[切换与进程控制]\n      DIR[本机 IDE 状态读写]\n      MAIN --> PRE --> REN\n      MAIN --> WS\n      MAIN --> DB\n      MAIN --> SWI\n      SWI --> DIR\n    end\n  end\n  EXT -.导出 JSON.-> APP\n```\n\n### 能力范围思维导图\n\n```mermaid\nmindmap\n  root((windsurf-register))\n    浏览器扩展\n      批量调度\n      临时邮箱联动\n      DOM 自动化\n      Cookie与站点数据清理\n      反指纹保护\n        Canvas 随机化\n        WebGL 伪装\n        WebRTC 防护\n        webdriver 隐藏\n    桌面管理程序\n      账号增删改查\n      会话刷新与重登\n      IDE 账号切换\n      本地持久化\n      反检测系统\n        机器标识符重置\n        installation_id 重置\n        storage.json 保护\n```\n\n### 扩展：单条注册时序（简化）\n\n```mermaid\nsequenceDiagram\n  participant U as 用户侧栏\n  participant BG as Service Worker\n  participant MAIL as 临时邮箱服务\n  participant TAB as 注册页标签\n  participant CS as Content Script\n\n  U->>BG: 开始批量\n  BG->>BG: 可选清理站点数据\n  BG->>MAIL: 创建邮箱\n  MAIL-->>BG: 收件地址与轮询凭据\n  BG->>TAB: 打开注册页\n  TAB-->>CS: 脚本注入就绪\n  BG->>CS: 下发填表数据\n  CS->>TAB: 模拟输入与点击\n  CS->>BG: 需要验证码\n  loop 轮询邮件\n    BG->>MAIL: 拉取邮件\n    MAIL-->>BG: 邮件内容\n  end\n  BG->>CS: 下发 OTP\n  CS->>TAB: 填写并提交\n  CS->>BG: 成功或失败事件\n```\n\n### 桌面端：账号切换决策（简化）\n\n```mermaid\nflowchart TD\n  A[用户发起切换] --> B{本地是否具备会话令牌}\n  B -- 否 --> X[提示先完成登录或刷新]\n  B -- 是 --> C[向产品后端申请一次性登录凭据]\n  C --> D{自定义协议唤起是否达成目标状态}\n  D -- 是 --> Y[完成]\n  D -- 否或超时 --> F[结束 IDE 进程]\n  F --> G[写入本机用户数据区状态库]\n  G --> H[重启 IDE]\n  H --> I[可选再次协议唤起或等待就绪信号]\n  I --> Y\n```\n\n---\n\n## 一、仓库里有什么\n\n| 目录 | 角色 |\n|------|------|\n| `browser-extension\u002F` | 基于 Manifest V3 的 Chromium 扩展，在官方注册站点上辅助填表、收验证码、批量排队执行。 |\n| `windsurf-auto-free-main\u002F` | 基于 Electron 的 Windows 桌面程序，维护本地账号数据库，负责登录态刷新与在本机 Windsurf 客户端间切换账号。 |\n\n运行桌面程序后，工作目录下可能生成 `data\u002F` 等本地数据目录，**请勿将本地数据库或导出文件提交到公开仓库**。\n\n---\n\n## 二、使用教程（按顺序做即可）\n\n### 2.1 浏览器扩展\n\n1. **准备图标**  \n   扩展清单中声明了多尺寸图标路径。请在该目录下放置对应 PNG，否则加载时可能提示资源缺失（不影响逻辑调试时可临时用占位图）。\n\n2. **加载扩展**  \n   打开 Chrome 或 Edge → `chrome:\u002F\u002Fextensions` 或 `edge:\u002F\u002Fextensions` → 开启「开发者模式」→「加载已解压的扩展程序」→ 选择本仓库中的 `browser-extension` 文件夹。\n\n3. **打开侧栏**  \n   点击工具栏上的扩展图标，按浏览器提示打开**侧边栏**（Side Panel）。主要操作都在侧栏内完成。\n\n4. **开始批量流程**  \n   - 在「数量」中填写本轮要执行的条数（上限以界面为准）。  \n   - 点击「开始注册」。后台会按队列逐条执行：准备邮箱 → 打开注册页 → 注入页面的脚本自动填表 → 必要时等待邮件中的验证码并填入。  \n   - 需要中止时点「停止」。\n\n5. **查看结果与导出**  \n   - 「实时日志」区域会滚动输出当前步骤说明。  \n   - 「账号记录」中列出已成功写入本扩展存储的账号条目。  \n   - 使用「导出 JSON」将记录下载到本机，供桌面程序导入（见下节）。\n\n6. **常见现象**  \n   - 若页面改版导致选择器不匹配，注入脚本可能停在某一步；以日志与页面实际文案为准排查。  \n   - 若浏览器已登录同一产品账号，可能出现跳转个人页等情况，扩展会按逻辑中止当前条并继续或报错，具体以代码分支为准。\n\n### 2.2 桌面管理程序（Electron）\n\n1. **安装依赖**  \n   在 `windsurf-auto-free-main` 目录打开终端，执行：\n\n   ```bash\n   npm install\n   ```\n\n2. **启动方式（二选一）**  \n   - **普通启动**：`npm start`（或 `npx electron .`）。适合只做导入、刷新、查看，不做「切换 Windsurf 登录账号」。  \n   - **管理员启动（推荐用于切换账号）**：运行同目录下的 `start.bat`。脚本会请求提升权限；切换流程需要结束本机 Windsurf 进程并写入其用户数据区域内的本地数据库，无管理员权限时容易失败。\n\n3. **首次使用建议流程**  \n   - 打开窗口后，确认界面展示的**网络\u002F代理**提示是否符合本机环境（程序会读取系统代理相关设置做展示，具体逻辑见源码）。  \n   - **添加账号**：在弹窗中输入邮箱与密码，程序会向身份服务与产品侧接口依次请求，把返回的会话信息写入本地库。  \n   - **从扩展衔接**：使用扩展导出的 JSON，在管理台通过「从文件导入」或粘贴文本导入；格式为对象数组，字段为邮箱与密码（键名以程序解析逻辑为准，见源码中的导入处理）。  \n   - **刷新**：单条「刷新数据」或「刷新全部」用于用已保存的刷新凭据更新令牌，或在缺少刷新凭据时用密码重新走完整登录链。  \n   - **切换账号**：在列表中选择目标账号并执行切换；程序会尝试通过系统已注册的自定义协议唤起 Windsurf，失败时可能回退到「结束进程 + 直接改写本地状态 + 再启动」的路径（详见下文底层逻辑）。\n\n4. **导出**  \n   管理台可将当前库中账号导出为文本行（邮箱与密码分隔形式），便于备份；**导出的文件同样属于敏感信息，请妥善保管。**\n\n---\n\n## 三、配置教程（按需修改）\n\n### 3.1 扩展侧\n\n| 配置项 | 作用 | 如何改 |\n|--------|------|--------|\n| **临时邮箱服务** | 创建一次性收件地址、拉取邮件、解析验证码。 | 修改后台脚本中的 API 基地址与请求路径，并同步修改 `manifest.json` 里的 `host_permissions`，否则跨域请求会被浏览器拦截。 |\n| **注册站点域名** | 内容脚本注入范围、打开的标签页 URL。 | 修改 `manifest.json` 中 `content_scripts.matches` 与后台里打开注册页的常量，保持与目标站点一致。 |\n| **排除的邮箱域名** | 避免随机到不希望使用的临时域。 | 修改后台脚本中的排除规则列表。 |\n| **批量节奏** | 每条之间的等待、是否清理站点数据等。 | 在后台调度函数中调整延时与是否调用 Cookie\u002F站点数据清理 API（需具备对应 manifest 权限）。 |\n\n**权限说明：** 扩展已声明 `storage`、`tabs`、`cookies`、`browsingData`、侧栏等权限；若你增加新的跨域 API，必须在 `host_permissions` 中声明目标源。\n\n### 3.2 桌面程序侧\n\n| 配置项 | 作用 | 如何改 |\n|--------|------|--------|\n| **身份与产品接口** | 登录、刷新、拉取用户资料等 HTTP 请求的端点与请求头策略。 | 在 `src\u002Fservices` 下负责网络请求的模块中维护；若官方变更端点或客户端校验规则，需自行对照浏览器抓包更新（**勿将抓包得到的私密令牌写入仓库**）。 |\n| **请求超时** | 避免网络或代理半开连接导致界面长时间无响应。 | 在同模块中调整超时常量；注意超时须覆盖「建立连接 + 读取完整响应体」。 |\n| **本地库路径** | SQLite 文件落盘位置。 | 与进程当前工作目录相关；建议固定从某一启动方式进入，或将路径改为应用用户目录下的固定子路径（需改代码）。 |\n| **Windsurf 可执行文件** | 切换完成后重新启动 IDE。 | 在切换相关模块中维护候选路径与注册表\u002F环境探测逻辑；若安装路径非常规，可在该处增加你的安装目录。 |\n\n**代理与网络：** 桌面程序内 HTTP 实现与系统\u002F浏览器网络栈行为有关；若使用本地 HTTP 代理，请保证目标域名可走通，必要时为身份服务与产品域名配置直连规则（在代理软件侧配置，而非本 README 能穷举）。\n\n---\n\n## 四、底层逻辑（实现原理）\n\n### 4.1 扩展：为什么能自动注册？\n\n整体是 **Service Worker 调度 + 内容脚本操作 DOM + 跨上下文消息** 的经典结构。\n\n1. **单次注册的流水线（后台）**  \n   - 在内存中维护批量任务状态（总数、当前条、当前临时邮箱句柄、当前标签页 id、阶段等）。  \n   - 每条开始前，可选地清理目标站在本浏览器中的 Cookie 与部分站点数据，降低「仍保持旧会话」对注册流的干扰。  \n   - 通过 REST 在第三方临时邮箱服务上**创建邮箱**，得到用于后续轮询的令牌类字段。  \n   - 用浏览器 API 打开官方注册页标签页，等待文档就绪后，向该标签页**发送一条带姓名\u002F邮箱\u002F密码的消息**。  \n   - 内容脚本在页面内填表并点击下一步；当页面进入「等待邮箱验证码」阶段时，内容脚本向后台发消息；后台则**定时请求邮件列表**，从新邮件正文中用正则等方式取出数字验证码，再发回内容脚本填入。  \n   - 检测到进入个人资料页或成功文案等条件时，记为成功并写入结果数组；失败则记录原因，关闭标签页，按延迟调度下一条。\n\n2. **内容脚本如何驱动 React 类页面？**  \n   许多现代站点用受控组件，直接改 `input.value` 不触发内部状态更新。实现上通过原生 `value` 描述符写入，并派发 `input` \u002F `change` \u002F `blur` 等事件，尽量让框架收到「用户输入」信号；按钮则通过文案模糊匹配点击。\n\n3. **步骤识别**  \n   通过 URL 片段与 `document.body` 内可见英文提示语，将当前页面归类为：注册页、密码页、OTP 页、个人页、未知。不同类别走不同分支（继续填表、要验证码、或判定失败）。\n\n4. **与侧栏 UI 的通信**  \n   后台用广播消息把状态推给侧栏；侧栏请求开始\u002F停止、导出等再通过消息发给后台。扩展存储用于崩溃恢复时尽量接续状态（以代码为准）。\n\n---\n\n### 4.2 桌面程序：登录、刷新、切换分别做什么？\n\n#### （1）登录与刷新（会话层）\n\n目标是在本地库中保存**可被产品后端识别的访问凭据**以及用于续期的 **刷新凭据**（若接口返回）。\n\n- **典型链路（概念）**  \n  1. 使用「邮箱 + 密码」向通用的身份服务发起「密码登录」类请求，得到短期身份令牌与刷新凭据。  \n  2. 再携带短期身份令牌，请求产品侧的「用身份令牌换取应用会话」类接口，得到应用侧 API 密钥或会话令牌、显示名等。  \n  3. 将上述字段与过期时间写入本地 SQLite 表的一行中。\n\n- **刷新**  \n  - 若本地仍有有效的刷新凭据，则向身份服务的「刷新授权」端点用表单或 JSON 换取新的短期身份令牌，再更新库中字段。  \n  - 若没有刷新凭据但仍有密码，则退化为再走一遍完整登录链（与「添加账号」相同）。  \n  - 实现上应避免在同一次用户操作中，对「已经失败过的密码登录」无意义地立刻再调用一次，以免造成重复日志与重复请求（以当前主进程逻辑为准）。\n\n- **网络实现要点**  \n  请求需带与官方 Web 客户端相近的来源头信息，否则部分环境下身份接口会拒绝；超时需覆盖读完整响应体，避免在代理场景下「已收到头、体永不结束」导致假死。\n\n#### （2）切换账号（与 Windsurf 本机进程交互）\n\n目标是把 **当前库中选中账号所持有的会话令牌**，变成 **本机 Windsurf 进程正在使用的那一个**。\n\n- **优先路径（协议唤起）**  \n  1. 用库中已保存的会话类令牌，向产品后端请求「一次性登录用短令牌」（具体协议形态见源码：可能为二进制或 JSON 封装）。  \n  2. 通过操作系统注册的应用协议链接，把短令牌作为参数唤起 Windsurf；由客户端完成登录态切换。\n\n- **回退路径（直接改本地状态）**  \n  当协议路径未在超时内观察到成功标志时：  \n  1. 结束 Windsurf 相关进程（多种手段重试，直到确认退出）。  \n  2. 在用户数据目录下的 **本地状态数据库**（基于 SQLite 的键值存储）中，按产品使用的键名写入选中账号的令牌、邮箱、安装标识等字段（键名与表结构以源码为准）。  \n  3. 再次启动 Windsurf 可执行文件。  \n  4. 可选地再次触发「刷新会话」类自定义协议，或再次换取一次性令牌并唤起，以促使客户端重读状态。  \n  5. 通过轮询读取同一份状态文件或日志文件中的关键字，判断语言服务\u002F登录态是否就绪。\n\n- **为何常要求管理员**  \n  结束进程、快速连续写文件、从非安装目录探测可执行路径等操作，在 Windows 上受权限与杀软策略影响较大；提升权限可减少「写不入、杀不净」导致的偶发失败。\n\n#### （3）界面与数据\n\n- 渲染进程通过 **预加载脚本暴露的受控 API** 调用主进程 IPC；主进程负责访问文件系统、发起网络、调用切换模块。  \n- 控制台日志可从主进程转发到窗口，便于在同一界面查看。\n\n---\n\n## 五、反检测与反指纹（新增）\n\n### 5.1 桌面端：机器标识符重置\n\n2026年3月 Windsurf 实施配额制后，加强了多账号检测力度。项目新增 **anti-detect.js** 模块，在每次账号切换时自动重置以下标识符：\n\n| 标识符 | 存储位置 | 格式 | 作用 |\n|--------|---------|------|------|\n| `telemetry.machineId` | `%APPDATA%\\Windsurf\\User\\globalStorage\\storage.json` | 64位十六进制 | 主要机器识别ID |\n| `telemetry.macMachineId` | 同上 | 64位十六进制 | MAC地址衍生ID |\n| `telemetry.devDeviceId` | 同上 | UUID | 设备标识符 |\n| `telemetry.sqmId` | 同上 | `{大写UUID}` | 微软SQM兼容标识 |\n| `installation_id` | `%USERPROFILE%\\.codeium\\windsurf\\installation_id` | UUID | 安装标识 |\n\n**自动触发时机：**\n- 账号切换完成后（`switchAccountToDB()` 返回前）\n- 重置结果会写入切换返回值，便于 UI 层展示\n\n**手动触发：**\n- IPC 接口：`antidetect:reset`（可通过 UI 按钮调用）\n- 状态检查：`antidetect:checkStatus`（检查文件是否存在）\n\n### 5.2 浏览器扩展：反指纹保护\n\n扩展在 `document_start` 阶段向所有 `windsurf.com` 页面注入 `antifingerprint.js`，提供以下保护：\n\n| 保护项 | 原理 | 效果 |\n|--------|------|------|\n| `navigator.webdriver` 隐藏 | 重写属性描述符 | 消除自动化工具标志 |\n| Canvas 指纹随机化 | 向 `toDataURL()` 注入微小噪声 | 每次访问产生不同指纹 |\n| WebGL 渲染器伪装 | 拦截 `getParameter()` 返回随机显卡型号 | 模拟不同硬件环境 |\n| WebRTC 本地 IP 保护 | 封装 `RTCPeerConnection` | 防止真实 IP 泄漏 |\n| AudioContext 干扰 | 在创建压缩机时注入噪声 | 干扰音频指纹检测 |\n| 密码生成加密安全 | 使用 `crypto.getRandomValues()` | 消除 `Math.random()` 的可预测性 |\n\n**重要说明：**\n- 反指纹脚本在所有 `windsurf.com` 页面加载时自动激活\n- 无需用户手动操作，扩展加载即生效\n- 不影响注册流程的正常使用\n\n### 5.3 检测维度对照\n\nWindsurf 当前（2026年）的检测维度包括：\n\n1. **设备指纹**：`machineId` + `macMachineId` + `devDeviceId` → **已覆盖**\n2. **安装标识**：`installation_id` → **已覆盖**\n3. **浏览器指纹**：Canvas + WebGL + webdriver 标志 → **已覆盖**\n4. **网络关联**：IP + 代理线路 → **需用户自行配置代理**\n5. **行为关联**：操作节奏、使用模式 → **部分覆盖（扩展注册有随机延时）**\n\n---\n\n## 六、两个部分如何衔接（数据层面）\n\n扩展导出的 JSON 为**对象数组**，每个对象至少包含**邮箱**与**密码**字段（键名与解析兼容别名见桌面程序导入逻辑）。桌面程序导入时会逐条尝试走登录链，将成功或失败状态写回本地库。\n\n---\n\n## 七、合规与免责\n\n除上文 **「研究与溯源声明」** 外，请自行遵守目标产品、身份服务、临时邮箱服务及所在地的法律与条款。本仓库按「原样」提供，**不保证可用性、不保证与任何第三方服务长期兼容**。因使用本仓库导致的账号限制、封禁或数据问题，**须由使用者自行承担**。\n\n---\n\n## 八、许可证与工程规范\n\n发布到公开平台前，请在本仓库根目录自行添加 `LICENSE`（SPDX 标识建议写入 README 徽章与 `package.json` 等元数据）。请勿将个人账号、密钥、本地数据库或抓包导出纳入版本控制；建议配合 `.gitignore` 与 CI 秘密扫描使用。\n\n本仓库配套 **CONTRIBUTING \u002F CODE_OF_CONDUCT \u002F SECURITY \u002F CHANGELOG**（见文首索引），以符合常见开源项目的治理与协作习惯。\n","windsurf-register-free-2 项目旨在通过反编译和逆向工程技术，实现批量注册 Windsurf 平台的免费账号，并研究切号与额度查询的相关规则。其核心功能包括一个基于 Chromium 的浏览器扩展，用于自动化完成网站注册流程，以及一个桌面管理程序，支持本地账号库管理和会话刷新等功能。项目采用 JavaScript 编写，利用了多种反编译工具如 IDA Pro 和 Ghidra 进行分析，并结合了浏览器开发者工具来理解网络行为。适合对软件逆向工程、自动化测试或相关技术感兴趣的研究人员及开发者学习使用，但明确指出不适合在生产环境中部署。",2,"2026-06-01 03:53:55","CREATED_QUERY"]