39 Commits

Author SHA1 Message Date
煎饼果子卷鲨鱼辣椒 8a6413e6e6 ``` 2 days ago
煎饼果子卷鲨鱼辣椒 f1b3c60511 ``` 4 days ago
煎饼果子卷鲨鱼辣椒 e6ab59fa99 ``` 5 days ago
煎饼果子卷鲨鱼辣椒 88b48bfabb ``` 6 days ago
煎饼果子卷鲨鱼辣椒 35adfc335a ``` 1 week ago
煎饼果子卷鲨鱼辣椒 87205631f8 feat(cursor_linux_id_modifier): 改进菜单选择功能和TTY兼容性 1 week ago
煎饼果子卷鲨鱼辣椒 18267ae2f9 ``` 1 week ago
煎饼果子卷鲨鱼辣椒 4ef60bc279 ``` 1 week ago
煎饼果子卷鲨鱼辣椒 e130ac4091 ``` 1 week ago
煎饼果子卷鲨鱼辣椒 6b1ec4af40 ``` 1 week ago
煎饼果子卷鲨鱼辣椒 a1ac41780f ``` 2 weeks ago
煎饼果子卷鲨鱼辣椒 741920b4ca ``` 2 weeks ago
煎饼果子卷鲨鱼辣椒 207e5fe196 ``` 2 weeks ago
煎饼果子卷鲨鱼辣椒 9905d89135 ``` 2 weeks ago
煎饼果子卷鲨鱼辣椒 3adf78e4ba ``` 2 weeks ago
煎饼果子卷鲨鱼辣椒 33d5da5043 ``` 2 weeks ago
煎饼果子卷鲨鱼辣椒 c57a474faf ``` 2 weeks ago
煎饼果子卷鲨鱼辣椒 888e7f35da ``` 2 weeks ago
煎饼果子卷鲨鱼辣椒 b0ce1db683 ``` 2 weeks ago
煎饼果子卷鲨鱼辣椒 b4a7f3b2f9 ``` 2 weeks ago
煎饼果子卷鲨鱼辣椒 b249464549 ``` 2 weeks ago
煎饼果子卷鲨鱼辣椒 22adbe8f2c ``` 1 year ago
煎饼果子卷鲨鱼辣椒 82a86503e4 ``` 2 weeks ago
煎饼果子卷鲨鱼辣椒 4ebedae191 ``` 2 weeks ago
煎饼果子卷鲨鱼辣椒 3e0faf8001 ``` 2 weeks ago
煎饼果子卷鲨鱼辣椒 33e611ba9a ``` 2 weeks ago
煎饼果子卷鲨鱼辣椒 318a100435 ``` 2 weeks ago
煎饼果子卷鲨鱼辣椒 b6e34580bb ``` 2 weeks ago
煎饼果子卷鲨鱼辣椒 a1d7546d39 ``` 2 weeks ago
煎饼果子卷鲨鱼辣椒 a763ba63c1 ``` 2 weeks ago
煎饼果子卷鲨鱼辣椒 c6185e2e90 ``` 2 weeks ago
煎饼果子卷鲨鱼辣椒 33b9bf5dc3 ``` 2 weeks ago
煎饼果子卷鲨鱼辣椒 761120f781 ``` 2 weeks ago
煎饼果子卷鲨鱼辣椒 af0960d07e ``` 2 weeks ago
煎饼果子卷鲨鱼辣椒 a217ddd2be ``` 2 weeks ago
煎饼果子卷鲨鱼辣椒 f44b6af804 ``` 2 weeks ago
煎饼果子卷鲨鱼辣椒 84dfc62342 ``` 2 weeks ago
煎饼果子卷鲨鱼辣椒 ddc4c0cfda 1 2 weeks ago
煎饼果子卷鲨鱼辣椒 c2841d2030 ``` 3 weeks ago
  1. 3
      .gitignore
  2. 90
      README.md
  3. 91
      README_CN.md
  4. 90
      README_JP.md
  5. BIN
      img/qun-16.png
  6. BIN
      img/qun-17.png
  7. BIN
      img/qun-18.jpg
  8. BIN
      img/qun-19.jpg
  9. BIN
      img/qun-20.jpg
  10. BIN
      img/qun-21.jpg
  11. 116
      scripts/hook/cursor_hook.js
  12. 1248
      scripts/run/cursor_linux_id_modifier.sh
  13. 642
      scripts/run/cursor_mac_id_modifier.sh
  14. 1238
      scripts/run/cursor_win_id_modifier.ps1

3
.gitignore

@ -42,4 +42,5 @@ coverage.txt
*.log
.cunzhi*/
.sanshu*/
.sanshu*/
docs/

90
README.md

@ -16,21 +16,70 @@
<div align="center">
## 💰 Cursor Official Pre-charged Accounts
## ⚡️ [Flash Sale] Cursor Pro High‑Credit Accounts
⚡️ **Monthly Disposable | Exclusive Account | Best Value**
<img src="https://img.shields.io/badge/🔥_Private_&_Exclusive-30_Days_Stable-FF6B6B?style=for-the-badge" alt="Private & Exclusive"/> <img src="https://img.shields.io/badge/💎_Legit_Top--up-NOT_Cracked-4ECDC4?style=for-the-badge" alt="Legit Top-up"/> <img src="https://img.shields.io/badge/⭐_Official_Account-Full_Warranty-45B7D1?style=for-the-badge" alt="Official Account"/>
| Plan | Price | Original | Benefits |
|:---:|:---:|:---:|:---|
| **Pro** | ¥65/RMB | $20 | $20 base quota + bonus ≈ $65 total value |
| **Pro+** | ¥265/RMB | $60 | $70 base quota + bonus ≈ $130 total value |
| **Ultra** | ¥888/RMB| $20 | $400 base quota + massive bonus |
> 💡 Get **$65+** usage value for only **$12**! | 📖 [Official Pricing Reference](https://cursor.com/cn/docs/account/pricing)
> 📖 [Official Pricing](https://cursor.com/cn/docs/account/pricing) | Note: Cursor quota = Base quota + Overdraft + Monthly reset
<!-- ==================== 📦 Cursor Product Plans Overview ==================== -->
⚠️ **Notice**: Genuine top-up, exclusive account | 7-day warranty, daily refund | Max 3 devices | Stock accounts valid 27-30 days
| Type | Plan | 💰 Price | 📊 Official | 💎 Total Value / Note |
|:---:|:---|:---:|:---:|:---|
| **🏆 Member** | **Pro** 🔥 `HOT` | **¥65** / $12 | $20 | ≈ **$45–$65** (Base+Rewards+Overdraft) |
| **🏆 Member** | **Pro+** 💫 | **¥265** / $40 | $60 | ≈ **$95–$130** (Base+Rewards+Overdraft) |
| **🏆 Member** | **Ultra** 👑 `FLAGSHIP` | **¥888** / $140 | $200 | ≈ **$400+** (Base+Massive Rewards) |
| **🎯 Limited** | **Half-Month Pass** 🏷️ `LIMITED` | **¥488** / $65 | — | 14-Day Exclusive 1000 Reqs + $20, **More durable than Ultra** |
| **🆕 Basic** | **Cursor Trial Acct** | **$3** /each | — | Guaranteed working, Bulk discount |
| **🆕 Basic** | **Gemini 3.0 Pro** 💎 | **¥85** / $10 | — | 1-Year Sub, Stable Google Acct, 3-Day Warranty |
📱 **Contact**: Telegram: [@yuaotian](https://t.me/yuaotian) | WeChat: `JavaRookie666`
> ℹ️ **Value Note**: Member plan total value = Base Credits + Rewards + Overdraft (monthly resets apply).
<details>
<summary>📋 <b>Product Details</b> (Click to expand)</summary>
<br>
#### 🏷️ Half-Month Pass Details
| Item | Description |
|:---|:---|
| **Service** | Cursor Official Business Member - 14-day account (deleted after use) |
| **14-Day Exclusive** | Personal exclusive business official request-based account with **1000** fast requests + **$20** model usage credit |
| **Billing** | Deducts request counts first, then the additional $20 credit. Note: Max models consume more counts. No slow-speed unlimited mode |
| **Full Access** | All models available, no functional restrictions |
| **Official & Warranty** | Guaranteed official account, full warranty, after-sales support. Renewable! |
> 💡 **More durable than the $200/Ultra plan! Experience it yourself!**
---
#### 💳 Cursor Trial Account Details
| Item | Description |
|:---|:---|
| **Delivery Format** | `Account ---- Cursor Password ---- Email Password ---- Long-term cookies` |
| **Warranty** | Check within **1 hour** of receipt. No support after timeout |
| **Login URL** | cursor.com (Direct Login) |
---
#### 💎 Gemini 3.0 Pro Details
| Item | Description |
|:---|:---|
| **Description** | 3-Day Warranty. Super stable Google accounts (6mo-1yr+). Quality far exceeds temporary email accounts. Suitable even for GCP |
| **Account Format** | `Account----Password----Recovery Email----2FA` |
| **Instructions** | ① Immediately bind your own recovery email, password, and phone number after login ② **Important**: Keep using the same IP address for the first 3 days |
</details>
---
<!-- ==================== 📢 Purchase Notice & Contact ==================== -->
| ⚠️ **Before You Buy** | 📱 **Contact** |
|:---|:---|
| 💎 Legit top-up, private account | <img src="https://img.shields.io/badge/Telegram-2CA5E0?style=flat-square&logo=telegram&logoColor=white"/> [@yuaotian](https://t.me/yuaotian) |
| ⏱️ Valid 25–30 days \| 💻 Recommended ≤3 devices | <img src="https://img.shields.io/badge/WeChat-07C160?style=flat-square&logo=wechat&logoColor=white"/> `JavaRookie666` |
| 🛡️ 7-day warranty (replacement / pro-rated refund) | |
---
@ -79,6 +128,12 @@ curl -fsSL https://raw.githubusercontent.com/yuaotian/go-cursor-help/refs/heads/
irm https://raw.githubusercontent.com/yuaotian/go-cursor-help/refs/heads/master/scripts/run/cursor_win_id_modifier.ps1 | iex
```
**Tip (Windows):** If you suspect a cached old script (mirror/proxy cache), append a timestamp query parameter to bypass cache:
```powershell
irm "https://raw.githubusercontent.com/yuaotian/go-cursor-help/refs/heads/master/scripts/run/cursor_win_id_modifier.ps1?$(Get-Date -Format yyyyMMddHHmmss)" | iex
```
</details>
@ -105,6 +160,12 @@ curl -fsSL https://wget.la/https://raw.githubusercontent.com/yuaotian/go-cursor-
irm https://wget.la/https://raw.githubusercontent.com/yuaotian/go-cursor-help/refs/heads/master/scripts/run/cursor_win_id_modifier.ps1 | iex
```
**Tip (Windows):** If the mirror caches old content, append `?$(Get-Date -Format yyyyMMddHHmmss)` to the URL:
```powershell
irm "https://wget.la/https://raw.githubusercontent.com/yuaotian/go-cursor-help/refs/heads/master/scripts/run/cursor_win_id_modifier.ps1?$(Get-Date -Format yyyyMMddHHmmss)" | iex
```
</details>
@ -346,7 +407,7 @@ Your feedback helps us improve the tool for everyone. Feel free to open an issue
</td>
<td align="center">
<b>WeChat</b><br>
<img src="img/qun-20.jpg" width="500" alt="WeChat"><br>
<img src="img/qun-21.jpg" width="500" alt="WeChat"><br>
<em>二维码7天内(11月25日前前)有效,过期请加微信或者公众号`煎饼果子卷AI`</em>
</td>
<!-- <td align="center">
@ -360,6 +421,13 @@ ETC: 0xa2745f4CD5d32310AC01694ABDB28bA32D125a6b
</table>
</div>
### 💳 Payment Methods (Donate / Remove Ads)
- 🪙 **USDT (Tether)**
- 🔴 TRC-20 (Tron): `TFbJnoY5Lep5ZrDwBbT8rV1i8xR4ZhX53k`
- 🟡 Polygon / BSC / Arbitrum: `0x44f8925b9f93b3d6da8d5ad26a3516e3e652cc88`
- 🟦 **Litecoin (LTC)**: `LVrigKxtWfPymMRtRqL3z2eZxfncR3dPV7`
---
## ⭐ Project Stats

91
README_CN.md

@ -16,21 +16,70 @@
<div align="center">
## 💰 Cursor 官网正规成品号
## ⚡️【限时特惠】Cursor 高额度成品号
⚡️ **月抛号 | 独享账号 | 超高性价比**
<img src="https://img.shields.io/badge/🔥_独享专属-30天稳定-FF6B6B?style=for-the-badge" alt="独享专属"/> <img src="https://img.shields.io/badge/💎_正规充值-非破解试用-4ECDC4?style=for-the-badge" alt="正规充值"/> <img src="https://img.shields.io/badge/⭐_官方账号-全程质保-45B7D1?style=for-the-badge" alt="官方账号"/>
| 套餐 | 价格 | 原价 | 权益说明 |
|:---:|:---:|:---:|:---|
| **Pro** | ¥65/RMB月 | $20 (官价约¥145/RMB月) | 含 $20 基础额度 + 额外奖励 ≈ 总价值 $65 |
| **Pro+** | ¥265/RMB月 | $60 (官价约¥435/RMB月) | 含 $70 基础额度 + 额外奖励 ≈ 总价值 $130 |
| **Ultra** | ¥888/RMB月 | $200 (官价约¥1450/RMB月) | 含 $400 基础额度 + 海量额外奖励 |
> 💡 仅需 **¥65** 即可获得 **$65+** 使用价值! | 📖 [官网定价参考](https://cursor.com/cn/docs/account/pricing)
> 📖 [官网定价文档](https://cursor.com/cn/docs/account/pricing) | PS: Cursor额度 = 原套餐额度 + 账单透支 + 月末恢复原套餐额度
<!-- ==================== 📦 Cursor 产品套餐一览 ==================== -->
⚠️ **购买须知**:正规真金充值,独享账号 | 七天质保,按天退款 | 请勿多人共享(限3台设备内)| 少量库存号有效期27~30天
| 类型 | 套餐 | 💰 售价 | 📊 官方价 | 💎 总价值 / 说明 |
|:---:|:---|:---:|:---:|:---|
| **🏆 会员** | **Pro** 🔥 `爆款` | **¥65** / $12 | $20 | ≈ **$45–$65**(基础+奖励+透支) |
| **🏆 会员** | **Pro+** 💫 | **¥265** / $40 | $60 | ≈ **$95–$130**(基础+奖励+透支) |
| **🏆 会员** | **Ultra** 👑 `旗舰` | **¥888** / $140 | $200 | ≈ **$400+**(基础+海量奖励) |
| **🎯 限定** | **半月卡** 🏷️ `限量` | **¥488** / $65 | — | 14天独享 1000次 + $20,**比Ultra更耐用** |
| **🆕 基础** | **Cursor 试用号** | **$3** /个 | — | 保证可用,批量优惠 |
| **🆕 基础** | **Gemini 3.0 Pro** 💎 | **¥85** / $10 | — | 一年订阅,稳定谷歌老号,质保3天 |
📱 **联系方式**:Telegram: [@yuaotian](https://t.me/yuaotian) | WeChat: `JavaRookie666`
> ℹ️ **价值说明**:会员套餐总价值 = Base Credits(基础额度)+ Rewards(奖励)+ Overdraft(透支),每月重置。
<details>
<summary>📋 <b>各产品详细说明</b>(点击展开)</summary>
<br>
#### 🏷️ 半月卡详情
| 项目 | 说明 |
|:---|:---|
| **服务内容** | Cursor 官网商业版会员 - 14天用完就删号 |
| **14天独享** | 个人独享商业官方次数号,包含 **1000次** 快速请求额度 + **$20** 模型调用额度 |
| **计费规则** | 先消耗次数,次数用完后还可额外消耗 $20 余额。注意:Max模型扣除次数较多,无慢速无限模式 |
| **全功能开放** | 所有模型均可使用,无功能限制 |
| **官方授权** | 保证官方账号,全程质保,按天售后,额度用完可续充! |
> 💡 **比 $200/Ultra 套餐更耐用!自行体验!**
---
#### 💳 Cursor 试用号详情
| 项目 | 说明 |
|:---|:---|
| **发货格式** | `账号 ---- Cursor密码 ---- 邮箱密码 ---- 长效cookies` |
| **质保说明** | 质保到手,请在 **1小时内** 检查并反馈,超时不提供售后 |
| **登录地址** | cursor.com(直登账号) |
---
#### 💎 Gemini 3.0 Pro 详情
| 项目 | 说明 |
|:---|:---|
| **商品描述** | 质保三天,超级稳定的谷歌号注册(6月-1年以上),品质远超市面短效邮箱,开GCP都没问题 |
| **账号格式** | `账号----密码----辅助邮箱----2fa` |
| **使用须知** | ① 登录后第一时间绑定自己的辅助邮箱、密码及手机号 ② **切忌**:三天内尽量保持使用同一个IP登录 |
</details>
---
<!-- ==================== 📢 购买须知 & 联系方式 ==================== -->
| ⚠️ **购买须知** | 📱 **联系方式** |
|:---|:---|
| 💎 正规真金充值,独享账号 | <img src="https://img.shields.io/badge/Telegram-2CA5E0?style=flat-square&logo=telegram&logoColor=white"/> [@yuaotian](https://t.me/yuaotian) |
| ⏱️ 有效期 25–30 天 \| 💻 建议 ≤3 台设备 | <img src="https://img.shields.io/badge/WeChat-07C160?style=flat-square&logo=wechat&logoColor=white"/> `JavaRookie666` |
| 🛡️ 7天质保(换号 / 按天退款) | |
---
@ -110,6 +159,18 @@ curl -fsSL https://wget.la/https://raw.githubusercontent.com/yuaotian/go-cursor-
irm https://wget.la/https://raw.githubusercontent.com/yuaotian/go-cursor-help/refs/heads/master/scripts/run/cursor_win_id_modifier.ps1 | iex
```
**缓存提示(Windows):** 如果镜像/代理缓存导致拉到旧脚本,可在 URL 末尾追加时间戳参数绕缓存(推荐 raw + 时间戳):
```powershell
irm "https://raw.githubusercontent.com/yuaotian/go-cursor-help/refs/heads/master/scripts/run/cursor_win_id_modifier.ps1?$(Get-Date -Format yyyyMMddHHmmss)" | iex
```
如果必须继续使用 `wget.la` 镜像,同样可以在镜像 URL 末尾追加时间戳参数:
```powershell
irm "https://wget.la/https://raw.githubusercontent.com/yuaotian/go-cursor-help/refs/heads/master/scripts/run/cursor_win_id_modifier.ps1?$(Get-Date -Format yyyyMMddHHmmss)" | iex
```
</details>
@ -363,7 +424,7 @@ irm https://raw.githubusercontent.com/yuaotian/go-cursor-help/refs/heads/master/
</td>
<td align="center">
<b>微信交流群</b><br>
<img src="img/qun-20.jpg" width="500" alt="WeChat"><br>
<img src="img/qun-21.jpg" width="500" alt="WeChat"><br>
<small>二维码7天内(11月25日前)有效,过期请加微信或者公众号`煎饼果子卷AI`</small>
</td>
<td align="center">
@ -385,6 +446,14 @@ irm https://raw.githubusercontent.com/yuaotian/go-cursor-help/refs/heads/master/
</table>
</div>
### 💳 付款方式(捐赠)
- 🪙 **USDT(泰达币)**
- 🔴 TRC-20(波场):`TFbJnoY5Lep5ZrDwBbT8rV1i8xR4ZhX53k`
- 🟡 Polygon / BSC / Arbitrum:`0x44f8925b9f93b3d6da8d5ad26a3516e3e652cc88`
- 🟦 **莱特币(LTC)**:`LVrigKxtWfPymMRtRqL3z2eZxfncR3dPV7`
---
### 📚 推荐阅读

90
README_JP.md

@ -16,21 +16,70 @@
<div align="center">
## 💰 Cursor 公式チャージ済みアカウント
## ⚡️【フラッシュセール】Cursor 高クレジットアカウント
⚡️ **月額使い捨て | 専用アカウント | 最高のコスパ**
<img src="https://img.shields.io/badge/🔥_専用&独占-30日間安定-FF6B6B?style=for-the-badge" alt="専用&独占"/> <img src="https://img.shields.io/badge/💎_正規チャージ-クラック版ではない-4ECDC4?style=for-the-badge" alt="正規チャージ"/> <img src="https://img.shields.io/badge/⭐_公式アカウント-完全保証-45B7D1?style=for-the-badge" alt="公式アカウント"/>
| プラン | 価格 | 定価 | 特典内容 |
|:---:|:---:|:---:|:---|
| **Pro** | ¥65/月 | $20 (約¥145) | $20 基本枠 + ボーナス ≈ 総額 $65 |
| **Pro+** | ¥265/月 | $60 (約¥435) | $70 基本枠 + ボーナス ≈ 総額 $130 |
| **Ultra** | ¥888/月 | $200 (約¥1450) | $400 基本枠 + 大量ボーナス |
> 💡 わずか **$12****$65+** の利用価値を獲得! | 📖 [公式料金参考](https://cursor.com/cn/docs/account/pricing)
> 📖 [公式料金ドキュメント](https://cursor.com/cn/docs/account/pricing) | 注: Cursor枠 = 基本枠 + 超過分 + 月末リセット
<!-- ==================== 📦 Cursor 製品プラン一覧 ==================== -->
⚠️ **購入時の注意**:正規チャージ、専用アカウント | 7日間保証、日割り返金 | 3台まで | 在庫品は27〜30日有効
| タイプ | プラン | 💰 価格 | 📊 公式価格 | 💎 総価値 / 説明 |
|:---:|:---|:---:|:---:|:---|
| **🏆 会員** | **Pro** 🔥 `人気` | **¥65** / $12 | $20 | ≈ **$45–$65**(基本枠+Rewards+Overdraft) |
| **🏆 会員** | **Pro+** 💫 | **¥265** / $40 | $60 | ≈ **$95–$130**(基本枠+Rewards+Overdraft) |
| **🏆 会員** | **Ultra** 👑 `旗艦` | **¥888** / $140 | $200 | ≈ **$400+**(基本枠+大量Rewards) |
| **🎯 限定** | **半月パス** 🏷️ `限定` | **¥488** / $65 | — | 14日間独占 1000回 + $20、**Ultraより長持ち** |
| **🆕 基本** | **Cursor 試用アカウント** | **$3** /個 | — | 動作保証、大量購入割引 |
| **🆕 基本** | **Gemini 3.0 Pro** 💎 | **¥85** / $10 | — | 1年サブスク、安定Google垢、3日間保証 |
📱 **連絡先**:Telegram: [@yuaotian](https://t.me/yuaotian) | WeChat: `JavaRookie666`
> ℹ️ **価値説明**:会員プラン総価値 = Base Credits(基本枠)+ Rewards(報酬)+ Overdraft(超過分)、月次リセットあり。
<details>
<summary>📋 <b>各製品の詳細説明</b>(クリックで展開)</summary>
<br>
#### 🏷️ 半月パス詳細
| 項目 | 説明 |
|:---|:---|
| **サービス内容** | Cursor 公式ビジネスメンバー - 14日間使い切りアカウント(使用後削除) |
| **14日間独占** | 個人専用ビジネス公式リクエスト回数アカウント、**1000回**の高速リクエスト + **$20**のモデル利用枠を含む |
| **課金ルール** | 先に回数を消費し、その後追加の$20残高を消費可能。注意:Maxモデルは消費回数が多め、低速無制限モードなし |
| **全機能開放** | すべてのモデルが利用可能、機能制限なし |
| **公式・保証** | 公式アカウント保証、完全保証、日割りアフターサポート付き。リチャージ可能! |
> 💡 **$200/Ultra プランよりも長持ち!ぜひ体験してください!**
---
#### 💳 Cursor 試用アカウント詳細
| 項目 | 説明 |
|:---|:---|
| **納品形式** | `アカウント ---- Cursorパスワード ---- メールパスワード ---- 長期Cookie` |
| **保証について** | 受け取り後 **1時間以内** に確認してください。時間を過ぎた場合はサポート対象外 |
| **ログインアドレス** | cursor.com(直接ログイン) |
---
#### 💎 Gemini 3.0 Pro 詳細
| 項目 | 説明 |
|:---|:---|
| **商品説明** | 3日間保証。超安定したGoogleアカウント(6ヶ月-1年以上)。品質は短期メールアドレスを大幅に上回る。GCP開設にも使える高品質 |
| **アカウント形式** | `アカウント----パスワード----予備メール----2FA` |
| **使用上の注意** | ① ログイン後すぐに自身の予備メール、パスワード、電話番号を紐付け ② **重要**:最初の3日間は同じIPアドレスでログインを維持 |
</details>
---
<!-- ==================== 📢 購入須知 & 連絡先 ==================== -->
| ⚠️ **購入前に** | 📱 **連絡先** |
|:---|:---|
| 💎 正規チャージ、専用アカウント | <img src="https://img.shields.io/badge/Telegram-2CA5E0?style=flat-square&logo=telegram&logoColor=white"/> [@yuaotian](https://t.me/yuaotian) |
| ⏱️ 有効期間 25〜30日 \| 💻 推奨 ≤3台 | <img src="https://img.shields.io/badge/WeChat-07C160?style=flat-square&logo=wechat&logoColor=white"/> `JavaRookie666` |
| 🛡️ 7日保証(交換 / 日割り返金) | |
---
@ -299,6 +348,18 @@ irm https://raw.githubusercontent.com/yuaotian/go-cursor-help/refs/heads/master/
```
> デュアルモード操作とトライアルリセット機能を備えた強化版Cursorマシンコード修正ツール
**キャッシュ回避(Windows):** ミラー/プロキシのキャッシュで古いスクリプトが取得される場合、URL 末尾にタイムスタンプのクエリを付けて回避できます(GitHub raw + タイムスタンプ推奨):
```powershell
irm "https://raw.githubusercontent.com/yuaotian/go-cursor-help/refs/heads/master/scripts/run/cursor_win_id_modifier.ps1?$(Get-Date -Format yyyyMMddHHmmss)" | iex
```
`wget.la` などのミラーを使う場合も同様に、URL 末尾へタイムスタンプを追加できます:
```powershell
irm "https://wget.la/https://raw.githubusercontent.com/yuaotian/go-cursor-help/refs/heads/master/scripts/run/cursor_win_id_modifier.ps1?$(Get-Date -Format yyyyMMddHHmmss)" | iex
```
<div align="center">
<img src="img/run_success.png" alt="Run Success" width="600"/>
</div>
@ -558,7 +619,7 @@ macOS/Linuxユーザーはシステム内で同様の`cursor-updater`ディレ
</td>
<td align="center">
<b>WeChat</b><br>
<img src="img/qun-20.jpg" width="500" alt="WeChat"><br>
<img src="img/qun-21.jpg" width="500" alt="WeChat"><br>
<em>二维码7天内(11月25日前前)有效,过期请加微信或者公众号`煎饼果子卷AI`</em>
</td>
<!-- <td align="center">
@ -572,6 +633,13 @@ ETC: 0xa2745f4CD5d32310AC01694ABDB28bA32D125a6b
</table>
</div>
### 💳 お支払い方法(寄付 / 広告削除)
- 🪙 **USDT(Tether)**
- 🔴 TRC-20(Tron):`TFbJnoY5Lep5ZrDwBbT8rV1i8xR4ZhX53k`
- 🟡 Polygon / BSC / Arbitrum:`0x44f8925b9f93b3d6da8d5ad26a3516e3e652cc88`
- 🟦 **Litecoin(LTC)**:`LVrigKxtWfPymMRtRqL3z2eZxfncR3dPV7`
---
## 💬 フィードバック&提案

BIN
img/qun-16.png

Before

Width: 937  |  Height: 1319  |  Size: 128 KiB

BIN
img/qun-17.png

Before

Width: 937  |  Height: 1319  |  Size: 127 KiB

BIN
img/qun-18.jpg

Before

Width: 937  |  Height: 1319  |  Size: 128 KiB

BIN
img/qun-19.jpg

Before

Width: 937  |  Height: 1319  |  Size: 130 KiB

BIN
img/qun-20.jpg

Before

Width: 937  |  Height: 1319  |  Size: 126 KiB

BIN
img/qun-21.jpg

After

Width: 937  |  Height: 1361  |  Size: 132 KiB

116
scripts/hook/cursor_hook.js

@ -84,23 +84,12 @@ var __cursor_hook_config__ = {
};
// 加载或生成 ID 配置
// 注意:使用 createRequire 来支持 ES Module 环境
// 注意:该 Hook 由脚本注入的 Loader 通过 CommonJS(require) 方式加载,
// 为避免出现 import.meta 等仅 ESM 支持的语法导致 Cursor 启动期解析失败,这里保持纯 CommonJS 写法。
const loadOrGenerateIds = () => {
// 在 ES Module 环境中,需要使用 createRequire 来加载 CommonJS 模块
let fs, path, os;
try {
// 尝试使用 Node.js 内置模块
const { createRequire } = require('module');
const require2 = createRequire(import.meta?.url || __filename);
fs = require2('fs');
path = require2('path');
os = require2('os');
} catch (e) {
// 回退到直接 require
fs = require('fs');
path = require('path');
os = require('os');
}
const fs = require('fs');
const path = require('path');
const os = require('os');
const configPath = path.join(os.homedir(), __cursor_hook_config__.configFileName);
@ -110,9 +99,14 @@ var __cursor_hook_config__ = {
if (process.env.CURSOR_MACHINE_ID) {
ids = {
machineId: process.env.CURSOR_MACHINE_ID,
// machineGuid 用于模拟注册表 MachineGuid/IOPlatformUUID
machineGuid: process.env.CURSOR_MACHINE_GUID || generateUUID(),
macMachineId: process.env.CURSOR_MAC_MACHINE_ID || generateHex64(),
devDeviceId: process.env.CURSOR_DEV_DEVICE_ID || generateUUID(),
sqmId: process.env.CURSOR_SQM_ID || `{${generateUUID().toUpperCase()}}`
sqmId: process.env.CURSOR_SQM_ID || `{${generateUUID().toUpperCase()}}`,
macAddress: process.env.CURSOR_MAC_ADDRESS || generateMacAddress(),
sessionId: process.env.CURSOR_SESSION_ID || generateUUID(),
firstSessionDate: process.env.CURSOR_FIRST_SESSION_DATE || new Date().toISOString()
};
log('从环境变量加载 ID 配置');
return ids;
@ -123,6 +117,32 @@ var __cursor_hook_config__ = {
if (fs.existsSync(configPath)) {
const content = fs.readFileSync(configPath, 'utf8');
ids = JSON.parse(content);
// 补全缺失字段,保持向后兼容
let updated = false;
if (!ids.machineGuid) {
ids.machineGuid = generateUUID();
updated = true;
}
if (!ids.macAddress) {
ids.macAddress = generateMacAddress();
updated = true;
}
if (!ids.sessionId) {
ids.sessionId = generateUUID();
updated = true;
}
if (!ids.firstSessionDate) {
ids.firstSessionDate = new Date().toISOString();
updated = true;
}
if (updated) {
try {
fs.writeFileSync(configPath, JSON.stringify(ids, null, 2), 'utf8');
log('已补全并更新 ID 配置:', configPath);
} catch (e) {
log('补全配置文件失败:', e.message);
}
}
log('从配置文件加载 ID 配置:', configPath);
return ids;
}
@ -133,10 +153,13 @@ var __cursor_hook_config__ = {
// 生成新的 ID
ids = {
machineId: generateHex64(),
machineGuid: generateUUID(),
macMachineId: generateHex64(),
devDeviceId: generateUUID(),
sqmId: `{${generateUUID().toUpperCase()}}`,
macAddress: generateMacAddress(),
sessionId: generateUUID(),
firstSessionDate: new Date().toISOString(),
createdAt: new Date().toISOString()
};
@ -153,6 +176,8 @@ var __cursor_hook_config__ = {
// 加载 ID 配置
const __cursor_ids__ = loadOrGenerateIds();
// 统一获取 MachineGuid,缺失时回退到 machineId 的前 36 位
const getMachineGuid = () => __cursor_ids__.machineGuid || __cursor_ids__.machineId.substring(0, 36);
log('当前 ID 配置:', __cursor_ids__);
// ==================== Module Hook ====================
@ -164,42 +189,44 @@ var __cursor_hook_config__ = {
const hookedModules = new Map();
Module.prototype.require = function(id) {
// 兼容 node: 前缀
const normalizedId = (typeof id === 'string' && id.startsWith('node:')) ? id.slice(5) : id;
const result = originalRequire.apply(this, arguments);
// 如果已经 Hook 过,直接返回缓存
if (hookedModules.has(id)) {
return hookedModules.get(id);
if (hookedModules.has(normalizedId)) {
return hookedModules.get(normalizedId);
}
let hooked = result;
// Hook child_process 模块
if (id === 'child_process') {
if (normalizedId === 'child_process') {
hooked = hookChildProcess(result);
}
// Hook os 模块
else if (id === 'os') {
else if (normalizedId === 'os') {
hooked = hookOs(result);
}
// Hook crypto 模块
else if (id === 'crypto') {
else if (normalizedId === 'crypto') {
hooked = hookCrypto(result);
}
// Hook @vscode/deviceid 模块
else if (id === '@vscode/deviceid') {
else if (normalizedId === '@vscode/deviceid') {
hooked = hookDeviceId(result);
}
// Hook @vscode/windows-registry 模块
else if (id === '@vscode/windows-registry') {
else if (normalizedId === '@vscode/windows-registry') {
hooked = hookWindowsRegistry(result);
}
// 缓存 Hook 结果
if (hooked !== result) {
hookedModules.set(id, hooked);
log(`已 Hook 模块: ${id}`);
hookedModules.set(normalizedId, hooked);
log(`已 Hook 模块: ${normalizedId}`);
}
return hooked;
};
@ -207,6 +234,7 @@ var __cursor_hook_config__ = {
function hookChildProcess(cp) {
const originalExecSync = cp.execSync;
const originalExecFileSync = cp.execFileSync;
cp.execSync = function(command, options) {
const cmdStr = String(command).toLowerCase();
@ -215,13 +243,13 @@ var __cursor_hook_config__ = {
if (cmdStr.includes('reg') && cmdStr.includes('machineguid')) {
log('拦截 MachineGuid 查询');
// 返回格式化的注册表输出
return Buffer.from(`\r\n MachineGuid REG_SZ ${__cursor_ids__.machineId.substring(0, 36)}\r\n`);
return Buffer.from(`\r\n MachineGuid REG_SZ ${getMachineGuid()}\r\n`);
}
// 拦截 ioreg 命令 (macOS)
if (cmdStr.includes('ioreg') && cmdStr.includes('ioplatformexpertdevice')) {
log('拦截 IOPlatformUUID 查询');
return Buffer.from(`"IOPlatformUUID" = "${__cursor_ids__.machineId.substring(0, 36).toUpperCase()}"`);
return Buffer.from(`"IOPlatformUUID" = "${getMachineGuid().toUpperCase()}"`);
}
// 拦截 machine-id 读取 (Linux)
@ -233,6 +261,30 @@ var __cursor_hook_config__ = {
return originalExecSync.apply(this, arguments);
};
// 兼容 execFileSync(部分版本会直接调用可执行文件)
if (typeof originalExecFileSync === 'function') {
cp.execFileSync = function(file, args, options) {
const cmdStr = [file].concat(args || []).join(' ').toLowerCase();
if (cmdStr.includes('reg') && cmdStr.includes('machineguid')) {
log('拦截 MachineGuid 查询(execFileSync)');
return Buffer.from(`\r\n MachineGuid REG_SZ ${getMachineGuid()}\r\n`);
}
if (cmdStr.includes('ioreg') && cmdStr.includes('ioplatformexpertdevice')) {
log('拦截 IOPlatformUUID 查询(execFileSync)');
return Buffer.from(`"IOPlatformUUID" = "${getMachineGuid().toUpperCase()}"`);
}
if (cmdStr.includes('machine-id') || cmdStr.includes('hostname')) {
log('拦截 machine-id 查询(execFileSync)');
return Buffer.from(__cursor_ids__.machineId.substring(0, 32));
}
return originalExecFileSync.apply(this, arguments);
};
}
return cp;
}
@ -347,7 +399,7 @@ var __cursor_hook_config__ = {
// 拦截 MachineGuid 读取
if (name === 'MachineGuid' || path.includes('Cryptography')) {
log('拦截注册表 MachineGuid 读取');
return __cursor_ids__.machineId.substring(0, 36);
return getMachineGuid();
}
return originalGetStringRegKey?.apply(this, arguments) || '';
}
@ -439,7 +491,7 @@ var __cursor_hook_config__ = {
}
if (name === 'MachineGuid' || path?.includes('Cryptography')) {
log('动态导入: 拦截 MachineGuid');
return __cursor_ids__.machineId.substring(0, 36);
return getMachineGuid();
}
return originalGetStringRegKey?.apply(this, arguments) || '';
}
@ -459,6 +511,7 @@ var __cursor_hook_config__ = {
log('Cursor Hook 初始化完成');
log('machineId:', __cursor_ids__.machineId.substring(0, 16) + '...');
log('machineGuid:', getMachineGuid().substring(0, 16) + '...');
log('devDeviceId:', __cursor_ids__.devDeviceId);
log('sqmId:', __cursor_ids__.sqmId);
@ -474,4 +527,3 @@ if (typeof module !== 'undefined' && module.exports) {
if (typeof globalThis !== 'undefined') {
globalThis.__cursor_hook_config__ = __cursor_hook_config__;
}

1248
scripts/run/cursor_linux_id_modifier.sh
File diff suppressed because it is too large
View File

642
scripts/run/cursor_mac_id_modifier.sh

@ -37,6 +37,43 @@ YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 启动时尝试调整终端窗口大小为 120x40(列x行);不支持/失败时静默忽略,避免影响脚本主流程
try_resize_terminal_window() {
local target_cols=120
local target_rows=40
# 仅在交互终端中尝试,避免输出被重定向时出现乱码
if [ ! -t 1 ]; then
return 0
fi
case "${TERM:-}" in
""|dumb)
return 0
;;
esac
# 终端类型检测:仅对常见 xterm 体系终端尝试窗口调整(Terminal.app/iTerm2 以及常见终端通常为 xterm*)
case "${TERM:-}" in
xterm*|screen*|tmux*|rxvt*|alacritty*|kitty*|foot*|wezterm*)
;;
*)
return 0
;;
esac
# 优先通过 xterm 窗口控制序列调整;在 tmux/screen 下需要 passthrough 包装
if [ -n "${TMUX:-}" ]; then
printf '\033Ptmux;\033\033[8;%d;%dt\033\\' "$target_rows" "$target_cols" 2>/dev/null || true
elif [ -n "${STY:-}" ]; then
printf '\033P\033[8;%d;%dt\033\\' "$target_rows" "$target_cols" 2>/dev/null || true
else
printf '\033[8;%d;%dt' "$target_rows" "$target_cols" 2>/dev/null || true
fi
return 0
}
# 日志函数 - 同时输出到终端和日志文件
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
@ -68,6 +105,27 @@ log_cmd_output() {
echo "" >> "$LOG_FILE"
}
# 生成指定字节长度的十六进制串(2*bytes 个字符),优先 openssl,缺失时使用 python3 兜底
generate_hex_bytes() {
local bytes="$1"
if command -v openssl >/dev/null 2>&1; then
openssl rand -hex "$bytes"
return 0
fi
# mac 脚本已要求 python3,可作为兜底
python3 -c 'import os, sys; print(os.urandom(int(sys.argv[1])).hex())' "$bytes"
}
# 生成随机 UUID(小写),优先 uuidgen,缺失时使用 python3 兜底
generate_uuid() {
if command -v uuidgen >/dev/null 2>&1; then
uuidgen | tr '[:upper:]' '[:lower:]'
return 0
fi
# mac 脚本已要求 python3,可作为兜底
python3 -c 'import uuid; print(str(uuid.uuid4()))'
}
# 🚀 新增 Cursor 防掉试用Pro删除文件夹功能
remove_cursor_trial_folders() {
echo
@ -223,7 +281,8 @@ test_cursor_environment() {
issues+=("配置文件不存在: $config_path")
else
# 验证JSON格式
if python3 -c "import json; json.load(open('$config_path'))" 2>/dev/null; then
# 🔧 修复:避免把路径直接拼进 Python 源码字符串(路径包含引号等特殊字符时会导致语法错误)
if python3 -c 'import json, sys; json.load(open(sys.argv[1], "r", encoding="utf-8"))' "$config_path" 2>/dev/null; then
log_info "✅ [检查] 配置文件格式正确"
else
issues+=("配置文件格式错误或损坏")
@ -412,7 +471,8 @@ modify_machine_code_config() {
# 验证配置文件格式并显示结构
log_info "🔍 [验证] 检查配置文件格式..."
if ! python3 -c "import json; json.load(open('$config_path'))" 2>/dev/null; then
# 🔧 修复:避免把路径直接拼进 Python 源码字符串(路径包含引号等特殊字符时会导致语法错误)
if ! python3 -c 'import json, sys; json.load(open(sys.argv[1], "r", encoding="utf-8"))' "$config_path" 2>/dev/null; then
log_error "❌ [错误] 配置文件格式错误或损坏"
log_info "💡 [建议] 配置文件可能已损坏,建议选择'重置环境+修改机器码'选项"
return 1
@ -421,38 +481,49 @@ modify_machine_code_config() {
# 显示当前配置文件中的相关属性
log_info "📋 [当前配置] 检查现有的遥测属性:"
# 🔧 修复:避免把路径直接拼进 Python 源码字符串(路径包含引号等特殊字符时会导致语法错误)
python3 -c "
import json
try:
with open('$config_path', 'r', encoding='utf-8') as f:
config = json.load(f)
properties = ['telemetry.machineId', 'telemetry.macMachineId', 'telemetry.devDeviceId', 'telemetry.sqmId']
for prop in properties:
if prop in config:
value = config[prop]
display_value = value[:20] + '...' if len(value) > 20 else value
print(f' ✓ {prop} = {display_value}')
else:
print(f' - {prop} (不存在,将创建)')
except Exception as e:
print(f'Error reading config: {e}')
"
import json
import sys
try:
config_path = sys.argv[1]
with open(config_path, 'r', encoding='utf-8') as f:
config = json.load(f)
properties = ['telemetry.machineId', 'telemetry.macMachineId', 'telemetry.devDeviceId', 'telemetry.sqmId']
for prop in properties:
if prop in config:
value = config[prop]
display_value = value[:20] + '...' if len(value) > 20 else value
print(f' ✓ {prop} = {display_value}')
else:
print(f' - {prop} (不存在,将创建)')
except Exception as e:
print(f'Error reading config: {e}')
" "$config_path"
echo
# 显示操作进度
log_info "⏳ [进度] 1/5 - 生成新的设备标识符..."
# 生成新的ID
local MAC_MACHINE_ID=$(uuidgen | tr '[:upper:]' '[:lower:]')
local UUID=$(uuidgen | tr '[:upper:]' '[:lower:]')
local MACHINE_ID="auth0|user_$(openssl rand -hex 32)"
local SQM_ID="{$(uuidgen | tr '[:lower:]' '[:upper:]')}"
local MAC_MACHINE_ID=$(generate_uuid)
local UUID=$(generate_uuid)
local MACHINE_ID=$(generate_hex_bytes 32)
local SQM_ID="{$(generate_uuid | tr '[:lower:]' '[:upper:]')}"
# 🔧 新增: serviceMachineId (用于 storage.serviceMachineId)
local SERVICE_MACHINE_ID=$(uuidgen | tr '[:upper:]' '[:lower:]')
local SERVICE_MACHINE_ID=$(generate_uuid)
# 🔧 新增: firstSessionDate (重置首次会话日期)
local FIRST_SESSION_DATE=$(date -u +"%Y-%m-%dT%H:%M:%S.000Z")
CURSOR_ID_MACHINE_ID="$MACHINE_ID"
CURSOR_ID_MAC_MACHINE_ID="$MAC_MACHINE_ID"
CURSOR_ID_DEVICE_ID="$UUID"
CURSOR_ID_SQM_ID="$SQM_ID"
CURSOR_ID_FIRST_SESSION_DATE="$FIRST_SESSION_DATE"
CURSOR_ID_SESSION_ID=$(generate_uuid)
CURSOR_ID_MAC_ADDRESS="${CURSOR_ID_MAC_ADDRESS:-00:11:22:33:44:55}"
log_info "✅ [进度] 1/5 - 设备标识符生成完成"
log_info "⏳ [进度] 2/5 - 创建备份目录..."
@ -490,40 +561,49 @@ except Exception as e:
log_info "⏳ [进度] 4/5 - 更新配置文件..."
# 使用Python修改JSON配置(更可靠,安全方式)
# 🔧 修复:避免把路径/值直接拼进 Python 源码字符串(引号/反斜杠等特殊字符会导致语法错误或写入错误)
local python_result=$(python3 -c "
import json
import sys
try:
with open('$config_path', 'r', encoding='utf-8') as f:
config = json.load(f)
# 安全更新配置,确保属性存在
# 🔧 修复: 添加 storage.serviceMachineId 和 telemetry.firstSessionDate
properties_to_update = {
'telemetry.machineId': '$MACHINE_ID',
'telemetry.macMachineId': '$MAC_MACHINE_ID',
'telemetry.devDeviceId': '$UUID',
'telemetry.sqmId': '$SQM_ID',
'storage.serviceMachineId': '$SERVICE_MACHINE_ID',
'telemetry.firstSessionDate': '$FIRST_SESSION_DATE'
}
for key, value in properties_to_update.items():
if key in config:
print(f' ✓ 更新属性: {key}')
else:
print(f' + 添加属性: {key}')
config[key] = value
with open('$config_path', 'w', encoding='utf-8') as f:
json.dump(config, f, indent=2, ensure_ascii=False)
print('SUCCESS')
except Exception as e:
print(f'ERROR: {e}')
sys.exit(1)
" 2>&1)
import json
import sys
try:
config_path = sys.argv[1]
machine_id = sys.argv[2]
mac_machine_id = sys.argv[3]
dev_device_id = sys.argv[4]
sqm_id = sys.argv[5]
service_machine_id = sys.argv[6]
first_session_date = sys.argv[7]
with open(config_path, 'r', encoding='utf-8') as f:
config = json.load(f)
# 安全更新配置,确保属性存在
# 🔧 修复: 添加 storage.serviceMachineId 和 telemetry.firstSessionDate
properties_to_update = {
'telemetry.machineId': machine_id,
'telemetry.macMachineId': mac_machine_id,
'telemetry.devDeviceId': dev_device_id,
'telemetry.sqmId': sqm_id,
'storage.serviceMachineId': service_machine_id,
'telemetry.firstSessionDate': first_session_date
}
for key, value in properties_to_update.items():
if key in config:
print(f' ✓ 更新属性: {key}')
else:
print(f' + 添加属性: {key}')
config[key] = value
with open(config_path, 'w', encoding='utf-8') as f:
json.dump(config, f, indent=2, ensure_ascii=False)
print('SUCCESS')
except Exception as e:
print(f'ERROR: {e}')
sys.exit(1)
" "$config_path" "$MACHINE_ID" "$MAC_MACHINE_ID" "$UUID" "$SQM_ID" "$SERVICE_MACHINE_ID" "$FIRST_SESSION_DATE" 2>&1)
# 🔧 关键修复:正确解析Python执行结果
local python_exit_code=$?
@ -553,38 +633,48 @@ except Exception as e:
chmod 644 "$config_path" 2>/dev/null || true
# 验证修改是否成功
# 🔧 修复:避免把路径/值直接拼进 Python 源码字符串(引号/反斜杠等特殊字符会导致语法错误或写入错误)
local verification_result=$(python3 -c "
import json
try:
with open('$config_path', 'r', encoding='utf-8') as f:
config = json.load(f)
# 🔧 修复: 添加 storage.serviceMachineId 和 telemetry.firstSessionDate 验证
properties_to_check = {
'telemetry.machineId': '$MACHINE_ID',
'telemetry.macMachineId': '$MAC_MACHINE_ID',
'telemetry.devDeviceId': '$UUID',
'telemetry.sqmId': '$SQM_ID',
'storage.serviceMachineId': '$SERVICE_MACHINE_ID',
'telemetry.firstSessionDate': '$FIRST_SESSION_DATE'
}
verification_passed = True
for key, expected_value in properties_to_check.items():
actual_value = config.get(key)
if actual_value == expected_value:
print(f'✓ {key}: 验证通过')
else:
print(f'✗ {key}: 验证失败 (期望: {expected_value}, 实际: {actual_value})')
verification_passed = False
if verification_passed:
print('VERIFICATION_SUCCESS')
else:
print('VERIFICATION_FAILED')
except Exception as e:
print(f'VERIFICATION_ERROR: {e}')
" 2>&1)
import json
import sys
try:
config_path = sys.argv[1]
machine_id = sys.argv[2]
mac_machine_id = sys.argv[3]
dev_device_id = sys.argv[4]
sqm_id = sys.argv[5]
service_machine_id = sys.argv[6]
first_session_date = sys.argv[7]
with open(config_path, 'r', encoding='utf-8') as f:
config = json.load(f)
# 🔧 修复: 添加 storage.serviceMachineId 和 telemetry.firstSessionDate 验证
properties_to_check = {
'telemetry.machineId': machine_id,
'telemetry.macMachineId': mac_machine_id,
'telemetry.devDeviceId': dev_device_id,
'telemetry.sqmId': sqm_id,
'storage.serviceMachineId': service_machine_id,
'telemetry.firstSessionDate': first_session_date
}
verification_passed = True
for key, expected_value in properties_to_check.items():
actual_value = config.get(key)
if actual_value == expected_value:
print(f'✓ {key}: 验证通过')
else:
print(f'✗ {key}: 验证失败 (期望: {expected_value}, 实际: {actual_value})')
verification_passed = False
if verification_passed:
print('VERIFICATION_SUCCESS')
else:
print('VERIFICATION_FAILED')
except Exception as e:
print(f'VERIFICATION_ERROR: {e}')
" "$config_path" "$MACHINE_ID" "$MAC_MACHINE_ID" "$UUID" "$SQM_ID" "$SERVICE_MACHINE_ID" "$FIRST_SESSION_DATE" 2>&1)
# 检查验证结果(忽略其他输出,只关注最终结果)
if echo "$verification_result" | grep -q "VERIFICATION_SUCCESS"; then
@ -642,7 +732,7 @@ except Exception as e:
log_info "💾 [备份] .updaterId 文件已备份: $updater_id_backup"
fi
# 生成新的 updaterId(UUID格式)
local new_updater_id=$(uuidgen | tr '[:upper:]' '[:lower:]')
local new_updater_id=$(generate_uuid)
if echo -n "$new_updater_id" > "$updater_id_file_path" 2>/dev/null; then
log_info "✅ [updaterId] .updaterId 文件修改成功: $new_updater_id"
# 设置 .updaterId 文件为只读
@ -745,6 +835,16 @@ TARGET_HOME="$(get_user_home_dir "$TARGET_USER")"
STORAGE_FILE="$TARGET_HOME/Library/Application Support/Cursor/User/globalStorage/storage.json"
BACKUP_DIR="$TARGET_HOME/Library/Application Support/Cursor/User/globalStorage/backups"
# 共享ID(用于配置与JS注入保持一致)
CURSOR_ID_MACHINE_ID=""
CURSOR_ID_MACHINE_GUID=""
CURSOR_ID_MAC_MACHINE_ID=""
CURSOR_ID_DEVICE_ID=""
CURSOR_ID_SQM_ID=""
CURSOR_ID_FIRST_SESSION_DATE=""
CURSOR_ID_SESSION_ID=""
CURSOR_ID_MAC_ADDRESS="00:11:22:33:44:55"
# 定义 Cursor 应用程序路径
CURSOR_APP_PATH="/Applications/Cursor.app"
@ -1417,6 +1517,19 @@ _show_troubleshooting_info() {
echo
}
# 智能设备识别绕过(已移除 MAC 地址修改,仅保留 JS 注入)
run_device_bypass() {
log_info "🔧 [设备识别] 已禁用 MAC 地址修改,直接执行 JS 内核注入..."
if modify_cursor_js_files; then
log_info "✅ [JS] JS 内核注入完成"
return 0
fi
log_error "❌ [JS] JS 内核注入失败"
return 1
}
# 检查权限
check_permissions() {
if [ "$EUID" -ne 0 ]; then
@ -1510,13 +1623,24 @@ backup_config() {
fi
}
# 🔧 修改Cursor内核JS文件实现设备识别绕过(增强版 Hook 方案)
# 重新设置配置文件只读(避免权限修复覆盖)
protect_storage_file() {
if [ -f "$STORAGE_FILE" ]; then
if chmod 444 "$STORAGE_FILE" 2>/dev/null; then
log_info "🔒 [保护] 配置文件已重新设置为只读"
else
log_warn "⚠️ [保护] 配置文件只读设置失败"
fi
fi
}
# 🔧 修改Cursor内核JS文件实现设备识别绕过(增强版三重方案)
# 方案A: someValue占位符替换 - 稳定锚点,不依赖混淆后的函数名
# 方案B: 深度 Hook 注入 - 从底层拦截所有设备标识符生成
# 方案C: Module.prototype.require 劫持 - 拦截 child_process, crypto, os 等模块
# 方案B: b6 定点重写 - 机器码源函数直接返回固定值
# 方案C: Loader Stub + 外置 Hook - 主/共享进程仅加载外置 Hook 文件
modify_cursor_js_files() {
log_info "🔧 [内核修改] 开始修改Cursor内核JS文件实现设备识别绕过..."
log_info "💡 [方案] 使用增强版 Hook 方案:深度模块劫持 + someValue替换"
log_info "💡 [方案] 使用增强版三重方案:占位符替换 + b6 定点重写 + Loader Stub + 外置 Hook"
echo
# 检查Cursor应用是否存在
@ -1525,25 +1649,71 @@ modify_cursor_js_files() {
return 1
fi
# 生成新的设备标识符(使用固定格式确保兼容性)
local new_uuid=$(uuidgen | tr '[:upper:]' '[:lower:]')
local machine_id=$(openssl rand -hex 32)
local device_id=$(uuidgen | tr '[:upper:]' '[:lower:]')
local mac_machine_id=$(openssl rand -hex 32)
local sqm_id="{$(uuidgen | tr '[:lower:]' '[:upper:]')}"
local session_id=$(uuidgen | tr '[:upper:]' '[:lower:]')
local first_session_date=$(date -u +"%Y-%m-%dT%H:%M:%S.000Z")
local mac_address="00:11:22:33:44:55"
# 生成或复用设备标识符(优先使用配置中生成的值)
local machine_id="${CURSOR_ID_MACHINE_ID:-}"
local machine_guid="${CURSOR_ID_MACHINE_GUID:-}"
local device_id="${CURSOR_ID_DEVICE_ID:-}"
local mac_machine_id="${CURSOR_ID_MAC_MACHINE_ID:-}"
local sqm_id="${CURSOR_ID_SQM_ID:-}"
local session_id="${CURSOR_ID_SESSION_ID:-}"
local first_session_date="${CURSOR_ID_FIRST_SESSION_DATE:-}"
local mac_address="${CURSOR_ID_MAC_ADDRESS:-00:11:22:33:44:55}"
local ids_missing=false
if [ -z "$machine_id" ]; then
machine_id=$(generate_hex_bytes 32)
ids_missing=true
fi
if [ -z "$machine_guid" ]; then
machine_guid=$(generate_uuid)
ids_missing=true
fi
if [ -z "$device_id" ]; then
device_id=$(generate_uuid)
ids_missing=true
fi
if [ -z "$mac_machine_id" ]; then
mac_machine_id=$(generate_hex_bytes 32)
ids_missing=true
fi
if [ -z "$sqm_id" ]; then
sqm_id="{$(generate_uuid | tr '[:lower:]' '[:upper:]')}"
ids_missing=true
fi
if [ -z "$session_id" ]; then
session_id=$(generate_uuid)
ids_missing=true
fi
if [ -z "$first_session_date" ]; then
first_session_date=$(date -u +"%Y-%m-%dT%H:%M:%S.000Z")
ids_missing=true
fi
if [ "$ids_missing" = true ]; then
log_warn "部分 ID 未就绪,已生成新值用于 JS 注入"
else
log_info "已使用配置中的设备标识符进行 JS 注入"
fi
log_info "🔑 [生成] 已生成新的设备标识符"
CURSOR_ID_MACHINE_ID="$machine_id"
CURSOR_ID_MACHINE_GUID="$machine_guid"
CURSOR_ID_DEVICE_ID="$device_id"
CURSOR_ID_MAC_MACHINE_ID="$mac_machine_id"
CURSOR_ID_SQM_ID="$sqm_id"
CURSOR_ID_SESSION_ID="$session_id"
CURSOR_ID_FIRST_SESSION_DATE="$first_session_date"
CURSOR_ID_MAC_ADDRESS="$mac_address"
log_info "🔑 [准备] 设备标识符已就绪"
log_info " machineId: ${machine_id:0:16}..."
log_info " machineGuid: ${machine_guid:0:16}..."
log_info " deviceId: ${device_id:0:16}..."
log_info " macMachineId: ${mac_machine_id:0:16}..."
log_info " sqmId: $sqm_id"
# 保存 ID 配置到用户目录(供 Hook 读取)
# 每次执行都删除旧配置并重新生成,确保获得新的设备标识符
local ids_config_path="$HOME/.cursor_ids.json"
local ids_config_path="$TARGET_HOME/.cursor_ids.json"
if [ -f "$ids_config_path" ]; then
rm -f "$ids_config_path"
log_info "🗑️ [清理] 已删除旧的 ID 配置文件"
@ -1551,18 +1721,93 @@ modify_cursor_js_files() {
cat > "$ids_config_path" << EOF
{
"machineId": "$machine_id",
"machineGuid": "$machine_guid",
"macMachineId": "$mac_machine_id",
"devDeviceId": "$device_id",
"sqmId": "$sqm_id",
"macAddress": "$mac_address",
"sessionId": "$session_id",
"firstSessionDate": "$first_session_date",
"createdAt": "$first_session_date"
}
EOF
log_info "💾 [保存] 新的 ID 配置已保存到: $ids_config_path"
# 目标JS文件列表(只修改 main.js)
# 部署外置 Hook 文件(供 Loader Stub 加载,支持多域名备用下载)
local hook_target_path="$TARGET_HOME/.cursor_hook.js"
local script_dir
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
local hook_source_path="$script_dir/../hook/cursor_hook.js"
local hook_download_urls=(
"https://wget.la/https://raw.githubusercontent.com/yuaotian/go-cursor-help/refs/heads/master/scripts/hook/cursor_hook.js"
"https://down.npee.cn/?https://raw.githubusercontent.com/yuaotian/go-cursor-help/refs/heads/master/scripts/hook/cursor_hook.js"
"https://xget.xi-xu.me/gh/yuaotian/go-cursor-help/refs/heads/master/scripts/hook/cursor_hook.js"
"https://gh-proxy.com/https://raw.githubusercontent.com/yuaotian/go-cursor-help/refs/heads/master/scripts/hook/cursor_hook.js"
"https://gh.chjina.com/https://raw.githubusercontent.com/yuaotian/go-cursor-help/refs/heads/master/scripts/hook/cursor_hook.js"
)
# 支持通过环境变量覆盖下载节点(逗号分隔)
if [ -n "$CURSOR_HOOK_DOWNLOAD_URLS" ]; then
IFS=',' read -r -a hook_download_urls <<< "$CURSOR_HOOK_DOWNLOAD_URLS"
log_info "ℹ️ [Hook] 检测到自定义下载节点列表,将优先使用"
fi
if [ -f "$hook_source_path" ]; then
if cp "$hook_source_path" "$hook_target_path"; then
chown "$TARGET_USER":"$(id -g -n "$TARGET_USER")" "$hook_target_path" 2>/dev/null || true
log_info "✅ [Hook] 外置 Hook 已部署: $hook_target_path"
else
log_warn "⚠️ [Hook] 本地 Hook 复制失败,尝试在线下载..."
fi
fi
if [ ! -f "$hook_target_path" ]; then
log_info "ℹ️ [Hook] 正在下载外置 Hook,用于设备标识拦截..."
local hook_downloaded=false
local total_urls=${#hook_download_urls[@]}
if [ "$total_urls" -eq 0 ]; then
log_warn "⚠️ [Hook] 下载节点列表为空,跳过在线下载"
elif command -v curl >/dev/null 2>&1; then
local index=0
for url in "${hook_download_urls[@]}"; do
index=$((index + 1))
log_info "⏳ [Hook] ($index/$total_urls) 当前下载节点: $url"
if curl -fL --progress-bar "$url" -o "$hook_target_path"; then
chown "$TARGET_USER":"$(id -g -n "$TARGET_USER")" "$hook_target_path" 2>/dev/null || true
log_info "✅ [Hook] 外置 Hook 已在线下载: $hook_target_path"
hook_downloaded=true
break
else
rm -f "$hook_target_path"
log_warn "⚠️ [Hook] 外置 Hook 下载失败: $url"
fi
done
elif command -v wget >/dev/null 2>&1; then
local index=0
for url in "${hook_download_urls[@]}"; do
index=$((index + 1))
log_info "⏳ [Hook] ($index/$total_urls) 当前下载节点: $url"
if wget --progress=bar:force -O "$hook_target_path" "$url"; then
chown "$TARGET_USER":"$(id -g -n "$TARGET_USER")" "$hook_target_path" 2>/dev/null || true
log_info "✅ [Hook] 外置 Hook 已在线下载: $hook_target_path"
hook_downloaded=true
break
else
rm -f "$hook_target_path"
log_warn "⚠️ [Hook] 外置 Hook 下载失败: $url"
fi
done
else
log_warn "⚠️ [Hook] 未检测到 curl/wget,无法在线下载 Hook"
fi
if [ "$hook_downloaded" != true ] && [ ! -f "$hook_target_path" ]; then
log_warn "⚠️ [Hook] 外置 Hook 全部下载失败"
fi
fi
# 目标JS文件列表(main + shared process)
local js_files=(
"$CURSOR_APP_PATH/Contents/Resources/app/out/main.js"
"$CURSOR_APP_PATH/Contents/Resources/app/out/vs/code/electron-utility/sharedProcess/sharedProcessMain.js"
)
local modified_count=0
@ -1690,106 +1935,37 @@ EOF
replaced=true
fi
# ========== 方法B: 增强版深度 Hook 注入 ==========
# 创建注入代码
local inject_code='// ========== Cursor Hook 注入开始 ==========
# ========== 方法C: Loader Stub 注入 ==========
local inject_code='// ========== Cursor Hook Loader 开始 ==========
;(async function(){/*__cursor_patched__*/
"use strict";
if(globalThis.__cursor_patched__)return;
// 兼容 ESM:确保可用的 require(部分版本 main.js 可能是纯 ESM,不保证存在 require)
var __require__=typeof require==="function"?require:null;
if(!__require__){
try{
var __m__=await import("module");
__require__=__m__.createRequire(import.meta.url);
}catch(e){
// 无法获得 require 时直接退出,避免影响主进程启动
return;
}
}
globalThis.__cursor_patched__=true;
var __ids__={
machineId:"'"$machine_id"'",
macMachineId:"'"$mac_machine_id"'",
devDeviceId:"'"$device_id"'",
sqmId:"'"$sqm_id"'",
macAddress:"'"$mac_address"'"
};
globalThis.__cursor_ids__=__ids__;
var Module=__require__("module");
var _origReq=Module.prototype.require;
var _hooked=new Map();
Module.prototype.require=function(id){
var result=_origReq.apply(this,arguments);
if(_hooked.has(id))return _hooked.get(id);
var hooked=result;
if(id==="child_process"){
var _origExecSync=result.execSync;
result.execSync=function(cmd,opts){
var cmdStr=String(cmd).toLowerCase();
if(cmdStr.includes("ioreg")&&cmdStr.includes("ioplatformexpertdevice")){
return Buffer.from("\"IOPlatformUUID\" = \""+__ids__.machineId.substring(0,36).toUpperCase()+"\"");
}
if(cmdStr.includes("machine-id")||cmdStr.includes("hostname")){
return Buffer.from(__ids__.machineId.substring(0,32));
}
return _origExecSync.apply(this,arguments);
};
hooked=result;
}
else if(id==="os"){
result.networkInterfaces=function(){
return{"en0":[{address:"192.168.1.100",netmask:"255.255.255.0",family:"IPv4",mac:__ids__.macAddress,internal:false}]};
};
hooked=result;
}
else if(id==="crypto"){
var _origCreateHash=result.createHash;
var _origRandomUUID=result.randomUUID;
result.createHash=function(algo){
var hash=_origCreateHash.apply(this,arguments);
if(algo.toLowerCase()==="sha256"){
var _origDigest=hash.digest.bind(hash);
var _origUpdate=hash.update.bind(hash);
var inputData="";
hash.update=function(data,enc){inputData+=String(data);return _origUpdate(data,enc);};
hash.digest=function(enc){
if(inputData.includes("IOPlatformUUID")||(inputData.length>=32&&inputData.length<=40)){
return enc==="hex"?__ids__.machineId:Buffer.from(__ids__.machineId,"hex");
}
return _origDigest(enc);
};
}
return hash;
};
if(_origRandomUUID){
var uuidCount=0;
result.randomUUID=function(){
uuidCount++;
if(uuidCount<=2)return __ids__.devDeviceId;
return _origRandomUUID.apply(this,arguments);
};
if(globalThis.__cursor_hook_loaded__)return;
globalThis.__cursor_hook_loaded__=true;
try{
// 兼容 ESM/CJS:避免使用 import.meta(仅 ESM 支持),统一用动态 import 加载 Hook
var fsMod=await import("fs");
var pathMod=await import("path");
var osMod=await import("os");
var urlMod=await import("url");
var fs=fsMod&&(fsMod.default||fsMod);
var path=pathMod&&(pathMod.default||pathMod);
var os=osMod&&(osMod.default||osMod);
var url=urlMod&&(urlMod.default||urlMod);
if(fs&&path&&os&&url&&typeof url.pathToFileURL==="function"){
var hookPath=path.join(os.homedir(), ".cursor_hook.js");
if(typeof fs.existsSync==="function"&&fs.existsSync(hookPath)){
await import(url.pathToFileURL(hookPath).href);
}
hooked=result;
}
else if(id==="@vscode/deviceid"){
hooked={...result,getDeviceId:async function(){return __ids__.devDeviceId;}};
}
if(hooked!==result)_hooked.set(id,hooked);
return hooked;
};
console.log("[Cursor ID Modifier] 增强版 Hook 已激活 - 煎饼果子(86) 公众号【煎饼果子卷AI】");
}catch(e){
// 失败静默,避免影响启动
}
})();
// ========== Cursor Hook 注入结束 ==========
// ========== Cursor Hook Loader 结束 ==========
'
@ -1807,32 +1983,36 @@ console.log("[Cursor ID Modifier] 增强版 Hook 已激活 - 煎饼果子(86)
{ print }
' "$file" > "${file}.new"
mv "${file}.new" "$file"
log_info " ✓ [方案B] 增强版 Hook 代码已注入(版权声明后)"
log_info " ✓ [方案C] Loader Stub 已注入(版权声明后)"
else
# 注入到文件开头
echo "$inject_code" > "${file}.new"
cat "$file" >> "${file}.new"
mv "${file}.new" "$file"
log_info " ✓ [方案B] 增强版 Hook 代码已注入(文件开头)"
log_info " ✓ [方案C] Loader Stub 已注入(文件开头)"
fi
# 清理临时文件
rm -f "${file}.tmp"
local summary="Hook加载器"
if [ "$replaced" = true ]; then
log_info "✅ [成功] 增强版混合方案修改成功(someValue替换 + 深度Hook)"
else
log_info "✅ [成功] 增强版 Hook 修改成功"
summary="someValue替换 + $summary"
fi
if [ "$b6_patched" = true ]; then
summary="b6定点重写 + $summary"
fi
log_info "✅ [成功] 增强版方案修改成功($summary"
((modified_count++))
done
if [ $modified_count -gt 0 ]; then
log_info "🎉 [完成] 成功修改 $modified_count 个JS文件"
log_info "💾 [备份] 原始文件备份位置: $backup_dir"
log_info "💡 [说明] 使用增强版 Hook 方案:"
log_info "💡 [说明] 使用增强版三重方案:"
log_info " • 方案A: someValue占位符替换(稳定锚点,跨版本兼容)"
log_info " • 方案B: 深度模块劫持(child_process, crypto, os, @vscode/*)"
log_info " • 方案B: b6 定点重写(机器码源函数)"
log_info " • 方案C: Loader Stub + 外置 Hook(cursor_hook.js)"
log_info "📁 [配置] ID 配置文件: $ids_config_path"
return 0
else
@ -2290,10 +2470,10 @@ if (typeof window !== 'undefined') {
console.log('Cursor全局设备标识符拦截已激活 - ES模块版本');
"
# 将代码注入到文件开头
local new_uuid=$(uuidgen | tr '[:upper:]' '[:lower:]')
local machine_id="auth0|user_$(openssl rand -hex 16)"
local device_id=$(uuidgen | tr '[:upper:]' '[:lower:]')
local mac_machine_id=$(openssl rand -hex 32)
local new_uuid=$(generate_uuid)
local machine_id="auth0|user_$(generate_hex_bytes 16)"
local device_id=$(generate_uuid)
local mac_machine_id=$(generate_hex_bytes 32)
inject_universal_code=${inject_universal_code//\$\{new_uuid\}/$new_uuid}
inject_universal_code=${inject_universal_code//\$\{machine_id\}/$machine_id}
@ -2530,7 +2710,8 @@ restore_feature() {
# 解决"应用已损坏,无法打开"问题
fix_damaged_app() {
log_info "正在修复"应用已损坏"问题..."
# 🔧 修复:字符串内双引号需转义,避免脚本解析中断
log_info "正在修复\"应用已损坏\"问题..."
# 检查Cursor应用是否存在
if [ ! -d "$CURSOR_APP_PATH" ]; then
@ -2558,7 +2739,7 @@ fix_damaged_app() {
log_info "修复完成!请尝试重新打开Cursor应用"
echo
echo -e "${YELLOW}如果仍然无法打开,您可以尝试以下方法:${NC}"
echo "1. 在系统偏好设置->安全性与隐私中,点击"仍要打开"按钮"
echo "1. 在系统偏好设置->安全性与隐私中,点击\"仍要打开\"按钮"
echo "2. 暂时关闭Gatekeeper(不建议): sudo spctl --master-disable"
echo "3. 重新下载安装Cursor应用"
echo
@ -2642,6 +2823,9 @@ select_menu_option() {
# 主函数
main() {
# 在显示菜单/流程说明前调整终端窗口大小;不支持则静默忽略
try_resize_terminal_window
# 初始化日志文件
initialize_log
log_info "脚本启动..."
@ -2655,7 +2839,8 @@ main() {
log_info "当前用户: $CURRENT_USER"
log_cmd_output "sw_vers" "macOS 版本信息"
log_cmd_output "which codesign" "codesign 路径"
log_cmd_output "ls -ld "$CURSOR_APP_PATH"" "Cursor 应用信息"
# 修复:统一引号并显式转义,避免引号嵌套导致脚本解析错误
log_cmd_output "ls -ld \"$CURSOR_APP_PATH\"" "Cursor 应用信息"
# 新增环境检查
if [[ $(uname) != "Darwin" ]]; then
@ -2679,7 +2864,7 @@ main() {
echo -e "${YELLOW}🤝 一起交流更多Cursor技巧和AI知识(脚本免费、关注公众号加群有更多技巧和大佬) ${NC}"
echo -e "${BLUE}================================${NC}"
echo
echo -e "${YELLOW}⚡ [小小广告] Cursor官网正规成品号:Pro¥65 | Pro+¥265 | Ultra¥888 独享账号/7天质保,WeChat:JavaRookie666 ${NC}"
echo -e "${YELLOW}⚡ [小小广告] Cursor官网正规成品号:Pro¥65 | Pro+¥265 | Ultra¥888 独享账号| ¥488 Team绝版次数号1000次+20刀额度 | 全部7天质保 | ,WeChat:JavaRookie666 ${NC}"
echo
echo -e "${YELLOW}💡 [重要提示]${NC} 本工具采用分阶段执行策略,既能彻底清理又能修改机器码。"
echo -e "${YELLOW}💡 [重要提示]${NC} 本工具免费,如果对您有帮助,请关注公众号【煎饼果子卷AI】"
@ -2692,6 +2877,7 @@ main() {
echo
echo -e "${BLUE} 1️⃣ 仅修改机器码${NC}"
echo -e "${YELLOW} • 仅执行机器码修改功能${NC}"
echo -e "${YELLOW} • 同步执行 JS 内核注入${NC}"
echo -e "${YELLOW} • 跳过文件夹删除/环境重置步骤${NC}"
echo -e "${YELLOW} • 保留现有Cursor配置和数据${NC}"
echo
@ -2733,7 +2919,8 @@ main() {
echo -e "${BLUE} 1️⃣ 检测Cursor配置文件${NC}"
echo -e "${BLUE} 2️⃣ 备份现有配置文件${NC}"
echo -e "${BLUE} 3️⃣ 修改机器码配置${NC}"
echo -e "${BLUE} 4️⃣ 显示操作完成信息${NC}"
echo -e "${BLUE} 4️⃣ 执行 JS 内核注入${NC}"
echo -e "${BLUE} 5️⃣ 显示操作完成信息${NC}"
echo
echo -e "${YELLOW}⚠️ [注意事项]${NC}"
echo -e "${YELLOW} • 不会删除任何文件夹或重置环境${NC}"
@ -2752,7 +2939,7 @@ main() {
echo -e "${BLUE} 5️⃣ 等待配置文件生成完成(最多45秒)${NC}"
echo -e "${BLUE} 6️⃣ 关闭Cursor进程${NC}"
echo -e "${BLUE} 7️⃣ 修改新生成的机器码配置文件${NC}"
echo -e "${BLUE} 8️⃣ 智能设备识别绕过(MAC地址修改或JS内核修改${NC}"
echo -e "${BLUE} 8️⃣ 智能设备识别绕过(仅 JS 内核注入${NC}"
echo -e "${BLUE} 9️⃣ 禁用自动更新${NC}"
echo -e "${BLUE} 🔟 显示操作完成统计信息${NC}"
echo
@ -2762,7 +2949,7 @@ main() {
echo -e "${YELLOW} • 执行完成后需要重新启动Cursor${NC}"
echo -e "${YELLOW} • 原配置文件会自动备份到backups文件夹${NC}"
echo -e "${YELLOW} • 需要Python3环境来处理JSON配置文件${NC}"
echo -e "${YELLOW}MAC地址修改是临时的,重启后恢复${NC}"
echo -e "${YELLOW}已移除 MAC 地址修改,仅保留 JS 注入方案${NC}"
fi
echo
@ -2800,14 +2987,18 @@ main() {
echo
log_info "🎉 [完成] 机器码修改完成!"
log_info "💡 [提示] 现在可以启动Cursor使用新的机器码配置"
echo
log_info "🔧 [设备识别] 正在执行 JS 内核注入..."
if modify_cursor_js_files; then
log_info "✅ [设备识别] JS 内核注入完成"
else
log_warn "⚠️ [设备识别] JS 内核注入失败,请检查日志"
fi
else
echo
log_error "❌ [失败] 机器码修改失败!"
log_info "💡 [建议] 请尝试'重置环境+修改机器码'选项"
fi
# 🚫 禁用自动更新(仅修改模式也需要)
echo
log_info "🚫 [禁用更新] 正在禁用Cursor自动更新..."
@ -2857,10 +3048,13 @@ main() {
# 🛠️ 修改机器码配置
modify_machine_code_config
# 🔧 智能设备识别绕过(MAC地址修改或JS内核修改
# 🔧 智能设备识别绕过(仅 JS 内核注入
echo
log_info "🔧 [设备识别] 开始智能设备识别绕过..."
log_info "💡 [说明] 将根据系统环境自动选择最佳方案(MAC地址修改或JS内核修改)"
log_info "💡 [说明] 已移除 MAC 地址修改,直接使用 JS 内核注入"
if ! run_device_bypass; then
log_warn "⚠️ [设备识别] 智能设备识别绕过未完全成功,请查看日志"
fi
# 🔧 关键修复:修复应用签名问题(防止"应用已损坏"错误)
@ -2889,7 +3083,7 @@ main() {
# 📱 显示公众号信息
echo -e "${GREEN}================================${NC}"
echo -e "${YELLOW}📱 关注公众号【煎饼果子卷AI】一起交流更多Cursor技巧和AI知识(脚本免费、关注公众号加群有更多技巧和大佬) ${NC}"
echo -e "${YELLOW}⚡ [小小广告] Cursor官网正规成品号:Pro¥65 | Pro+¥265 | Ultra¥888 独享账号/7天质保,WeChat:JavaRookie666 ${NC}"
echo -e "${YELLOW}⚡ [小小广告] Cursor官网正规成品号:Pro¥65 | Pro+¥265 | Ultra¥888 独享账号| ¥488 Team绝版次数号1000次+20刀额度 | 全部7天质保 | ,WeChat:JavaRookie666 ${NC}"
echo -e "${GREEN}================================${NC}"
echo
log_info "🚀 [提示] 现在可以重新启动 Cursor 尝试使用了!"
@ -2909,6 +3103,7 @@ main() {
echo
log_info "🛡️ [最终权限修复] 执行脚本完成前的最终权限修复..."
ensure_cursor_directory_permissions
protect_storage_file
# 🎉 脚本执行完成
log_info "🎉 [完成] 所有操作已完成!"
@ -2936,4 +3131,3 @@ main() {
# 执行主函数
main

1238
scripts/run/cursor_win_id_modifier.ps1
File diff suppressed because it is too large
View File

Loading…
Cancel
Save