// ==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.1
// @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 修改所有可改的身份信息,修改成超级会员身份,可以使用网站自带的倍速、字幕等功能。
// ==/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": 8,
"history_value": 11830,
"history_level": 8,
"v10_id": "",
"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"
}]
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;
// this.dispatchEvent(new Event('readystatechange'));
}
}
})
} else {
originOpen.apply(this, arguments);
}
}
}
hookRequest()
let localsTimer = setInterval(() => {
if (!unsafeWindow.locals) return
clearInterval(localsTimer)
console.log('设置window.locas', unsafeWindow.locals)
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': 8,
'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
}
}, 100)
})()