mirror of
https://github.com/yuaotian/go-cursor-help.git
synced 2026-03-07 14:24:37 +00:00
refactor(scripts): 优化跨平台ID修改脚本的ESM兼容性
- 移除Linux和macOS脚本中的增强权限标识描述 - 改进IIFE注入代码以支持ESM环境降级处理 - 删除macOS脚本中冗余的系统MAC地址修改函数 - 清理相关日志和结果输出中对MAC地址修改的引用 - 统一各平台脚本的设备识别绕过逻辑描述
This commit is contained in:
@@ -783,9 +783,9 @@ modify_cursor_js_files() {
|
||||
fi
|
||||
|
||||
# ========== 方法B: IIFE运行时劫持(crypto.randomUUID) ==========
|
||||
# 使用IIFE包装,兼容webpack打包的bundle文件,无需import语法
|
||||
# 劫持crypto.randomUUID从源头拦截所有UUID生成
|
||||
local inject_code=";(function(){/*__cursor_patched__*/var _cr=require('crypto'),_orig=_cr.randomUUID;_cr.randomUUID=function(){return'${new_uuid}';};if(typeof globalThis!=='undefined'){globalThis.__cursor_machine_id='${machine_id}';globalThis.__cursor_mac_machine_id='${mac_machine_id}';globalThis.__cursor_dev_device_id='${device_id}';globalThis.__cursor_sqm_id='${sqm_id}';}try{var _os=require('os'),_origNI=_os.networkInterfaces;_os.networkInterfaces=function(){var r=_origNI.call(_os);for(var k in r){if(r[k]){for(var i=0;i<r[k].length;i++){if(r[k][i].mac){r[k][i].mac='00:00:00:00:00:00';}}}}return r;};}catch(e){}console.log('[Cursor ID Modifier] 设备标识符已劫持 - 煎饼果子(86) 公众号【煎饼果子卷AI】');})();"
|
||||
# 使用IIFE包装,兼容webpack打包的bundle文件
|
||||
# 在支持 require 的环境中劫持 crypto.randomUUID;在 ESM 环境中安全降级为 no-op,避免 require 抛错
|
||||
local inject_code=";(function(){/*__cursor_patched__*/var _cr=null,_os=null;if(typeof require!=='undefined'){try{_cr=require('crypto');_os=require('os');}catch(e){}}if(_cr&&_cr.randomUUID){var _orig=_cr.randomUUID;_cr.randomUUID=function(){return'${new_uuid}';};}if(typeof globalThis!=='undefined'){globalThis.__cursor_machine_id='${machine_id}';globalThis.__cursor_mac_machine_id='${mac_machine_id}';globalThis.__cursor_dev_device_id='${device_id}';globalThis.__cursor_sqm_id='${sqm_id}';}if(_os&&_os.networkInterfaces){try{var _origNI=_os.networkInterfaces;_os.networkInterfaces=function(){var r=_origNI.call(_os);for(var k in r){if(r[k]){for(var i=0;i<r[k].length;i++){if(r[k][i].mac){r[k][i].mac='00:00:00:00:00:00';}}}}return r;};}catch(e){}}console.log('[Cursor ID Modifier] 设备标识符已劫持 - 煎饼果子(86) 公众号【煎饼果子卷AI】');})();"
|
||||
|
||||
# 注入代码到文件开头
|
||||
local temp_file=$(mktemp)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
# ========================================
|
||||
# Cursor macOS 机器码修改脚本 (增强权限修复版)
|
||||
# Cursor macOS 机器码修改脚本
|
||||
# ========================================
|
||||
#
|
||||
# 🔧 权限修复增强:
|
||||
@@ -1555,9 +1555,9 @@ modify_cursor_js_files() {
|
||||
fi
|
||||
|
||||
# ========== 方法B: IIFE运行时劫持(crypto.randomUUID) ==========
|
||||
# 使用IIFE包装,兼容webpack打包的bundle文件,无需import语法
|
||||
# 劫持crypto.randomUUID从源头拦截所有UUID生成
|
||||
local inject_code=";(function(){/*__cursor_patched__*/var _cr=require('crypto'),_orig=_cr.randomUUID;_cr.randomUUID=function(){return'${new_uuid}';};if(typeof globalThis!=='undefined'){globalThis.__cursor_machine_id='${machine_id}';globalThis.__cursor_mac_machine_id='${mac_machine_id}';globalThis.__cursor_dev_device_id='${device_id}';globalThis.__cursor_sqm_id='${sqm_id}';}try{var _os=require('os'),_origNI=_os.networkInterfaces;_os.networkInterfaces=function(){var r=_origNI.call(_os);for(var k in r){if(r[k]){for(var i=0;i<r[k].length;i++){if(r[k][i].mac){r[k][i].mac='00:00:00:00:00:00';}}}}return r;};}catch(e){}console.log('[Cursor ID Modifier] 设备标识符已劫持 - 煎饼果子(86) 公众号【煎饼果子卷AI】');})();"
|
||||
# 使用IIFE包装,兼容webpack打包的bundle文件
|
||||
# 在支持 require 的环境中劫持 crypto.randomUUID;在 ESM 环境中安全降级为 no-op,避免 require 抛错
|
||||
local inject_code=";(function(){/*__cursor_patched__*/var _cr=null,_os=null;if(typeof require!=='undefined'){try{_cr=require('crypto');_os=require('os');}catch(e){}}if(_cr&&_cr.randomUUID){var _orig=_cr.randomUUID;_cr.randomUUID=function(){return'${new_uuid}';};}if(typeof globalThis!=='undefined'){globalThis.__cursor_machine_id='${machine_id}';globalThis.__cursor_mac_machine_id='${mac_machine_id}';globalThis.__cursor_dev_device_id='${device_id}';globalThis.__cursor_sqm_id='${sqm_id}';}if(_os&&_os.networkInterfaces){try{var _origNI=_os.networkInterfaces;_os.networkInterfaces=function(){var r=_origNI.call(_os);for(var k in r){if(r[k]){for(var i=0;i<r[k].length;i++){if(r[k][i].mac){r[k][i].mac='00:00:00:00:00:00';}}}}return r;};}catch(e){}}console.log('[Cursor ID Modifier] 设备标识符已劫持 - 煎饼果子(86) 公众号【煎饼果子卷AI】');})();"
|
||||
|
||||
# 注入代码到文件开头
|
||||
echo "$inject_code" > "${file}.new"
|
||||
@@ -1590,203 +1590,6 @@ modify_cursor_js_files() {
|
||||
fi
|
||||
}
|
||||
|
||||
# 增强的系统MAC地址修改函数,支持多种兼容性检测和修改方法
|
||||
change_system_mac_address() {
|
||||
log_info "开始尝试修改所有活动的 Wi-Fi/Ethernet 接口的系统 MAC 地址..."
|
||||
echo
|
||||
|
||||
# 环境兼容性预检查
|
||||
detect_macos_environment
|
||||
local env_compatible=$?
|
||||
|
||||
if [[ $env_compatible -ne 0 ]]; then
|
||||
echo -e "${YELLOW}⚠️ [兼容性警告]${NC} 检测到可能存在MAC地址修改限制的环境:"
|
||||
echo -e "${YELLOW} • macOS版本: $MACOS_VERSION${NC}"
|
||||
echo -e "${YELLOW} • 硬件类型: $HARDWARE_TYPE${NC}"
|
||||
echo -e "${YELLOW} • SIP状态: $SIP_STATUS${NC}"
|
||||
echo
|
||||
echo -e "${BLUE}💡 [建议]${NC} 在此环境中,传统的ifconfig方法可能失败。"
|
||||
echo -e "${BLUE} 脚本将自动尝试多种兼容性方法,包括第三方工具。${NC}"
|
||||
echo
|
||||
|
||||
# 检查第三方工具可用性
|
||||
local tools_available=false
|
||||
if command -v spoof-mac >/dev/null 2>&1; then
|
||||
echo -e "${GREEN}✅ 检测到 spoof-mac 工具${NC}"
|
||||
tools_available=true
|
||||
fi
|
||||
if command -v macchanger >/dev/null 2>&1; then
|
||||
echo -e "${GREEN}✅ 检测到 macchanger 工具${NC}"
|
||||
tools_available=true
|
||||
fi
|
||||
|
||||
if [[ $tools_available == false ]]; then
|
||||
echo -e "${YELLOW}⚠️ 未检测到第三方MAC修改工具${NC}"
|
||||
echo -e "${BLUE}💡 建议安装: brew install spoof-mac 或 brew install macchanger${NC}"
|
||||
echo
|
||||
|
||||
# 🔧 Apple Silicon智能替代方案
|
||||
if [[ "$HARDWARE_TYPE" == "Apple Silicon" ]]; then
|
||||
echo -e "${BLUE}🔧 [智能方案]${NC} 检测到Apple Silicon环境,MAC地址修改受硬件限制"
|
||||
echo -e "${BLUE}💡 [自动切换]${NC} 将自动使用JS内核修改实现更直接的设备识别绕过"
|
||||
echo
|
||||
|
||||
log_info "🔄 [智能切换] 自动切换到JS内核修改方案..."
|
||||
if modify_cursor_js_files; then
|
||||
log_info "✅ [成功] JS内核修改完成,已实现设备识别绕过"
|
||||
log_info "💡 [说明] 此方案比MAC地址修改更直接有效,完美适配Apple Silicon"
|
||||
return 0
|
||||
else
|
||||
log_warn "⚠️ [警告] JS内核修改失败,将继续尝试MAC地址修改"
|
||||
fi
|
||||
fi
|
||||
|
||||
# 非Apple Silicon环境或JS修改失败时,询问是否继续MAC地址修改
|
||||
read -p "是否继续尝试MAC地址修改?(y/n): " continue_choice
|
||||
if [[ ! "$continue_choice" =~ ^(y|yes)$ ]]; then
|
||||
log_info "用户选择跳过MAC地址修改"
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
echo -e "${YELLOW}[警告]${NC} 即将尝试修改您所有活动的 Wi-Fi 或以太网接口的 MAC 地址。"
|
||||
echo -e "${YELLOW}[警告]${NC} 此更改是 ${RED}临时${NC} 的,将在您重启 Mac 后恢复为原始地址。"
|
||||
echo -e "${YELLOW}[警告]${NC} 修改 MAC 地址可能会导致临时的网络中断或连接问题。"
|
||||
echo -e "${YELLOW}[警告]${NC} 请确保您了解相关风险。此操作主要影响本地网络识别,而非互联网身份。"
|
||||
echo
|
||||
|
||||
local active_interfaces=()
|
||||
local potential_interfaces=()
|
||||
local default_route_interface=""
|
||||
|
||||
# 0. 尝试获取默认路由接口,作为后备
|
||||
log_info "尝试通过路由表获取默认网络接口 (用于后备)..."
|
||||
default_route_interface=$(route get default | grep 'interface:' | awk '{print $2}')
|
||||
if [ -n "$default_route_interface" ]; then
|
||||
log_info "检测到默认路由接口 (后备): $default_route_interface"
|
||||
else
|
||||
log_warn "未能通过路由表获取默认接口 (后备)。"
|
||||
fi
|
||||
|
||||
# 1. 获取所有 Wi-Fi 和 Ethernet 接口名称
|
||||
log_info "正在检测 Wi-Fi 和 Ethernet 接口..."
|
||||
while IFS= read -r line; do
|
||||
if [[ $line == "Hardware Port: Wi-Fi" || $line == "Hardware Port: Ethernet" ]]; then
|
||||
read -r dev_line # 读取下一行 Device: enX
|
||||
device=$(echo "$dev_line" | awk '{print $2}')
|
||||
if [ -n "$device" ]; then
|
||||
log_debug "检测到潜在接口: $device ($line)"
|
||||
potential_interfaces+=("$device")
|
||||
fi
|
||||
fi
|
||||
done < <(networksetup -listallhardwareports)
|
||||
|
||||
if [ ${#potential_interfaces[@]} -eq 0 ]; then
|
||||
log_warn "未能通过 networksetup 检测到任何 Wi-Fi 或 Ethernet 接口。"
|
||||
# 检查是否有路由表接口作为后备
|
||||
if [ -n "$default_route_interface" ]; then
|
||||
log_warn "将使用路由表检测到的接口 '$default_route_interface' 作为后备。"
|
||||
potential_interfaces+=("$default_route_interface")
|
||||
else
|
||||
log_warn "路由表也未能提供后备接口。"
|
||||
# 在此情况下,potential_interfaces 仍为空,后续逻辑会处理
|
||||
fi
|
||||
fi
|
||||
|
||||
# 2. 检查哪些接口是活动的
|
||||
log_info "正在检查接口活动状态..."
|
||||
for interface_name in "${potential_interfaces[@]}"; do
|
||||
log_debug "检查接口 '$interface_name' 状态..."
|
||||
if ifconfig "$interface_name" 2>/dev/null | grep -q "status: active"; then
|
||||
log_info "发现活动接口: $interface_name"
|
||||
active_interfaces+=("$interface_name")
|
||||
else
|
||||
log_debug "接口 '$interface_name' 非活动或不存在。"
|
||||
fi
|
||||
done
|
||||
|
||||
# 3. 检查是否找到活动接口
|
||||
if [ ${#active_interfaces[@]} -eq 0 ]; then
|
||||
log_warn "未找到任何活动的 Wi-Fi 或 Ethernet 接口可供修改 MAC 地址。"
|
||||
echo -e "${YELLOW}未找到活动的 Wi-Fi 或 Ethernet 接口。跳过 MAC 地址修改。${NC}"
|
||||
return 1 # 返回错误码,表示没有接口被修改
|
||||
fi
|
||||
|
||||
log_info "将尝试为以下活动接口修改 MAC 地址: ${active_interfaces[*]}"
|
||||
echo
|
||||
|
||||
# 4. 🚀 循环处理找到的活动接口(增强版)
|
||||
local overall_success=true
|
||||
local successful_interfaces=()
|
||||
local failed_interfaces=()
|
||||
|
||||
echo -e "${BLUE}🚀 [开始] 开始处理 ${#active_interfaces[@]} 个活动接口...${NC}"
|
||||
echo
|
||||
|
||||
# 处理每个接口
|
||||
for i in "${!active_interfaces[@]}"; do
|
||||
local interface_name="${active_interfaces[$i]}"
|
||||
local interface_num=$((i + 1))
|
||||
|
||||
echo -e "${YELLOW}╔══════════════════════════════════════════════════════════════╗${NC}"
|
||||
echo -e "${YELLOW}║ 处理接口 $interface_num/${#active_interfaces[@]}: $interface_name ║${NC}"
|
||||
echo -e "${YELLOW}╚══════════════════════════════════════════════════════════════╝${NC}"
|
||||
echo
|
||||
|
||||
if _change_mac_for_one_interface "$interface_name"; then
|
||||
log_info "✅ [成功] 接口 '$interface_name' MAC地址修改成功"
|
||||
successful_interfaces+=("$interface_name")
|
||||
else
|
||||
log_warn "⚠️ [失败] 接口 '$interface_name' MAC地址修改失败"
|
||||
failed_interfaces+=("$interface_name")
|
||||
overall_success=false
|
||||
fi
|
||||
|
||||
echo
|
||||
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
||||
echo
|
||||
done
|
||||
|
||||
# 📊 显示处理结果统计
|
||||
echo -e "${BLUE}📊 [统计] MAC地址修改结果统计:${NC}"
|
||||
echo " ✅ 成功: ${#successful_interfaces[@]} 个接口"
|
||||
if [ ${#successful_interfaces[@]} -gt 0 ]; then
|
||||
for interface in "${successful_interfaces[@]}"; do
|
||||
echo " • $interface"
|
||||
done
|
||||
fi
|
||||
echo " ❌ 失败: ${#failed_interfaces[@]} 个接口"
|
||||
if [ ${#failed_interfaces[@]} -gt 0 ]; then
|
||||
for interface in "${failed_interfaces[@]}"; do
|
||||
echo " • $interface"
|
||||
done
|
||||
fi
|
||||
echo
|
||||
|
||||
log_info "📋 [完成] 所有活动接口的MAC地址修改尝试完成"
|
||||
|
||||
if $overall_success; then
|
||||
return 0 # 所有尝试都成功
|
||||
else
|
||||
# 🔧 MAC地址修改失败时自动切换到JS内核修改
|
||||
echo
|
||||
log_warn "⚠️ [警告] MAC地址修改失败或部分失败"
|
||||
log_info "🔧 [智能切换] 自动切换到JS内核修改方案..."
|
||||
log_info "💡 [说明] JS内核修改直接修改Cursor设备检测逻辑,绕过效果更好"
|
||||
|
||||
if modify_cursor_js_files; then
|
||||
log_info "✅ [成功] JS内核修改完成,已实现设备识别绕过"
|
||||
log_info "💡 [结果] 虽然MAC地址修改失败,但JS内核修改提供了更直接的解决方案"
|
||||
return 0
|
||||
else
|
||||
log_error "❌ [失败] JS内核修改也失败了"
|
||||
log_error "💥 [严重] 所有设备识别绕过方案都失败了"
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -2752,17 +2555,7 @@ main() {
|
||||
log_info "💡 [建议] 请尝试'重置环境+修改机器码'选项"
|
||||
fi
|
||||
|
||||
# 🔧 智能设备识别绕过(MAC地址修改或JS内核修改)
|
||||
echo
|
||||
log_info "🔧 [设备识别] 开始智能设备识别绕过..."
|
||||
log_info "💡 [说明] 将根据系统环境自动选择最佳方案(MAC地址修改或JS内核修改)"
|
||||
|
||||
if change_system_mac_address; then
|
||||
log_info "✅ [成功] 设备识别绕过完成(使用MAC地址修改)"
|
||||
else
|
||||
log_warn "⚠️ [警告] 设备识别绕过失败或部分失败"
|
||||
log_info "💡 [提示] 但可能已通过JS内核修改实现了绕过效果"
|
||||
fi
|
||||
|
||||
# 🚫 禁用自动更新(仅修改模式也需要)
|
||||
echo
|
||||
@@ -2818,12 +2611,6 @@ main() {
|
||||
log_info "🔧 [设备识别] 开始智能设备识别绕过..."
|
||||
log_info "💡 [说明] 将根据系统环境自动选择最佳方案(MAC地址修改或JS内核修改)"
|
||||
|
||||
if change_system_mac_address; then
|
||||
log_info "✅ [成功] 设备识别绕过完成(使用MAC地址修改)"
|
||||
else
|
||||
log_warn "⚠️ [警告] 设备识别绕过失败或部分失败"
|
||||
log_info "💡 [提示] 但可能已通过JS内核修改实现了绕过效果"
|
||||
fi
|
||||
|
||||
# 🔧 关键修复:修复应用签名问题(防止"应用已损坏"错误)
|
||||
echo
|
||||
@@ -2862,7 +2649,6 @@ main() {
|
||||
echo -e "${BLUE} 🎯 修改结果总结 ${NC}"
|
||||
echo -e "${GREEN}================================${NC}"
|
||||
echo -e "${GREEN}✅ JSON配置文件修改: 完成${NC}"
|
||||
echo -e "${GREEN}✅ MAC地址修改: 完成${NC}"
|
||||
echo -e "${GREEN}✅ 自动更新禁用: 完成${NC}"
|
||||
echo -e "${GREEN}================================${NC}"
|
||||
echo
|
||||
@@ -2877,7 +2663,6 @@ main() {
|
||||
echo
|
||||
log_info "💡 [重要提示] 完整的Cursor破解流程已执行:"
|
||||
echo -e "${BLUE} ✅ 机器码配置文件修改${NC}"
|
||||
echo -e "${BLUE} ✅ 系统MAC地址修改${NC}"
|
||||
echo -e "${BLUE} ✅ 自动更新功能禁用${NC}"
|
||||
echo -e "${BLUE} ✅ 权限修复和验证${NC}"
|
||||
echo
|
||||
|
||||
@@ -197,9 +197,9 @@ function Modify-CursorJSFiles {
|
||||
}
|
||||
|
||||
# ========== 方法B: IIFE运行时劫持(crypto.randomUUID) ==========
|
||||
# 使用IIFE包装,兼容webpack打包的bundle文件,无需import语法
|
||||
# 劫持crypto.randomUUID从源头拦截所有UUID生成
|
||||
$injectCode = ";(function(){/*__cursor_patched__*/var _cr=require('crypto'),_orig=_cr.randomUUID;_cr.randomUUID=function(){return'$newUuid';};if(typeof globalThis!=='undefined'){globalThis.__cursor_machine_id='$machineId';globalThis.__cursor_mac_machine_id='$macMachineId';globalThis.__cursor_dev_device_id='$deviceId';globalThis.__cursor_sqm_id='$sqmId';}try{var _os=require('os'),_origNI=_os.networkInterfaces;_os.networkInterfaces=function(){var r=_origNI.call(_os);for(var k in r){if(r[k]){for(var i=0;i<r[k].length;i++){if(r[k][i].mac){r[k][i].mac='00:00:00:00:00:00';}}}}return r;};}catch(e){}console.log('[Cursor ID Modifier] 设备标识符已劫持 - 煎饼果子(86) 公众号【煎饼果子卷AI】');})();"
|
||||
# 使用IIFE包装,兼容webpack打包的bundle文件
|
||||
# 在支持 require 的环境中劫持 crypto.randomUUID;在 ESM 环境中安全降级为 no-op,避免 require 抛错
|
||||
$injectCode = ";(function(){/*__cursor_patched__*/var _cr=null,_os=null;if(typeof require!=='undefined'){try{_cr=require('crypto');_os=require('os');}catch(e){}}if(_cr&&_cr.randomUUID){var _orig=_cr.randomUUID;_cr.randomUUID=function(){return'$newUuid';};}if(typeof globalThis!=='undefined'){globalThis.__cursor_machine_id='$machineId';globalThis.__cursor_mac_machine_id='$macMachineId';globalThis.__cursor_dev_device_id='$deviceId';globalThis.__cursor_sqm_id='$sqmId';}if(_os&&_os.networkInterfaces){try{var _origNI=_os.networkInterfaces;_os.networkInterfaces=function(){var r=_origNI.call(_os);for(var k in r){if(r[k]){for(var i=0;i<r[k].length;i++){if(r[k][i].mac){r[k][i].mac='00:00:00:00:00:00';}}}}return r;};}catch(e){}}console.log('[Cursor ID Modifier] 设备标识符已劫持 - 煎饼果子(86) 公众号【煎饼果子卷AI】');})();"
|
||||
|
||||
# 注入代码到文件开头
|
||||
$content = $injectCode + "`n" + $content
|
||||
|
||||
Reference in New Issue
Block a user