// ==UserScript== // @name 百度网盘Svip会员破解青春版 // @namespace http://tampermonkey.net/ // @match https://pan.baidu.com/ // @match https://pan.baidu.com/* // @grant unsafeWindow // @run-at document-start // @version 1.3 // @license MIT // @author Gwen // @downloadUrl https://greasyfork.org/scripts/469774-%E7%99%BE%E5%BA%A6%E7%BD%91%E7%9B%98svip%E4%BC%9A%E5%91%98%E7%A0%B4%E8%A7%A3%E9%9D%92%E6%98%A5%E7%89%88/code/%E7%99%BE%E5%BA%A6%E7%BD%91%E7%9B%98Svip%E4%BC%9A%E5%91%98%E7%A0%B4%E8%A7%A3%E9%9D%92%E6%98%A5%E7%89%88.user.js // @homepageUrl https://greasyfork.org/zh-CN/scripts/469774-%E7%99%BE%E5%BA%A6%E7%BD%91%E7%9B%98svip%E4%BC%9A%E5%91%98%E7%A0%B4%E8%A7%A3%E9%9D%92%E6%98%A5%E7%89%88 // @description 修改所有可改的身份信息,修改成超级会员身份,可以使用网站自带的倍速、字幕等功能。 // @downloadURL none // ==/UserScript== (function() { 'use strict'; var store = { path: null, adToken: null, bdstoken: null, resolutionPattern: /M3U8_AUTO_([0-9]+?)&/, } store.path = new URLSearchParams(new URL(location.href).search).get('path'); function hookRequest() { var originOpen = XMLHttpRequest.prototype.open; XMLHttpRequest.prototype.open = function (method, url) { if (url.indexOf('/api/loginStatus') != -1) { this.addEventListener('readystatechange', function() { if (this.readyState == 4) { let res = JSON.parse(this.responseText) res.login_info.vip_type = '21' res.login_info.vip_identity = '21' res.login_info.vip_level = 8 res.login_info.vip_point = 99999 res.login_info.username = 'GwenCrackヾ(-_-;)' store.bdstoken = res.login_info.bdstoken Object.defineProperty(this, "responseText", { writable: true, }); this.responseText = JSON.stringify(res) } }) originOpen.apply(this, arguments); } else if (url.indexOf('/user/info') != -1) { this.addEventListener('readystatechange', function() { if (this.readyState == 4) { let res = JSON.parse(this.responseText) res.user_info.is_vip = 1 res.user_info.is_svip = 1 res.user_info.is_plus_buy = 1 Object.defineProperty(this, "responseText", { writable: true, }); this.responseText = JSON.stringify(res) } }) originOpen.apply(this, arguments); } else if (url.indexOf('/membership/user') != -1) { this.addEventListener('readystatechange', function() { if (this.readyState == 4) { let res = JSON.parse(this.responseText) res.reminder = { "svip": { "leftseconds": 9999999999, "nextState": "normal" } } res.level_info = { "current_value": 12090, "current_level": 10, "history_value": 11830, "history_level": 10, "v10_id": "666666", "last_manual_collection_time": 0 } res.product_infos = [{ "product_id": "", "start_time": 1685635199, "end_time": 1888227199, "buy_time": 0, "cluster": "vip", "detail_cluster": "svip", "auto_upgrade_to_svip": 0, "product_name": "svip2_nd", "status": 0, "function_num": 0, "buy_description": "", "product_description": "", "cur_svip_type": "month" }] res.current_product = { "cluster": "vip", "detail_cluster": "svip", "product_type": "vip2_1m_auto", "product_id": "12187135090581539740" } res.current_product_v2 = { "cluster": "vip", "detail_cluster": "svip", "product_type": "vip2_1m_auto", "product_id": "12187135090581539740" } Object.defineProperty(this, "responseText", { writable: true, }); this.responseText = JSON.stringify(res) } }) originOpen.apply(this, arguments); } else if (url.indexOf('/api/streaming') != -1 && url.indexOf('M3U8_SUBTITLE_SRT') == -1) { //获取视频m3u8接口 let modifiedUrl = url.replace(/vip=2/, 'vip=0') .replace(/_1080&/, '_720&') if (store.adToken) { modifiedUrl += ('&adToken=' + encodeURIComponent(store.adToken)) this.adToken = store.adToken store.adToken = null originOpen.call(this, method, modifiedUrl, false); return } originOpen.call(this, method, modifiedUrl); this.addEventListener('readystatechange', function() { if (this.readyState == 4) { if (this.responseText[0] == '{') { let res = JSON.parse(this.responseText) store.adToken = res.adToken let manualRequest = new XMLHttpRequest(); // let manualUrl = `https://pan.baidu.com/api/streaming?app_id=250528&clienttype=0&channel=chunlei&web=1&isplayer=1&check_blue=1&type=M3U8_AUTO_${store.resolutionPattern.exec(url)[1]}&trans=&vip=0` + // `&bdstoken=${store.bdstoken||unsafeWindow.locals.bdstoken}&path=${store.path}&jsToken=${unsafeWindow.jsToken}` let manualUrl = modifiedUrl console.log(manualUrl) manualRequest.open(method, manualUrl, false); manualRequest.send(); Object.defineProperty(this, "status", { writable: true, }); this.status = manualRequest.status; Object.defineProperty(this, "responseText", { writable: true, }); this.responseText = manualRequest.responseText; } } }) } else if (url.indexOf('/api/streaming') != -1 && url.indexOf('SUBTITLE_SRT') != -1) { this.addEventListener('readystatechange', function() { if (this.readyState == 4) { let res = this.responseText Object.defineProperty(this, "responseText", { writable: true, }); this.responseText = res.replace(/https:\/\/.*?\//, 'https://nv0.baidupcs.com/') } }) originOpen.apply(this, arguments); } else if (url.indexOf('/msg/streaming') != -1 || url.indexOf('/share/streaming') != -1) { this.addEventListener('readystatechange', function() { if (this.readyState == 4) { if (this.responseText[0] != '{') return let res = JSON.parse(this.responseText) res.ltime = 0.000001 res.adTime = 0.000001 Object.defineProperty(this, 'responseText', { writable: true, }) this.responseText = JSON.stringify(res) } }) originOpen.apply(this, arguments); } else { originOpen.apply(this, arguments); } } } hookRequest() let localsTimer = setInterval(() => { if (!unsafeWindow.locals) return clearInterval(localsTimer) console.log('设置window.locas', unsafeWindow.locals) let originalSet = unsafeWindow.locals.set unsafeWindow.locals.set = function(n, t) { console.log('%c[hook]' + n + ': ' + t, 'color:blue;') if (['is_vip', 'is_svip'].indexOf(n) != -1) { t = 1 } else if (n == 'vip_level') { t = 10 } else if (n == 'v10_id') { t = '666666' } console.log(arguments) originalSet.apply(this, [n, t]) } if (unsafeWindow.locals.userInfo) { unsafeWindow.locals.userInfo.vip_level = 8 unsafeWindow.locals.userInfo.vip_identity = 21 unsafeWindow.locals.userInfo.username = "GwenCrackヾ(-_-;)" } else if(unsafeWindow.locals.mset) { unsafeWindow.locals.mset({ 'is_vip': 1, 'is_svip': 1, 'vip_level': 10, 'show_vip_ad': 0 }) } else { unsafeWindow.locals.vip_level = 8 unsafeWindow.locals.is_vip = 1 unsafeWindow.locals.is_svip = 1 unsafeWindow.locals.is_evip = 0 unsafeWindow.locals.show_vip_ad = 0 } }, 10) })()