/** * 原版 CursorPro 反编译脚本 * 完整解码混淆代码 */ const fs = require('fs'); // 原版代码字符串数组 (从原版代码中提取) const stringArray = ['cursor', 'XenNcturgdsoIeKrHRBCjEhRpemLPbyB==', 'W7mXWPBdNJZdL1O', 'yXhcLSkQWPa', 'EubBWPfh', 'WRNcKNekna', 'sd/cJCkmWOpdIW', 'W7qLW7bCkW', 'bmkbESkVWPK', 'WRBcVmkNWOldNfpcM0FdTsi', 'W6OCW4hcNCoNCua', 'acLXq0C', 'WROrW7NcS1Gw', 'W6aWW6H5pHiGW6v/WQ5Tb8k2WQmwga', 'nJrJW6ddUmogvCkeaHHyWOu', 'W6ehWRGiW48yfINcRahcOmkZnI8NmuO', 'WRZdOmoxFCky', 'Cmk8w8okW4DEcb7cQSk3WRpdVCk4WQC2WR0kC8oXCmkAW57dV8op', 'uNDGWPHyWRLXnmk1qCkNWQOne8odW7jZW5CcW5SZWOWOW4a', 'W78KAJNdLG', 'eCkJFqBcTCk0W53dGtvUlYWRWQ3dJCkBW6pdJSo3eSozWP7cSItdLd1nW5VdTdxdMejrW6C', 'dCoWWRbuW4KE', 'W7qUWO3dJI/dMa', 'WOORW5pcPLC', 'WOuWW5NcNLa', 'c8owW6m/', 'WQddQrRcHSkW', 'c8opWPpcTaO', 'W4tcNw8cs8koi281W4/dMX0TW5VdU1HKWRrfWPJdHmkHWQWbnSkp', 'DCkzW68eeW', 'WOe6W6ZcPve', 'iCoZWRftW5W3amovWQSF', 'jCosWPfVW6yGn8oHWPe+W6VdHq', 'k391WRVdKq', 'fCoHWOXIFCooWOzTWRxcL3i', 'nGH1A2jK', 'W4OautxdLq', 'F0zDWQbx', 'eMeBzSoYDLRdOSkLoxKx', 'W5xdOCotW7/dHW', 'umohahq2dthcJLj8FxlcV8kD', 'ddDyWOhcRa', 'W5LoWRbMt8klWRj0wa', 'r8kgxb3dLG', 'W5bwWPFcVNW', 'W60MW7nB', 'W6yNWORdUa7dKvpcI34rW64MW6ZcR8oNW5VcR8koW4JdUq', 'WQa+yulcNW', 'WQShW67cJ1KsWOn5iSoMW4SuW55OqNG', 'W6qEBW', 'WOtdLKPlWR/dJqJcGLO', 'ESoOo0GZ', 'W7CGW69D', 'WQ7dL3VcQKaiWQNdQSoWW5C', 'WRmPWQ9jBrP0W6O7', 'dmoTW6CbEa', 'W6uMWPSnW70', 'WOlcKNWheCkzi30', 'W7msWQG6W54CkZFcPGRcQSkZnI8NmuO', 'fSkqq8ktWQ5zjmkrpSk+FCkfhwRcPJKylW', '57+u57Uq6lYa5O2Y5Ash6lE477+36kYX5Qoo5PYF57YB57Mw', 'DSkuesZdUG', 'wNBcSrL4Fsrr', 'o8kigCksCSk6bW', 'WPpcUCoNiW0', 'FHNcSSkS', 'W5GkW7LgeGKHW6nNWP0', 'FCkQBWJdKa', 'WOZdNdveWO/cN8kbW6ZcNq', 'WRpcNSoDaedcTHO2dJpdPc3cOH3cOmkoWQtcQrL2WQFdK8oDxq', 'f8oJWRDvW4KqhSoc', 'W4utW5z+oG', 'Eaf/FSoW', 'AgKPWPtcOCkvFG', 'W4ZdISoWW6xdVq', 'omoAf8kLuMCVyc3cRSok', 'ivlcOtJcNeNcOW', 'fmoTW5WtBa', 'WQinFuxcOCoWnKJdR0NcRSoAy8kAW5K3z8kUBG', 'oSkeqCkWWQ4', 'aCoHWQ5nW4ere8otWQ0cW4dcRGRcJmkNnG', 'WRSvW5FcPwK', 'aMxcQaq2As1gq2ddM1pcISkVwW', 'W47cU8o9xmkuCXzn', 'e29dWORdLCk9zmoNcgCnW4rQWPVcGq', 'W7HEWOjAWPzhdmkG', 'jCoxWOtcLaRdM0Hm', 'WQ8dW5ZcNCoFDhNcNSkQ', 'WQRdVrr2WQdcT8kHW5dcUmkUFCo6', 'W6ddKSoCW7VdUW', 'g0fAWORdVa', 'WReCrMtcGa', 'W4urWRFdJW', 'f8k7W4eClCoeWPC', 'iCoCWPtcIX7dMeG', 'W4iLW512ea', 'pJTtr2y', 'kmkTx8keWQ4', 'tSk+nqZdHa', 'gNnKWR4aWQrej8k3xCkNWQSkrCoKW7HUW5izW5u', 'WORdUa/cJSkiW7nk', 'W5ddQCofC8o9sIbUgWyekG', 'ySk8xmoTW54', 'W4aqW4G', 'WQeEWQDhWQ8', 'WQVdPCoKW5NcPexcSuVdVsiYBINcSCkOW6JdHgfRyaSfW4m8WOi1WRWjWQpcKWab', 'd8oRWRHwW4e', 'CLVcVr5uCcXbrMm', 'FCkkW5pdJeZcJHH6Dmo2zmkqWQu', 'gCkay8kI', 'WR51tmk4pmk2WQtdJmkJjaG3cSoSWRJcO2apx8k3wSk3WOpcSCoNkLm', 'WQOwW6lcPCoM', 'W4tcNw8cs8koi281W4/dMX0TW5VdU1TSWRrtWOm', 'WRRcT0HaW4CDi8oEWPi', 'xZFdJCkLWQP4ySolWP7cHgbdW7/cJq', 'vsVdGSkHWR1P', 'amoqWQVcNbm', 'WRNcUgSNmG', 'CSoBESoDcW', 'WP3dSdz1WOu', 'p8o8W5yczSortSoMzCohe8oCnX4', 'umkWfJRdQa', 'EgJcIWDb', 'W5RdMSktW7ddN8o0W7BdVSkVWO3cNSkUwSo0hCokkW', 'CNWhW67dKeNdQHhdQmoCW4u', 'qgjWWRzBWRjYi8k7xmkUWR0kgCoeW7HUW5izW5u', 'h2xdLComW5xcImoJWOfZW5ZdKCkgW6G', 'cSkEeSoEcG', 'hCkBwCkJWQS', 'FCoSh1Op', 'nmo+tI9C', 'WPZdUSoqE8kMwq', 'dCkPEsddVSkbW7m', 'W5yNsaddRN4X', 'l8oOgCkZWOagysxcV8kUWQxdJSki', 'ASkFgSk+AmkomYtdSI0wWO3dSX8', 'wCkKFCoa', 'j1JcOYa', 'W5NcUWhdLviPWQNdKSob', 'WQddISkDW5FcJW', 'WRTji8obW7tdU2RcV2bcwCoE', 'W65wWQXV', 'WO3cNw9v', 'DN4iW6hdLdFcJaFdHmoXW7tdGCkk', 'WQxdRSk3', 'c8kXW4u6zSoXWRLbWPBcGNJdQmkcd8kVWRZcNhz1BW', 'W7msWQG6W54CkZFcPGRcQSkXoIiUlupdLai', 'uCoiefC0bWtcJW', 'iLlcSWRcJetcUSooECkonX/cLCkyzCkveq', 'WQ/dH8oMtG', 'Cb1PtSo6WPi8WQGhW5bpDa', 'kCo9u8orvCoCW6WRWRhcVIhdMspdLCoOWPJcU0VdGa', 'pCoSWOZcNdu', 'EIddICkOWOS', 'qvCHetpdOSo3ufrX', 'W6yPWO3dRZ7dNhpcHxeBW6G7W5K', 'WQShW67cK1iFWOD7iSogW4WHW4v2va']; // Base64 解码 function base64Decode(str) { const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/='; let output = ''; let buffer = 0; let bits = 0; for (let i = 0; i < str.length; i++) { const charIndex = chars.indexOf(str[i]); if (charIndex === -1) continue; buffer = (buffer << 6) | charIndex; bits += 6; if (bits >= 8) { bits -= 8; output += String.fromCharCode((buffer >> bits) & 0xFF); } } try { return decodeURIComponent(escape(output)); } catch (e) { return output; } } // RC4 解密 function rc4Decrypt(str, key) { let s = []; let j = 0; let result = ''; // 初始化 S 盒 for (let i = 0; i < 256; i++) { s[i] = i; } // 密钥调度算法 (KSA) for (let i = 0; i < 256; i++) { j = (j + s[i] + key.charCodeAt(i % key.length)) % 256; [s[i], s[j]] = [s[j], s[i]]; } // 伪随机生成算法 (PRGA) let i = 0; j = 0; for (let k = 0; k < str.length; k++) { i = (i + 1) % 256; j = (j + s[i]) % 256; [s[i], s[j]] = [s[j], s[i]]; result += String.fromCharCode(str.charCodeAt(k) ^ s[(s[i] + s[j]) % 256]); } return result; } // 解码函数 - 模拟 _0x3fbb function decode(index, key) { const baseIndex = 0x12e; // 302 const arrayIndex = index - baseIndex; if (arrayIndex < 0 || arrayIndex >= stringArray.length) { return `[UNKNOWN:${index}]`; } const encoded = stringArray[arrayIndex]; const decoded = base64Decode(encoded); const result = rc4Decrypt(decoded, key); return result; } // 测试解码 - 从原版代码中提取的调用 const testCases = [ [0x18a, 'yC20', 'DEFAULT_API_URL'], [0x151, 'pIfk', 'vscode require'], [0x177, ']8Ci', 'workspace'], [0x15b, 'j#7G', 'apiUrl config'], [0x197, 'Kfdi', '/api/verify'], [0x186, 'dpeu', 'POST'], [0x141, 'z&uV', '/api/switch'], [0x144, '*1hl', '__esModule'], [0x1b6, 'mBo%', 'getApiUrl export'], [0x146, 'pIfk', 'getOnlineStatus export'], [0x145, 'j#7G', 'switchAccount export'], [0x154, 'fjkd', 'updateProxyConfig export'], [0x13e, '3nFX', 'getSeamlessStatus export'], [0x193, 'HShS', 'getUserSwitchStatus export'], [0x17f, 'fjkd', 'getSeamlessConfig export'], [0x1c2, '0hHe', 'updateSeamlessConfig export'], [0x1b7, 'csY!', 'injectSeamless export'], [0x13c, 'fjkd', 'getSeamlessAccounts export'], [0x173, 'j#7G', 'syncSeamlessAccounts export'], [0x175, 'pIfk', 'getSeamlessToken export'], [0x152, ')0X3', 'getLatestVersion export'], ]; console.log('=== CursorPro 原版代码解码结果 ===\n'); const results = {}; for (const [index, key, desc] of testCases) { const decoded = decode(index, key); results[desc] = decoded; console.log(`${desc}: "${decoded}"`); } console.log('\n=== 关键信息 ==='); console.log('原版 API 地址:', results['DEFAULT_API_URL']);