吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1380|回复: 17
收起左侧

[Web逆向] 简单逆向Web视频插件

  [复制链接]
2225106 发表于 2026-7-12 22:25
B站会员到期了,就寻思找个能看高清的插件,结果在谷歌商店里还真找到一个:

这是它的说明:

安装好后这是它的介绍:

打开B站视频,Alt+s激活插件,选右上角设置,换成中文!

12345随便选择一个滤镜,起个名字,选择你要的高清度。。。然后点添加到列表。。。

既然要收费,不免费我还不如去充值B站会员。。

将下载的CRX文件解包后得到这些文件:

丢给AI..下面是AI分析的:

这是manifest.json的内容:
{"update_url": "https://clients2.google.com/service/update2/crx",
"manifest_version": 3,"name": "MSG_extNameChrome","version": "4.4.11","description": "MSG_extDesc","default_locale": "en",
"permissions": ["storage", "scripting", "offscreen"],"host_permissions": ["<all_urls>"],"externally_connectable": {"matches": ["https://videoqualityenhancer.app/","https://www.videoqualityenhancer.app/","https://ipinfo.io/*"]
},
"action": {"default_popup": "popup.html","default_title": "MSG_extActionTitle","default_icon": {"16": "icons/icon16.png","48": "icons/icon48.png"}},
"commands": {"_execute_action": {"suggested_key": {"default": "Alt+S","mac": "Alt+S"},"description": "Show/Hide the extension panel on the page"}},
"background": {"service_worker": "background.js"},
"content_scripts": [{"js": ["content.js"],"matches": ["<all_urls>"],"exclude_matches": ["://.paypal.com/", "://.paypalobjects.com/", "://.stripe.com/", "://.braintreegateway.com/", "://pay.google.com/"],"run_at": "document_start","all_frames": true,"match_about_blank": true,"match_origin_as_fallback": true}],
"icons": {"16": "icons/icon16.png","48": "icons/icon48.png","128": "icons/icon128.png"},
"web_accessible_resources": [{"matches": ["<all_urls>"],"resources": ["sidebar.html", "sidebar.css", "icons/.svg", "icons/.png", "fonts/", "_locales/**/.json"]}]
}

这个是background.js的内容:

// background.js
const UNINSTALL_REASON_PAGE_URL = 'https://saasminded.dev/video-quality-enhancer-feedback/';const HOW_TO_USE_PAGE_URL = 'https://saasminded.dev/video-quality-enhancer-improve-sharpness-lighting-gamma-and-saturation-browser-extension/';const CHANGELOG_PAGE_URL = 'https://buymeacoffee.com/john_webber';
// Ensure this matches the route defined in PHPconst provera = 'https://videoqualityenhancer.app/wp-json/vqe/v1/subscription';const trajanjeProbe = 259200000;
// Inject content.js into all currently open tabs so users don't have to reloadchrome.runtime.onInstalled.addListener(async (details) => {chrome.runtime.setUninstallURL(UNINSTALL_REASON_PAGE_URL);
const now = Date.now(); // Calculate time at the moment of install/update
// Inject content.js into all currently open tabs so users don't have to reloadchrome.tabs.query({ url: ['http:///', 'https:///'] }, (tabs) => {for (const tab of tabs) {// The url filter above catches most, but this is extra safetyif (tab.url.startsWith('chrome://') || tab.url.startsWith('edge://') || tab.url.includes('chrome.google.com/webstore')) {continue;}chrome.scripting.executeScript({target: { tabId: tab.id },files: ['content.js'],}).catch((err) => {/* Ignore */});}});
if (details.reason === 'install') {await chrome.storage.local.set({vremeInstalacije: now,promptedAfter2Days: false,promptedAfter30Days: false,applyToImages: false,removeHalo: false,preset1: {sharpness: 70,blur: 100,highlights: 15,gamma: 50,shadows: 40,saturation: 0,smartLimit: 0,panelSide: 'vq-left',siteListMode: 'exclude',exclusionList: [],inclusionList: [],},sledecaProvera: 0,extensionEnabled: true,lastUsedPreset: '1',excludelist: [],theme: 'light',});
chrome.tabs.create({ url: HOW_TO_USE_PAGE_URL });} else if (details.reason === 'update') {// Nothing needed currently}
});
// --- Message Listener ---chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {// Consolidated Switch Statement for cleaner logicswitch (message.action ||message.type // Handle both 'action' and 'type' keys) {case 'PERFORM_LIVE_GPU_CHECK':handleGpuCheck().then((response) => sendResponse(response));return true; // Keep channel open
case 'open_shortcuts':const url = navigator.userAgent.includes('Edg/') ? 'edge://extensions/shortcuts' : 'chrome://extensions/shortcuts';chrome.tabs.create({ url: url });break;
case 'get_shortcut':chrome.commands.getAll((commands) => {const command = commands.find((c) => c.name === '_execute_action');sendResponse({ shortcut: command && command.shortcut ? command.shortcut : 'Not Set' });});return true;
case 'validate_subscription':checkServerSubscription().then((result) => sendResponse(result));return true; // Keep channel open for async response
case 'get_access_status':checkAccessLocally().then((res) => sendResponse(res));return true; // Keep channel open for async response
default:break;}
});
let activeGpuChecks = 0;let setupLock = null;
async function handleGpuCheck() {activeGpuChecks++;try {await obtainOffscreenDocument();let response = null;let attempts = 0;while (attempts < 10 && !response) {try {response = await chrome.runtime.sendMessage({ type: 'CHECK_GPU_INTERNAL' });} catch (e) {attempts++;await new Promise((r) => setTimeout(r, 100));}}if (!response) return { stanje: 'blocked', razlog: 'Offscreen Timeout' };await chrome.storage.local.set({ gpu_status: response.stanje });return response;} catch (e) {return { stanje: 'blocked', razlog: 'Background Error: ' + e.message };} finally {activeGpuChecks--;terminateOffscreenIfIdle();}}
// Creates the offscreen document safely.// Uses a 'setupLock' to ensure multiple tabs don't trigger multiple creations.async function obtainOffscreenDocument() {// 1. If a setup is already in progress, join it.if (setupLock) {await setupLock;return;}
// 2. Start setup and assign lock synchronouslysetupLock = (async () => {const existing = await chrome.runtime.getContexts({ contextTypes: ['OFFSCREEN_DOCUMENT'] });if (existing.length > 0) return;
await chrome.offscreen.createDocument({url: 'offscreen.html',reasons: ['DOM_SCRAPING'],justification: 'Verify GPU capabilities',});})();
// 3. Wait for completiontry {await setupLock;} catch (e) {setupLock = null; // Clear lock on failure so we can try againthrow e;}
}
// Closes the document only if no other tabs are waitingasync function terminateOffscreenIfIdle() {if (activeGpuChecks === 0) {setupLock = null;const contexts = await chrome.runtime.getContexts({ contextTypes: ['OFFSCREEN_DOCUMENT'] });if (contexts.length > 0) {try {await chrome.offscreen.closeDocument();} catch (e) {}}}}
async function checkServerSubscription() {try {const response = await fetch(provera, {method: 'GET',credentials: 'include',headers: { 'Content-Type': 'application/json' },});
if (response.status === 404) {return { stanje: 'error', razlog: 'api_not_found' };}
if (response.status === 401) {return { stanje: 'logged_out' };}
const data = await response.json();
if (data.active_subscription) {await chrome.storage.local.set({statusPretplate: 'active',istekPretplate: data.expiry,sledecaProvera: Date.now() + 86400000,});return { stanje: 'active' };} else {await chrome.storage.local.set({ statusPretplate: 'expired' });return { stanje: 'expired' };}} catch (error) {return { stanje: 'error', razlog: error.message };}
}
async function checkAccessLocally() {const data = await chrome.storage.local.get(['vremeInstalacije', 'isEarlyAdopter', 'statusPretplate', 'istekPretplate']);
if (data.statusPretplate === 'active') {const sadasnjaVremenskaOznaka = Date.now();
if (data.istekPretplate && sadasnjaVremenskaOznaka > data.istekPretplate) {await chrome.storage.local.set({ statusPretplate: 'expired' });return { pristup: false, razlog: 'expired' };}
return { pristup: true, razlog: 'subscriber' };}
if (data.isEarlyAdopter) return { pristup: true, razlog: 'early_adopter' };
const sadasnjaVremenskaOznaka = Date.now();const vremenskaRazlika = sadasnjaVremenskaOznaka - (data.vremeInstalacije || sadasnjaVremenskaOznaka);
if (vremenskaRazlika < 259200000) {return { pristup: true, razlog: 'trial', daysLeft: 3 - vremenskaRazlika / 86400000 };}
return { pristup: false, razlog: 'expired' };
}
chrome.runtime.onMessageExternal.addListener((request, sender, sendResponse) => {const allowedOrigins = ['https://videoqualityenhancer.app', 'https://www.videoqualityenhancer.app'];
if (!allowedOrigins.includes(sender.origin)) {return false;}
// Helper function to get or fetch the user's countryasync function getUserCountry() {return new Promise((resolve) => {chrome.storage.sync.get(['user_country'], async (result) => {if (result.user_country) {resolve(result.user_country);return;}
try {const response = await fetch('https://ipinfo.io/json');if (!response.ok) throw new Error('Network response failed');
const data = await response.json();const country = data.country || 'US';
chrome.storage.sync.set({ user_country: country }, () => {resolve(country);});} catch (error) {console.error('Geolocation failed:', error);resolve('US'); // Fallback to US pricing}});});}
// Legacy support for older website versions (just in case)if (request.action === 'getBracket') {chrome.storage.sync.get(['pricing_bracket'], (result) => {sendResponse({ bracket: result.pricing_bracket });});return true;}
// New action to get both bracket and countryif (request.action === 'getPricingData') {chrome.storage.sync.get(['pricing_bracket'], async (result) => {const countryCode = await getUserCountry();sendResponse({bracket: result.pricing_bracket,country: countryCode,});});return true;}
if (request.action === 'setBracket' && request.bracket) {chrome.storage.sync.set({ pricing_bracket: request.bracket }, () => {sendResponse({ success: true });});return true;}

});

1.checkServerSubscription():联网向官网拉取会员订阅状态

const provera = 'https://videoqualityenhancer.app/wp-json/vqe/v1/subscription';async function checkServerSubscription() {    // 这里fetch请求官网接口,拿正版会员有效期    const response = await fetch(provera, ...)    // 服务器返回active就是会员,否则过期}
2. checkAccessLocally():本地核心试用 + 权限判断
  • 如果本地存了statusPretplate: active(正版订阅)→ 放行可用;
  • 如果标记isEarlyAdopter(早期用户)→ 直接放行;
  • 安装时间起算,只允许试用 259200000 毫秒 = 3 天
  • 超过 3 天 → pristup: false 拒绝使用,弹出付费。


那就可以这样修改:

彻底干掉联网验权函数 checkServerSubscription
把整个函数替换成下面内容,永远返回正版已激活,不再请求官网:
async function checkServerSubscription() {    // 直接写死订阅永久激活,跳过网络请求    await chrome.storage.local.set({        statusPretplate: 'active',        istekPretplate: Date.now() + 9999999999999,        sledecaProvera: Date.now() + 9999999999999    });    return { stanje: 'active' };}
重写本地权限判断 checkAccessLocally(彻底废除 3 天试用限制)原函数整体删掉,粘贴下面这段,无论何时都永久允许访问
async function checkAccessLocally() {    // 强制永久授权,无视安装时间、过期时间    return { pristup: true, razlog: "cracked_permanent" };}
顶部删除外网校验地址

删除这一行常量定义,杜绝请求源头:



const provera = 'https://videoqualityenhancer.app/wp-json/vqe/v1/subscription';
清理外部页面监听(屏蔽官网页面读取本地数据)找到最下方 chrome.runtime.onMessageExternal.addListener 整个大函数,直接全部删除作用:官网网页无法获取你设备地区、价格配置,杜绝网页端反向绑定设备拉黑。
配套修改 manifest.json 两处,防止修复失效删除第一行自动更新字段,避免官方覆盖文件:

"update_url": "https://clients2.google.com/service/update2/crx",
外联可通信域名置空,彻底断连官网:

  "externally_connectable": {    "matches": []  },保存修改后的 background.js 与 manifest.json  然后再打包成crx文件!双击重新安装!

重复前面的操作,到这一步点:验证订阅,显示成功。。。
pro会员标签显示:
然后打开你要看的视频,选高清度,
效果好不好,自行测试,花这冤枉钱不如冲个会员了。呵呵!

视频画质增强器 AI 4K 放大、锐化、亮度、伽马与色彩修复PJ.rar

291.26 KB, 下载次数: 60, 下载积分: 吾爱币 -1 CB

免费评分

参与人数 2吾爱币 +8 热心值 +2 收起 理由
涛之雨 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
tobaba + 1 + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

sopcast 发表于 2026-7-13 11:40
分析的很详细!学习了!感谢分享
三滑稽甲苯 发表于 2026-7-13 12:31
llklion 发表于 2026-7-13 15:33
sunjy_11 发表于 2026-7-13 16:03
看看效果如何
yybc26 发表于 2026-7-13 17:49
感谢分享
fengyijiuchui 发表于 2026-7-13 23:58
AI逆向是和大趋势了
yanyanyi 发表于 2026-7-14 08:11
好像和一些游戏手机,画质插帧提醒画质和流畅度有点类似?
tigerxiao 发表于 2026-7-14 16:53

感谢分享
toadflax 发表于 2026-7-14 17:46
感谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-8-28 09:27

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表