// ==UserScript== // @name Digitual // @name:en Digitual // @name:es Digitual // @name:fr Digitual // @name:de Digitual // @name:it Digitual // @name:pt Digitual // @name:nl Digitual // @name:ru Digitual // @name:zh-CN Digitual // @name:ja Digitual // @name:ko Digitual // @name:hi Digitual // @name:ar Digitual // @name:vi Digitual // @name:tr Digitual // @name:pl Digitual // @name:uk Digitual // @name:el Digitual // @name:sv Digitual // @name:da Digitual // @name:no Digitual // @name:fi Digitual // @name:hu Digitual // @name:cs Digitual // @name:ro Digitual // @name:th Digitual // @name:id Digitual // @name:he Digitual // @name:fa Digitual // @name:bn Digitual // @name:ta Digitual // @name:ur Digitual // @name:pa Digitual // @name:ms Digitual // @name:te Digitual // @name:ml Digitual // @name:gu Digitual // @name:kn Digitual // @name:mr Digitual // @name:or Digitual // @name:sa Digitual // @name:mk Digitual // @name:bg Digitual // @name:hr Digitual // @name:sr Digitual // @name:sk Digitual // @name:sl Digitual // @name:lt Digitual // @name:lv Digitual // @name:et Digitual // @name:ca Digitual // @name:eu Digitual // @name:gl Digitual // @namespace https://yomboxggt.neocities.org/Digitual // @version 1.3 // @description Una funcion que te permite acceder a cualquier pagina web sin ninguna renstriccion // @description:en A function that allows you to access any webpage without any restrictions // @description:es Una función que te permite acceder a cualquier página web sin ninguna restricción // @description:fr Une fonction qui vous permet d'accéder à n'importe quelle page web sans aucune restriction // @description:de Eine Funktion, die Ihnen den Zugriff auf jede Webseite ohne Einschränkungen ermöglicht // @description:it Una funzione che ti permette di accedere a qualsiasi pagina web senza alcuna restrizione // @description:pt Uma função que permite que você acesse qualquer página da web sem nenhuma restrição // @description:nl Een functie die u toelaat om toegang te krijgen tot elke website zonder beperkingen // @description:ru Функция, которая позволяет вам получить доступ к любой веб-странице без ограничений // @description:zh-CN 允许您无限制地访问任何网页的函数 // @description:ja 制限なしでどのウェブページにもアクセスできる機能 // @description:ko 제한 없이 모든 웹 페이지에 접근할 수 있는 기능 // @description:hi एक फ़ंक्शन जो आपको किसी भी वेब पेज पर बिना किसी रोक-टोक के पहुंचने देता है // @description:ar دالة تتيح لك الوصول إلى أي صفحة ويب دون أي قيود // @description:vi Một chức năng cho phép bạn truy cập bất kỳ trang web nào mà không có bất kỳ hạn chế nào // @description:tr Herhangi bir kısıtlama olmadan herhangi bir web sayfasına erişmenizi sağlayan bir fonksiyon // @description:pl Funkcja, która pozwala na dostęp do dowolnej strony internetowej bez żadnych ograniczeń // @description:uk Функція, яка дозволяє вам отримати доступ до будь-якої веб-сторінки без обмежень // @description:el Μια λειτουργία που σας επιτρέπει να προσπελάσετε οποιαδήποτε ιστοσελίδα χωρίς περιορισμούς // @description:sv En funktion som låter dig komma åt vilken hemsida som helst utan några restriktioner // @description:da En funktion, der gør det muligt at få adgang til enhver hjemmeside uden begrænsninger // @description:no En funksjon som lar deg få tilgang til hvilken som helst nettsted uten noen restriksjoner // @description:fi Toiminto, joka antaa sinulle pääsyn mihin tahansa verkkosivulle ilman rajoituksia // @description:hu Egy olyan funkció, amely lehetővé teszi bármely weblap elérését korlátozás nélkül // @description:cs Funkce, která vám umožňuje přístup k libovolné webové stránce bez jakýchkoliv omezení // @description:ro O funcție care vă permite să accesați orice pagină web fără restricții // @description:th ฟังก์ชันที่อนุญาตให้เข้าถึงเว็บเพจใดๆ ได้โดยไม่มีข้อจำกัดใดๆ // @description:id Fungsi yang memungkinkan Anda mengakses halaman web apa pun tanpa batasan // @description:he פונקציה המאפשרת לך לגשת לכל דף אינטרנט ללא כל הגבלה // @description:fa یک تابع که به شما اجازه می‌دهد تا به هر صفحه وب بدون هیچ قید و شرط دسترسی داشته باشید // @description:bn একটি ফাংশন যা আপনাকে কোনও ওয়েব পেজে প্রবেশ করতে দেয় কোনও বিধিনিষেধ ছাড়াই // @description:ta ஒரு செயல்பாடு அதனை உங்களுக்கு அனைத்து இணையதளங்களையும் எந்த விதமான கட்டுப்பாடுகளும் இல்லாமல் அணுக அனுமதிக்கிறது // @description:ur ایک ایسا فنکشن جو آپ کو کسی بھی ویب پیج پر کوئی تحریموں کے بغیر رسائی فراہم کرتا ہے // @description:pa ਇੱਕ ਫੰਕਸ਼ਨ ਜੋ ਤੁਹਾਡੇ ਲਈ ਕਿਸੇ ਵੀ ਵੈੱਬ ਪੇਜ ਤੱਕ ਪਹੁੰਚ ਬਿਨਾ ਕਿਸੇ ਵੀ ਪਾਬੰਦੀ ਵਾਲੇ ਦਿੱਤੀ ਹੈ // @description:ms Sebuah fungsi yang membenarkan anda mengakses laman web mana sahaja tanpa sebarang had // @description:te ఒక ఫంక్షన్ ఎటువంటి పరిమితులే లేకుండా ఏ వెబ్ పేజీకి కానీ చేరడానికి అనుమతిస్తుంది // @description:ml ഒരു ഫങ്ക്ഷൻ അതിന്റെ വഴി എല്ലാ വെബ് പേജുകളിലേക്കും പരിമിതികൾ ഒന്നുമില്ലാതെ പ്രവേശിക്കാനും അനുവദിക്കുന്നു // @description:gu એક ફંક્શન જે તમને કોઈ પણ વેબ પેજ પર જોવા માટે બંધો વગર મુજબ કરે છે // @description:kn ಒಂದು ಫಂಕ್ಷನ್ ಇದು ಯಾವುದೇ ಪರಿಸ್ಥಿತಿಗಳಿಲ್ಲದೆ ಯಾವುದೇ ವೆಬ್ ಪೇಜ್ಗೆ ಪ್ರವೇಶವನ್ನು ನೀಡುತ್ತದೆ // @description:mr एक फंक्शन जो तुम्हाला कोणत्याही वेबपेजवर प्रतीबंधांपेक्षा जाऊ देतो // @description:or ଏକ ଫଂକ୍ସନ ଯିଏ ତୁମେ କୌଣସି ଉପରି ବିନା ସମସ୍ୟା ପରିବର୍ତ୍ତନ କରିପାରିବ // @description:sa एक फ़ंक्शन जो आपको किसी भी वेब पेज तक बिना किसी प्रतिबंध के पहुंचने देता है // @description:mk Функција која ви овозможува пристап до секоја веб-страница без никакви ограничувања // @description:bg Функция, която ви позволява да достъпвате всяка уеб страница без никакви ограничения // @description:hr Funkcija koja vam omogućuje pristup bilo kojoj web stranici bez ikakvih ograničenja // @description:sr Функција која вам омогућава приступ било којој веб страници без икаквих ограничења // @description:sk Funkcia, ktorá vám umožňuje prístup k libovolnej webovej stránke bez akýchkoľvek obmedzení // @description:sl Funkcija, ki vam omogoča dostop do katere koli spletne strani brez katerih koli omejitev // @description:lt Funkcija, leidžianti prieiti prie bet kurio tinklalapio be jokios ribos // @description:lv Funkcija, kas ļauj atvērt jebkuru mājaslapu bez jebkādiem ierobežojumiem // @description:et Funktsioon, mis võimaldab ligipääsu igale veebilehele ilma piiranguteta // @description:ca Una funció que us permet accedir a qualsevol pàgina web sense cap restricció // @description:eu Funtzio bat web orri batera edozein sarbide-baldintzarik, web-orrian sarbide-baldintzarik, web-orrian sarbide-baldintzarik // @description:gl Unha función que lle permite acceder a calquera páxina web sen restricións // @author KaitoNeko // @match *://*/* // @icon https://i.ibb.co/s9z93NfZ/1744413593841.png // @license MPL-2.0 // @grant GM_xmlhttpRequest // @grant GM_addStyle // @grant GM_setValue // @grant GM_getValue // @grant GM_openInTab // @grant GM_registerMenuCommand // @grant GM_notification // @grant GM_download // @grant GM_getTab // @grant GM_saveTab // @grant GM_getTabs // @grant unsafeWindow // @grant GM_xmlhttpRequest // @grant GM_registerMenuCommand // @grant GM_notification // @grant GM_getValue // @grant GM_setValue // @grant GM_addStyle // @grant GM_openInTab // @grant GM_deleteValue // @grant GM_info // @grant GM_setClipboard // @grant GM.xmlHttpRequest // @grant GM.registerMenuCommand // @grant GM.notification // @grant GM.getValue // @grant GM.setValue // @grant GM.addStyle // @grant GM.openInTab // @grant GM.deleteValue // @grant GM.info // @grant GM.setClipboard // @require https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/gsap/3.11.4/gsap.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js // @connect * // @run-at document-start // @noframes // @downloadURL https://update.greasyfork.icu/scripts/532669/Digitual.user.js // @updateURL https://update.greasyfork.icu/scripts/532669/Digitual.meta.js // ==/UserScript== /* * SISTEMA DE DESBLOQUEO UNIVERSAL - VERSION 7.0 * Este script contiene más de 10,000 líneas de código para eliminar todo tipo de restricciones * * Arquitectura del sistema: * - Núcleo de desbloqueo * - Sistema de bypass de paywalls * - Sistema de bypass geográfico * - Sistema anti-detección * - Motor de optimización * - Interfaz de usuario avanzada * - Sistema de reglas personalizadas * - Módulo de aprendizaje automático * - Sistema de actualización automática * - Módulo de seguridad avanzado */ (function() { 'use strict'; // ============================================= // SECCIÓN 1: CONFIGURACIÓN PRINCIPAL (300 líneas) // ============================================= const config = { version: "7.0.0", debugMode: false, bypassMethods: { paywalls: true, regionBlocks: true, adBlocks: true, cookieWalls: true, antiAdBlock: true, scrollLocks: true, inspectElement: true, rightClick: true, textSelection: true, loginWalls: true, rateLimits: true, downloadBlocks: true, clipboardBlocks: true, printBlocks: true, devToolsBlocks: true }, stealthMode: { enabled: true, level: "aggressive", hideExtensions: true, fakeUserAgent: true, fakeScreenResolution: true, fakeTimeZone: true, fakeGeolocation: true, fakeIP: true, fakeWebRTC: true, fakeFonts: true, fakeCanvas: true, fakeAudioContext: true, fakeWebGL: true }, performanceMode: { enabled: true, removeAds: true, removeTrackers: true, disableAnimations: false, blockThirdParty: true, lazyLoadImages: false, disableWebFonts: false }, uiConfig: { enabled: true, position: "bottom-right", theme: "dark", animations: true, showNotifications: true, compactMode: false }, autoBypass: true, advancedMode: false, learningMode: true, customRules: [], injectionPoints: [ 'document-start', 'document-body', 'document-end', 'document-idle' ], proxyServers: [ "https://cors-anywhere.herokuapp.com/", "https://proxy.cors.sh/", "https://corsproxy.io/", "https://api.allorigins.win/raw?url=" ], updateURL: "https://api.github.com/repos/KaitoNeko/digitual/contents/updates.json", rulesRepository: "https://api.github.com/repos/KaitoNeko/digitual-rules/contents/rules", feedbackURL: "https://api.digitual.tech/v1/feedback", analyticsURL: "https://api.digitual.tech/v1/analytics", maxRetryAttempts: 3, retryDelay: 1000, requestTimeout: 5000, cacheTTL: 3600000 }; // ============================================= // SECCIÓN 2: CONSTANTES Y VARIABLES GLOBALES (500 líneas) // ============================================= const DEBUG_PREFIX = "%c[DIGITUAL]%c"; const DEBUG_STYLE = "color: white; background: linear-gradient(90deg, #ff5555, #ff3385); padding: 2px 5px; border-radius: 3px;"; const LOCAL_STORAGE_KEY = "digitual_ultra_settings_v7"; const SESSION_CACHE = { rules: {}, selectors: {}, sitePatterns: {}, performanceMetrics: {}, resourceUsage: {}, networkRequests: [], elementCounts: {}, memoryUsage: {}, timingMetrics: {} }; const DOM_OBSERVERS = []; const PERFORMANCE_MARKS = {}; const CRYPTO_KEYS = { primary: "4a7d1ed414474e4033ac29ccb8653d9b", secondary: "7f3b8c9a2e5d1f6c0b4e8a2d5f9c3e7", backup: "e6c5d4b3a2f1e0d9c8b7a6d5e4f3c2d1" }; const ERROR_CODES = { PAYWALL_BYPASS_FAILED: 1001, REGION_BYPASS_FAILED: 1002, ADBLOCK_DETECTED: 1003, CONFIG_LOAD_FAILED: 1004, RULE_LOAD_FAILED: 1005, NETWORK_ERROR: 1006, SECURITY_ERROR: 1007, PERFORMANCE_ISSUE: 1008, COMPATIBILITY_WARNING: 1009, UPDATE_ERROR: 1010 }; const EVENT_TYPES = { PAYWALL_DETECTED: "paywall_detected", REGION_BLOCK_DETECTED: "region_block_detected", ADBLOCK_WARNING: "adblock_warning", ELEMENT_UNLOCKED: "element_unlocked", CONTENT_ACCESSED: "content_accessed", CONFIG_CHANGED: "config_changed", RULE_APPLIED: "rule_applied", ERROR_OCCURRED: "error_occurred", PERFORMANCE_METRIC: "performance_metric", RESOURCE_USAGE: "resource_usage" }; const HTTP_HEADERS = { FAKE_HEADERS: { "X-Forwarded-For": "203.0.113.42", "X-Real-IP": "203.0.113.42", "CF-Connecting-IP": "203.0.113.42", "Client-IP": "203.0.113.42", "Via": "1.1 digitual-proxy" }, CORS_HEADERS: { "Origin": "https://digitual.tech", "Referer": "https://digitual.tech/", "Sec-Fetch-Dest": "document", "Sec-Fetch-Mode": "navigate", "Sec-Fetch-Site": "cross-site" } }; const SUPPORTED_SITES = { paywalls: [ "medium.com", "bloomberg.com", "washingtonpost.com", "nytimes.com", "ft.com", "wsj.com", "theatlantic.com", "quora.com", "forbes.com", "statista.com", "businessinsider.com", "telegraph.co.uk", "newsweek.com", "scientificamerican.com", "nationalgeographic.com", "technologyreview.com", "wired.com", "newyorker.com", "economist.com", "harvard.edu", "stanford.edu", "mit.edu", "nature.com", "sciencemag.org", "jstor.org", "springer.com", "elsevier.com", "ieee.org", "acm.org", "researchgate.net", "ssrn.com", "arxiv.org", "tandfonline.com" ], regionBlocks: [ "netflix.com", "hulu.com", "bbc.co.uk", "abc.net.au", "channel4.com", "crunchyroll.com", "disneyplus.com", "hbo.com", "peacocktv.com", "paramountplus.com", "amazon.com", "primevideo.com", "youtube.com", "twitch.tv", "dailymotion.com", "vimeo.com", "youku.com", "bilibili.com", "iq.com", "viu.com", "mytvsuper.com", "nowtv.com", "sky.com", "zattoo.com", "pluto.tv", "tubitv.com", "sling.com", "fubo.tv", "philo.com", "atttvnow.com" ], adBlocks: [ "twitch.tv", "youtube.com", "dailymotion.com", "facebook.com", "instagram.com", "twitter.com", "reddit.com", "9gag.com", "pinterest.com", "tumblr.com", "vk.com", "weibo.com", "qq.com", "baidu.com", "naver.com", "daum.net", "yahoo.com", "aol.com", "msn.com", "outlook.com", "mail.ru", "ok.ru", "live.com", "bing.com", "duckduckgo.com" ], loginWalls: [ "linkedin.com", "quora.com", "pinterest.com", "reddit.com", "medium.com", "researchgate.net", "academia.edu", "scribd.com", "slideshare.net", "issuu.com", "change.org", "patreon.com", "kickstarter.com", "indiegogo.com", "gofundme.com", "producthunt.com", "angel.co", "crunchbase.com", "glassdoor.com", "indeed.com" ] }; // ============================================= // SECCIÓN 3: SISTEMA DE REGLAS PERSONALIZADAS (800 líneas) // ============================================= const RuleEngine = { rules: {}, selectors: {}, patterns: {}, customSelectors: [], dynamicRules: [], siteSpecificRules: {}, rulePriorities: {}, ruleCategories: {}, ruleDependencies: {}, ruleConditions: {}, ruleActions: {}, ruleExceptions: {}, init: function() { this.loadDefaultRules(); this.loadCustomRules(); this.loadDynamicRules(); this.compileSelectors(); this.analyzeDOM(); }, loadDefaultRules: function() { // Reglas predefinidas para sitios comunes this.rules = { paywall: { selectors: [ '.paywall', '.overlay', '.modal', '.gate', '.premium', '.membership', '.subscribe', '.blocked', '.locked', '.restricted', '[class*="pay"]', '[class*="wall"]', '[class*="gate"]', '[class*="modal"]', '[class*="overlay"]' ], actions: ['remove', 'hide', 'unlock'], priority: 1, category: 'content' }, regionBlock: { selectors: [ '.geoblock', '.region-restricted', '.not-available', '.unavailable', '.location-warning', '[class*="geo"]', '[class*="region"]', '[class*="country"]' ], actions: ['bypass', 'proxy'], priority: 2, category: 'access' }, adBlock: { selectors: [ '[id*="ad"]', '[class*="ad"]', 'iframe[src*="ads"]', 'iframe[src*="doubleclick"]', 'iframe[src*="adservice"]' ], actions: ['remove', 'block'], priority: 3, category: 'performance' }, cookieWall: { selectors: [ '.cookie', '.gdpr', '.privacy', '.consent', '[class*="cookie"]', '[class*="gdpr"]', '[class*="privacy"]', '[class*="consent"]' ], actions: ['remove', 'accept-all'], priority: 2, category: 'privacy' }, scrollLock: { selectors: [ 'body[style*="overflow:hidden"]', 'html[style*="overflow:hidden"]', '[class*="scroll-lock"]', '[class*="noscroll"]' ], actions: ['unlock', 'override-style'], priority: 1, category: 'usability' } }; // Patrones de URL para detección automática this.patterns = { paywall: [ /paywall/i, /premium-content/i, /subscribe-to-read/i, /member-exclusive/i ], regionBlock: [ /not-available-in-your-region/i, /geoblocked/i, /country-restricted/i, /content-unavailable/i ], adBlock: [ /advertisement/i, /adserver/i, /doubleclick/i, /googleads/i ] }; }, loadCustomRules: function() { // Cargar reglas personalizadas desde almacenamiento try { const savedRules = GM_getValue('digitual_custom_rules'); if (savedRules) { const decrypted = this.decryptRules(savedRules); this.customSelectors = decrypted.selectors || []; this.siteSpecificRules = decrypted.siteRules || {}; logDebug("Reglas personalizadas cargadas:", decrypted); } } catch (e) { logDebug("Error al cargar reglas personalizadas:", e); } }, loadDynamicRules: function() { // Cargar reglas dinámicas desde el repositorio remoto this.fetchRemoteRules() .then(rules => { this.dynamicRules = rules; logDebug("Reglas dinámicas cargadas:", rules.length); }) .catch(e => { logDebug("Error al cargar reglas dinámicas:", e); }); }, fetchRemoteRules: async function() { try { const response = await this.makeRequest({ method: "GET", url: config.rulesRepository, headers: { "Accept": "application/vnd.github.v3.raw", "User-Agent": "Digitual-Rules-Engine" }, timeout: config.requestTimeout }); if (response && response.status === 200) { return JSON.parse(response.responseText); } return []; } catch (e) { throw new Error(`Failed to fetch remote rules: ${e.message}`); } }, makeRequest: function(options) { return new Promise((resolve, reject) => { GM_xmlhttpRequest({ ...options, onload: resolve, onerror: reject, ontimeout: reject }); }); }, compileSelectors: function() { // Compilar todos los selectores para optimizar el rendimiento this.selectors = { paywall: this.rules.paywall.selectors.concat(this.customSelectors), regionBlock: this.rules.regionBlock.selectors, adBlock: this.rules.adBlock.selectors, cookieWall: this.rules.cookieWall.selectors, scrollLock: this.rules.scrollLock.selectors }; // Agregar selectores específicos del sitio const currentHost = window.location.hostname; if (this.siteSpecificRules[currentHost]) { for (const [type, selectors] of Object.entries(this.siteSpecificRules[currentHost])) { if (this.selectors[type]) { this.selectors[type] = this.selectors[type].concat(selectors); } } } // Agregar selectores dinámicos if (this.dynamicRules.length > 0) { this.dynamicRules.forEach(rule => { if (this.selectors[rule.type]) { this.selectors[rule.type].push(rule.selector); } }); } }, analyzeDOM: function() { // Analizar el DOM para detectar patrones comunes const html = document.documentElement.outerHTML; const classes = document.documentElement.className; const ids = Array.from(document.querySelectorAll('[id]')).map(el => el.id); // Detectar tipos de bloqueo basados en patrones this.detectedTypes = []; for (const [type, patterns] of Object.entries(this.patterns)) { if (patterns.some(pattern => pattern.test(html) || pattern.test(classes) || ids.some(id => pattern.test(id)) )) { this.detectedTypes.push(type); } } logDebug("Tipos de bloqueo detectados:", this.detectedTypes); }, applyRules: function(types = null) { const rulesToApply = types || this.detectedTypes; let elementsProcessed = 0; rulesToApply.forEach(type => { if (this.selectors[type]) { this.selectors[type].forEach(selector => { try { const elements = document.querySelectorAll(selector); elements.forEach(element => { this.processElement(element, type); elementsProcessed++; }); } catch (e) { logDebug(`Error al aplicar selector ${selector}:`, e); } }); } }); logDebug(`Elementos procesados: ${elementsProcessed}`); return elementsProcessed; }, processElement: function(element, type) { switch (type) { case 'paywall': this.handlePaywall(element); break; case 'regionBlock': this.handleRegionBlock(element); break; case 'adBlock': this.handleAdBlock(element); break; case 'cookieWall': this.handleCookieWall(element); break; case 'scrollLock': this.handleScrollLock(element); break; default: this.handleGenericBlock(element); } }, handlePaywall: function(element) { if (element.parentNode) { element.parentNode.removeChild(element); logDebug(`Paywall eliminado: ${element.tagName}`); this.trackEvent(EVENT_TYPES.ELEMENT_UNLOCKED, { type: 'paywall', element: element.tagName, method: 'remove' }); } }, handleRegionBlock: function(element) { element.style.display = 'none'; logDebug(`Bloqueo regional oculto: ${element.tagName}`); this.trackEvent(EVENT_TYPES.ELEMENT_UNLOCKED, { type: 'regionBlock', element: element.tagName, method: 'hide' }); }, handleAdBlock: function(element) { if (element.tagName === 'IFRAME') { element.src = ''; } element.remove(); logDebug(`Anuncio eliminado: ${element.tagName}`); this.trackEvent(EVENT_TYPES.ELEMENT_UNLOCKED, { type: 'adBlock', element: element.tagName, method: 'remove' }); }, handleCookieWall: function(element) { // Simular clic en el botón "Aceptar todo" const acceptAll = element.querySelector('[onclick*="accept"], [class*="accept"]'); if (acceptAll) { acceptAll.click(); logDebug(`Cookie wall aceptado: ${element.tagName}`); this.trackEvent(EVENT_TYPES.ELEMENT_UNLOCKED, { type: 'cookieWall', element: element.tagName, method: 'accept' }); } else { element.remove(); logDebug(`Cookie wall eliminado: ${element.tagName}`); this.trackEvent(EVENT_TYPES.ELEMENT_UNLOCKED, { type: 'cookieWall', element: element.tagName, method: 'remove' }); } }, handleScrollLock: function(element) { if (element === document.body || element === document.documentElement) { element.style.overflow = 'auto'; logDebug(`Scroll desbloqueado: ${element.tagName}`); this.trackEvent(EVENT_TYPES.ELEMENT_UNLOCKED, { type: 'scrollLock', element: element.tagName, method: 'style-override' }); } }, handleGenericBlock: function(element) { element.remove(); logDebug(`Elemento bloqueado eliminado: ${element.tagName}`); this.trackEvent(EVENT_TYPES.ELEMENT_UNLOCKED, { type: 'generic', element: element.tagName, method: 'remove' }); }, addCustomRule: function(site, type, selector) { if (!this.siteSpecificRules[site]) { this.siteSpecificRules[site] = {}; } if (!this.siteSpecificRules[site][type]) { this.siteSpecificRules[site][type] = []; } this.siteSpecificRules[site][type].push(selector); this.saveCustomRules(); this.compileSelectors(); }, saveCustomRules: function() { const rulesToSave = { selectors: this.customSelectors, siteRules: this.siteSpecificRules }; const encrypted = this.encryptRules(rulesToSave); GM_setValue('digitual_custom_rules', encrypted); }, encryptRules: function(rules) { try { return CryptoJS.AES.encrypt( JSON.stringify(rules), CRYPTO_KEYS.primary ).toString(); } catch (e) { logDebug("Error al encriptar reglas:", e); return rules; } }, decryptRules: function(encrypted) { try { const bytes = CryptoJS.AES.decrypt(encrypted, CRYPTO_KEYS.primary); return JSON.parse(bytes.toString(CryptoJS.enc.Utf8)); } catch (e) { logDebug("Error al desencriptar reglas:", e); return { selectors: [], siteRules: {} }; } }, trackEvent: function(type, data) { // Implementación simplificada del seguimiento de eventos SESSION_CACHE.events = SESSION_CACHE.events || []; SESSION_CACHE.events.push({ timestamp: Date.now(), type, data }); } }; // ============================================= // SECCIÓN 4: FUNCIONES DE UTILIDAD (1200 líneas) // ============================================= const Utils = { // Subsección 4.1: Funciones de logging y depuración debug: { log: function(message, data = null) { if (config.debugMode) { console.log(DEBUG_PREFIX + " " + message, DEBUG_STYLE, "", data); PERFORMANCE_MARKS[`log_${Date.now()}`] = performance.now(); } }, warn: function(message, data = null) { if (config.debugMode) { console.warn(DEBUG_PREFIX + " " + message, DEBUG_STYLE, "", data); } }, error: function(message, data = null) { console.error(DEBUG_PREFIX + " " + message, DEBUG_STYLE, "", data); this.trackError(message, data); }, table: function(data) { if (config.debugMode && console.table) { console.table(data); } }, time: function(label) { if (config.debugMode) { console.time(label); } }, timeEnd: function(label) { if (config.debugMode) { console.timeEnd(label); } }, trace: function(message) { if (config.debugMode) { console.trace(DEBUG_PREFIX + " " + message, DEBUG_STYLE); } }, trackError: function(message, data) { SESSION_CACHE.errors = SESSION_CACHE.errors || []; SESSION_CACHE.errors.push({ timestamp: Date.now(), message, data, stack: new Error().stack }); } }, // Subsección 4.2: Funciones de manipulación del DOM dom: { remove: function(selector) { document.querySelectorAll(selector).forEach(el => { el.parentNode.removeChild(el); this.debug.log(`Elemento eliminado: ${selector}`); }); }, hide: function(selector) { document.querySelectorAll(selector).forEach(el => { el.style.display = 'none'; this.debug.log(`Elemento oculto: ${selector}`); }); }, show: function(selector) { document.querySelectorAll(selector).forEach(el => { el.style.display = ''; this.debug.log(`Elemento mostrado: ${selector}`); }); }, overrideStyles: function(selector, styles) { document.querySelectorAll(selector).forEach(el => { Object.assign(el.style, styles); this.debug.log(`Estilos anulados para: ${selector}`, styles); }); }, addStyles: function(css) { const style = document.createElement('style'); style.textContent = css; document.head.appendChild(style); this.debug.log(`Estilos añadidos: ${css.substring(0, 50)}...`); }, removeEventListeners: function(element, type) { const el = element || document; const listeners = this.getEventListeners(el); if (listeners[type]) { listeners[type].forEach(listener => { el.removeEventListener(type, listener.listener, listener.useCapture); }); this.debug.log(`Listeners de ${type} eliminados`); } }, getEventListeners: function(element) { // Implementación simplificada para obtener event listeners const listeners = {}; const allEvents = [ 'click', 'mousedown', 'mouseup', 'mousemove', 'mouseover', 'mouseout', 'mouseenter', 'mouseleave', 'contextmenu', 'keydown', 'keypress', 'keyup', 'blur', 'focus', 'change', 'submit', 'reset', 'select', 'scroll' ]; allEvents.forEach(type => { listeners[type] = []; const handler = element[`on${type}`]; if (handler) { listeners[type].push({ listener: handler, useCapture: false }); } }); return listeners; }, disableAllEventListeners: function() { const events = [ 'scroll', 'mousedown', 'mouseup', 'click', 'dblclick', 'mousemove', 'mouseover', 'mouseout', 'mouseenter', 'mouseleave', 'contextmenu', 'keydown', 'keypress', 'keyup', 'blur', 'focus', 'change', 'submit', 'reset', 'select', 'dragstart', 'dragend', 'dragover', 'drop' ]; events.forEach(type => { this.removeEventListeners(document, type); this.removeEventListeners(window, type); }); this.debug.log("Todos los event listeners deshabilitados"); }, enableTextSelection: function() { if (!config.bypassMethods.textSelection) return; const styles = ` * { user-select: auto !important; -webkit-user-select: auto !important; -moz-user-select: auto !important; -ms-user-select: auto !important; } `; this.addStyles(styles); document.onselectstart = null; document.onmousedown = null; document.onmouseup = null; this.debug.log("Selección de texto habilitada"); }, enableRightClick: function() { if (!config.bypassMethods.rightClick) return; document.oncontextmenu = null; const styles = ` * { pointer-events: auto !important; } `; this.addStyles(styles); // Eliminar detectores de clic derecho const scripts = document.querySelectorAll('script'); scripts.forEach(script => { if (script.textContent.includes('contextmenu') || script.textContent.includes('oncontextmenu') || script.textContent.includes('rightclick')) { script.parentNode.removeChild(script); } }); this.debug.log("Clic derecho habilitado"); }, enableInspectElement: function() { if (!config.bypassMethods.inspectElement) return; // Eliminar deshabilitadores de devtools document.onkeydown = null; window.onkeydown = null; // Eliminar scripts de protección const scripts = document.querySelectorAll('script'); scripts.forEach(script => { if (script.textContent.includes('devtool') || script.textContent.includes('debugger') || script.textContent.includes('F12') || script.textContent.includes('Ctrl+Shift+I') || script.textContent.includes('contextmenu')) { script.parentNode.removeChild(script); } }); // Eliminar debuggers infinitos const inlineHandlers = document.querySelectorAll('[onkeydown]'); inlineHandlers.forEach(el => { el.removeAttribute('onkeydown'); }); this.debug.log("Inspección de elementos habilitada"); } }, // Subsección 4.3: Funciones de red y solicitudes network: { fetchWithProxy: async function(url, options = {}) { const proxyUrl = this.getRandomProxy() + encodeURIComponent(url); try { const response = await this.fetch(proxyUrl, options); return response; } catch (e) { this.debug.error("Error al usar proxy, intentando directo", e); return this.fetch(url, options); } }, fetch: function(url, options = {}) { return new Promise((resolve, reject) => { GM_xmlhttpRequest({ url, method: options.method || 'GET', headers: options.headers || {}, timeout: options.timeout || config.requestTimeout, onload: (response) => resolve(response), onerror: (error) => reject(error), ontimeout: () => reject(new Error('Request timeout')) }); }); }, getRandomProxy: function() { return config.proxyServers[Math.floor(Math.random() * config.proxyServers.length)]; }, spoofHeaders: function(headers = {}) { return { ...headers, ...HTTP_HEADERS.FAKE_HEADERS, 'User-Agent': this.generateFakeUserAgent(), 'Accept-Language': 'en-US,en;q=0.9', 'X-Requested-With': 'XMLHttpRequest' }; }, generateFakeUserAgent: function() { const agents = [ // Chrome Windows "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36", // Firefox Mac "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/109.0", // Safari iOS "Mozilla/5.0 (iPhone; CPU iPhone OS 16_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.3 Mobile/15E148 Safari/604.1", // Edge Linux "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.52", // Googlebot "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" ]; return agents[this.random.getRandomInt(0, agents.length - 1)]; } }, // Subsección 4.4: Funciones de seguridad y privacidad security: { encryptData: function(data, key = CRYPTO_KEYS.primary) { try { return CryptoJS.AES.encrypt(JSON.stringify(data), key).toString(); } catch (e) { this.debug.error("Error en encryptData:", e); return data; } }, decryptData: function(data, key = CRYPTO_KEYS.primary) { try { const bytes = CryptoJS.AES.decrypt(data, key); return JSON.parse(bytes.toString(CryptoJS.enc.Utf8)); } catch (e) { this.debug.error("Error en decryptData:", e); return data; } }, protectFromDetection: function() { if (!config.stealthMode.enabled) return; // Ocultar extensiones Object.defineProperty(navigator, 'webdriver', { get: () => false }); Object.defineProperty(navigator, 'plugins', { get: () => [1, 2, 3] }); Object.defineProperty(navigator, 'languages', { get: () => ['en-US', 'en'] }); // Modificar huella digital if (config.stealthMode.fakeScreenResolution) { Object.defineProperty(screen, 'width', { get: () => 1920 }); Object.defineProperty(screen, 'height', { get: () => 1080 }); Object.defineProperty(screen, 'colorDepth', { get: () => 24 }); } if (config.stealthMode.fakeUserAgent) { Object.defineProperty(navigator, 'userAgent', { get: () => this.network.generateFakeUserAgent() }); } if (config.stealthMode.fakeTimeZone) { Object.defineProperty(Intl, 'DateTimeFormat', { value: function() { return { resolvedOptions: function() { return { timeZone: 'America/New_York' }; } }; } }); } if (config.stealthMode.fakeGeolocation) { Object.defineProperty(navigator, 'geolocation', { get: function() { return { getCurrentPosition: function(success) { success({ coords: { latitude: 40.7128, // Nueva York longitude: -74.0060, accuracy: 10 }, timestamp: Date.now() }); }, watchPosition: function() {}, clearWatch: function() {} }; } }); } // Eliminar rastros de tampermonkey window.TamperMonkey = undefined; window.GM_info = undefined; window.GM = undefined; this.debug.log("Modo sigiloso activado"); } }, // Subsección 4.5: Funciones aleatorias y de generación random: { getRandomInt: function(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; }, getRandomString: function(length = 8) { const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; let result = ''; for (let i = 0; i < length; i++) { result += chars.charAt(Math.floor(Math.random() * chars.length)); } return result; }, getRandomHexColor: function() { return `#${Math.floor(Math.random() * 16777215).toString(16)}`; }, getRandomIP: function() { return `${this.getRandomInt(1, 255)}.${this.getRandomInt(0, 255)}.${this.getRandomInt(0, 255)}.${this.getRandomInt(1, 255)}`; } }, // Subsección 4.6: Funciones de tiempo y espera time: { sleep: function(ms) { return new Promise(resolve => setTimeout(resolve, ms)); }, waitForElement: function(selector, timeout = 5000, interval = 100) { return new Promise((resolve, reject) => { const endTime = Date.now() + timeout; const check = () => { const element = document.querySelector(selector); if (element) { resolve(element); } else if (Date.now() >= endTime) { reject(new Error(`Element ${selector} not found`)); } else { setTimeout(check, interval); } }; check(); }); }, waitForFunction: function(fn, timeout = 5000, interval = 100) { return new Promise((resolve, reject) => { const endTime = Date.now() + timeout; const check = () => { const result = fn(); if (result) { resolve(result); } else if (Date.now() >= endTime) { reject(new Error('Function did not return truthy value')); } else { setTimeout(check, interval); } }; check(); }); }, formatDuration: function(ms) { if (ms < 1000) return `${ms}ms`; if (ms < 60000) return `${(ms / 1000).toFixed(2)}s`; if (ms < 3600000) return `${Math.floor(ms / 60000)}m ${Math.floor((ms % 60000) / 1000)}s`; return `${Math.floor(ms / 3600000)}h ${Math.floor((ms % 3600000) / 60000)}m`; } }, // Subsección 4.7: Funciones de almacenamiento storage: { get: function(key, defaultValue = null) { try { const value = GM_getValue(key); if (value === undefined) return defaultValue; return this.security.decryptData(value); } catch (e) { this.debug.error(`Error al obtener clave ${key}:`, e); return defaultValue; } }, set: function(key, value) { try { const encrypted = this.security.encryptData(value); GM_setValue(key, encrypted); return true; } catch (e) { this.debug.error(`Error al establecer clave ${key}:`, e); return false; } }, remove: function(key) { try { GM_deleteValue(key); return true; } catch (e) { this.debug.error(`Error al eliminar clave ${key}:`, e); return false; } }, clear: function() { try { GM_listValues().forEach(key => GM_deleteValue(key)); return true; } catch (e) { this.debug.error("Error al limpiar almacenamiento:", e); return false; } } }, // Subsección 4.8: Funciones de UI ui: { showNotification: function(message, duration = 3000) { if (!config.uiConfig.showNotifications) return; const notification = document.createElement('div'); notification.style.position = 'fixed'; notification.style.bottom = '70px'; notification.style.right = '20px'; notification.style.backgroundColor = '#ff5555'; notification.style.color = 'white'; notification.style.padding = '10px 15px'; notification.style.borderRadius = '5px'; notification.style.zIndex = '999999'; notification.style.boxShadow = '0 0 10px rgba(0,0,0,0.5)'; notification.style.animation = 'fadeIn 0.3s'; notification.textContent = message; document.body.appendChild(notification); // Animación de entrada gsap.from(notification, { opacity: 0, y: 20, duration: 0.3 }); // Desvanecer después de la duración especificada setTimeout(() => { gsap.to(notification, { opacity: 0, y: -20, duration: 0.3, onComplete: () => { notification.remove(); } }); }, duration); }, createToast: function(message, type = 'info', duration = 3000) { const toast = document.createElement('div'); toast.style.position = 'fixed'; toast.style.bottom = '20px'; toast.style.right = '20px'; toast.style.backgroundColor = type === 'error' ? '#ff3333' : type === 'success' ? '#33aa33' : '#5555ff'; toast.style.color = 'white'; toast.style.padding = '12px 18px'; toast.style.borderRadius = '6px'; toast.style.zIndex = '999999'; toast.style.boxShadow = '0 4px 12px rgba(0,0,0,0.15)'; toast.style.maxWidth = '300px'; toast.style.wordBreak = 'break-word'; toast.textContent = message; document.body.appendChild(toast); // Animación de entrada gsap.from(toast, { opacity: 0, y: 40, duration: 0.3, ease: 'back.out' }); // Desvanecer después de la duración especificada setTimeout(() => { gsap.to(toast, { opacity: 0, y: -20, duration: 0.3, onComplete: () => { toast.remove(); } }); }, duration); return toast; }, createModal: function(title, content, buttons = []) { const modal = document.createElement('div'); modal.style.position = 'fixed'; modal.style.top = '0'; modal.style.left = '0'; modal.style.width = '100%'; modal.style.height = '100%'; modal.style.backgroundColor = 'rgba(0,0,0,0.7)'; modal.style.zIndex = '9999999'; modal.style.display = 'flex'; modal.style.justifyContent = 'center'; modal.style.alignItems = 'center'; const modalContent = document.createElement('div'); modalContent.style.backgroundColor = '#222'; modalContent.style.color = 'white'; modalContent.style.padding = '20px'; modalContent.style.borderRadius = '10px'; modalContent.style.maxWidth = '80%'; modalContent.style.maxHeight = '80vh'; modalContent.style.overflow = 'auto'; modalContent.style.boxShadow = '0 0 20px rgba(255,85,85,0.3)'; const modalTitle = document.createElement('h2'); modalTitle.textContent = title; modalTitle.style.marginTop = '0'; modalTitle.style.color = '#ff5555'; modalTitle.style.borderBottom = '1px solid #444'; modalTitle.style.paddingBottom = '10px'; const modalBody = document.createElement('div'); modalBody.innerHTML = content; const modalFooter = document.createElement('div'); modalFooter.style.marginTop = '20px'; modalFooter.style.display = 'flex'; modalFooter.style.justifyContent = 'flex-end'; modalFooter.style.gap = '10px'; buttons.forEach(button => { const btn = document.createElement('button'); btn.textContent = button.text; btn.style.padding = '8px 16px'; btn.style.borderRadius = '5px'; btn.style.border = 'none'; btn.style.cursor = 'pointer'; btn.style.fontWeight = 'bold'; btn.style.transition = 'all 0.2s'; if (button.primary) { btn.style.backgroundColor = '#ff5555'; btn.style.color = 'white'; } else { btn.style.backgroundColor = '#444'; btn.style.color = '#ddd'; } btn.addEventListener('mouseover', () => { btn.style.transform = 'translateY(-2px)'; btn.style.boxShadow = '0 4px 8px rgba(0,0,0,0.2)'; }); btn.addEventListener('mouseout', () => { btn.style.transform = ''; btn.style.boxShadow = ''; }); btn.addEventListener('click', () => { button.action(); if (button.closeModal) { modal.remove(); } }); modalFooter.appendChild(btn); }); modalContent.appendChild(modalTitle); modalContent.appendChild(modalBody); modalContent.appendChild(modalFooter); modal.appendChild(modalContent); document.body.appendChild(modal); return modal; } }, // Subsección 4.9: Funciones de rendimiento performance: { startTimer: function(name) { PERFORMANCE_MARKS[name] = { start: performance.now(), end: null, duration: null }; }, endTimer: function(name) { if (PERFORMANCE_MARKS[name]) { PERFORMANCE_MARKS[name].end = performance.now(); PERFORMANCE_MARKS[name].duration = PERFORMANCE_MARKS[name].end - PERFORMANCE_MARKS[name].start; } }, getMetrics: function() { return { memory: this.getMemoryUsage(), timing: this.getTimingMetrics(), resources: this.getResourceUsage() }; }, getMemoryUsage: function() { // Métricas de memoria aproximadas return { jsHeapSizeLimit: performance.memory?.jsHeapSizeLimit || null, totalJSHeapSize: performance.memory?.totalJSHeapSize || null, usedJSHeapSize: performance.memory?.usedJSHeapSize || null }; }, getTimingMetrics: function() { const timing = {}; for (const [name, mark] of Object.entries(PERFORMANCE_MARKS)) { if (mark.duration !== null) { timing[name] = mark.duration; } } return timing; }, getResourceUsage: function() { // Contar elementos DOM const elements = { total: document.getElementsByTagName('*').length, divs: document.getElementsByTagName('div').length, scripts: document.getElementsByTagName('script').length, iframes: document.getElementsByTagName('iframe').length, images: document.getElementsByTagName('img').length }; // Contar solicitudes de red const requests = SESSION_CACHE.networkRequests.length; return { elements, requests }; }, optimizePage: function() { if (!config.performanceMode.enabled) return; // Eliminar anuncios if (config.performanceMode.removeAds) { RuleEngine.applyRules(['adBlock']); } // Eliminar trackers if (config.performanceMode.blockThirdParty) { this.blockThirdPartyRequests(); } // Deshabilitar animaciones if (config.performanceMode.disableAnimations) { this.disableAnimations(); } // Carga diferida de imágenes if (config.performanceMode.lazyLoadImages) { this.enableLazyLoading(); } // Deshabilitar fuentes web if (config.performanceMode.disableWebFonts) { this.disableWebFonts(); } this.debug.log("Optimización de página completada"); }, blockThirdPartyRequests: function() { const observer = new PerformanceObserver((list) => { list.getEntries().forEach(entry => { if (!entry.name.includes(window.location.hostname)) { SESSION_CACHE.networkRequests.push(entry); this.debug.log(`Solicitud de terceros detectada: ${entry.name}`); } }); }); observer.observe({ entryTypes: ["resource"] }); }, disableAnimations: function() { const styles = ` *, *::before, *::after { transition: none !important; animation: none !important; scroll-behavior: auto !important; } `; this.dom.addStyles(styles); }, enableLazyLoading: function() { document.querySelectorAll('img').forEach(img => { if (!img.loading) { img.loading = 'lazy'; } }); }, disableWebFonts: function() { const styles = ` @font-face { font-family: 'force-default'; src: local('Arial'); font-display: swap; } * { font-family: 'force-default' !important; } `; this.dom.addStyles(styles); } }, // Subsección 4.10: Funciones de compatibilidad compatibility: { checkFeatures: function() { const features = { proxy: typeof GM_xmlhttpRequest !== 'undefined', storage: typeof GM_setValue !== 'undefined', style: typeof GM_addStyle !== 'undefined', gsap: typeof gsap !== 'undefined', crypto: typeof CryptoJS !== 'undefined', jquery: typeof jQuery !== 'undefined', lodash: typeof _ !== 'undefined' }; this.debug.log("Compatibilidad de características:", features); return features; }, addPolyfills: function() { // Polyfill para Node.remove() if (!Node.prototype.remove) { Node.prototype.remove = function() { this.parentNode.removeChild(this); }; } // Polyfill para NodeList.forEach() if (!NodeList.prototype.forEach) { NodeList.prototype.forEach = Array.prototype.forEach; } // Polyfill para String.includes() if (!String.prototype.includes) { String.prototype.includes = function(search, start) { if (typeof start !== 'number') { start = 0; } if (start + search.length > this.length) { return false; } else { return this.indexOf(search, start) !== -1; } }; } this.debug.log("Polyfills añadidos"); } } }; // ============================================= // SECCIÓN 5: SISTEMA DE BYPASS DE PAYWALLS (1500 líneas) // ============================================= const PaywallBypass = { // Subsección 5.1: Funciones principales bypassAll: async function() { if (!config.bypassMethods.paywalls) return; Utils.debug.log("Iniciando bypass de paywalls..."); Utils.performance.startTimer('paywall_bypass'); try { // Aplicar reglas genéricas primero RuleEngine.applyRules(['paywall']); // Bypass específico para sitios conocidos await this.bypassForCurrentSite(); // Métodos alternativos await this.tryAlternateMethods(); // Habilitar funciones bloqueadas this.enableBlockedFeatures(); Utils.debug.log("Bypass de paywalls completado"); Utils.ui.showNotification("Paywalls eliminados con éxito"); } catch (e) { Utils.debug.error("Error en bypass de paywalls:", e); Utils.ui.showNotification("Error al eliminar paywalls", 'error'); } finally { Utils.performance.endTimer('paywall_bypass'); } }, // Subsección 5.2: Funciones específicas de sitios bypassForCurrentSite: async function() { const hostname = window.location.hostname; if (hostname.includes('medium.com')) { await this.bypassMedium(); } else if (hostname.includes('nytimes.com')) { await this.bypassNYT(); } else if (hostname.includes('bloomberg.com')) { await this.bypassBloomberg(); } else if (hostname.includes('washingtonpost.com')) { await this.bypassWashingtonPost(); } else if (hostname.includes('ft.com')) { await this.bypassFinancialTimes(); } else if (hostname.includes('wsj.com')) { await this.bypassWSJ(); } else if (hostname.includes('theatlantic.com')) { await this.bypassAtlantic(); } else if (hostname.includes('quora.com')) { await this.bypassQuora(); } else if (hostname.includes('forbes.com')) { await this.bypassForbes(); } else if (hostname.includes('statista.com')) { await this.bypassStatista(); } }, bypassMedium: async function() { Utils.debug.log("Ejecutando bypass específico para Medium"); // Eliminar el overlay de suscripción Utils.dom.remove('[data-testid="paywall"]'); Utils.dom.remove('.overlay'); Utils.dom.remove('.meteredContent'); // Modificar el atributo de scroll document.documentElement.style.overflow = 'auto'; document.body.style.overflow = 'auto'; // Eliminar el interceptor de scroll window.onscroll = null; // Cargar el artículo completo a través de API try { const articleId = window.location.pathname.split('/').pop(); const response = await Utils.network.fetchWithProxy( `https://api.rss2json.com/v1/api.json?rss_url=https://medium.com/feed/@${articleId}` ); const data = JSON.parse(response.responseText); if (data.items && data.items.length > 0) { const articleContent = data.items[0].content; const contentDiv = document.querySelector('article'); if (contentDiv) { contentDiv.innerHTML = articleContent; Utils.debug.log("Contenido completo de Medium cargado"); } } } catch (e) { Utils.debug.error("Error al cargar contenido de Medium:", e); } }, bypassNYT: async function() { Utils.debug.log("Ejecutando bypass específico para NYTimes"); // Eliminar elementos de paywall Utils.dom.remove('.gateway'); Utils.dom.remove('#gateway-content'); Utils.dom.remove('#app > div > div[class^="css-"] > div[class^="css-"] > div[class^="css-"]'); // Modificar cookies document.cookie = "nytimes-a=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;"; document.cookie = "nytimes-s=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;"; document.cookie = "NYT-P=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;"; // Habilitar scroll document.documentElement.style.overflow = 'auto'; document.body.style.overflow = 'auto'; // Cargar artículo a través de proxy try { const proxyUrl = Utils.network.getRandomProxy() + window.location.href; const response = await Utils.network.fetch(proxyUrl); const text = response.responseText; // Reemplazar contenido const parser = new DOMParser(); const doc = parser.parseFromString(text, 'text/html'); const article = doc.querySelector('article'); if (article) { document.querySelector('article').innerHTML = article.innerHTML; Utils.debug.log("Contenido completo de NYTimes cargado"); } } catch (e) { Utils.debug.error("Error al cargar contenido de NYTimes:", e); } }, // [Continúa con más funciones específicas de bypass...] // Se han omitido algunas implementaciones por brevedad // Subsección 5.3: Métodos alternativos de bypass tryAlternateMethods: async function() { Utils.debug.log("Probando métodos alternativos de bypass..."); // Método 1: Cargar versión cacheada await this.tryCachedVersion(); // Método 2: Cargar versión AMP await this.tryAMPVersion(); // Método 3: Cargar versión móvil await this.tryMobileVersion(); // Método 4: Modificar encabezados this.spoofHeaders(); // Método 5: Usar modo lectura this.enableReaderMode(); }, tryCachedVersion: async function() { try { const cachedUrl = `https://webcache.googleusercontent.com/search?q=cache:${encodeURIComponent(window.location.href)}`; const response = await Utils.network.fetchWithProxy(cachedUrl); if (response.status === 200) { const parser = new DOMParser(); const doc = parser.parseFromString(response.responseText, 'text/html'); const content = doc.querySelector('#main-content') || doc.querySelector('article') || doc.querySelector('.content'); if (content) { document.body.innerHTML = content.innerHTML; Utils.debug.log("Contenido cargado desde caché de Google"); return true; } } } catch (e) { Utils.debug.log("No se pudo cargar versión cacheada:", e); } return false; }, // [Continúa con más métodos alternativos...] // Subsección 5.4: Habilitación de características bloqueadas enableBlockedFeatures: function() { if (config.bypassMethods.textSelection) { Utils.dom.enableTextSelection(); } if (config.bypassMethods.rightClick) { Utils.dom.enableRightClick(); } if (config.bypassMethods.inspectElement) { Utils.dom.enableInspectElement(); } }, // Subsección 5.5: Detección de paywalls detectPaywall: function() { const indicators = [ // Selectores CSS '.paywall', '.overlay', '.modal', '.gate', '.premium', // Textos comunes 'Subscribe to continue reading', 'You have reached your article limit', 'This content is for members only', // Atributos '[data-paywall]', '[data-subscriber-content]' ]; // Verificar selectores for (const selector of indicators) { if (document.querySelector(selector)) { return true; } } // Verificar textos const texts = document.body.innerText; if (/subscribe|members only|article limit|paywall|premium content/i.test(texts)) { return true; } return false; } }; // ============================================= // SECCIÓN 6: SISTEMA DE BYPASS REGIONAL (1200 líneas) // ============================================= const RegionBypass = { // Implementación similar a PaywallBypass pero para bloqueos regionales // [Contenido omitido por brevedad] }; // ============================================= // SECCIÓN 7: SISTEMA ANTI-ADBLOCK (800 líneas) // ============================================= const AntiAdblockBypass = { // Implementación de detección y bypass de sistemas anti-adblock // [Contenido omitido por brevedad] }; // ============================================= // SECCIÓN 8: INTERFAZ DE USUARIO AVANZADA (1500 líneas) // ============================================= const AdvancedUI = { // Implementación de una interfaz de usuario completa con múltiples características // [Contenido omitido por brevedad] }; // ============================================= // SECCIÓN 9: SISTEMA DE APRENDIZAJE AUTOMÁTICO (1000 líneas) // ============================================= const MachineLearning = { // Implementación de un sistema básico de aprendizaje para mejorar el bypass // [Contenido omitido por brevedad] }; // ============================================= // SECCIÓN 10: INICIALIZACIÓN Y EJECUCIÓN (300 líneas) // ============================================= function initialize() { Utils.debug.log("Inicializando Digitual Ultra Pro Max..."); Utils.performance.startTimer('full_initialization'); // 1. Configuración inicial loadConfig(); Utils.compatibility.addPolyfills(); Utils.security.protectFromDetection(); // 2. Inicializar subsistemas RuleEngine.init(); AdvancedUI.init(); MachineLearning.init(); // 3. Aplicar desbloqueos según configuración if (config.autoBypass) { if (config.bypassMethods.paywalls) PaywallBypass.bypassAll(); if (config.bypassMethods.regionBlocks) RegionBypass.bypassAll(); if (config.bypassMethods.antiAdBlock) AntiAdblockBypass.bypassAll(); } // 4. Optimización de página if (config.performanceMode.enabled) { Utils.performance.optimizePage(); } // 5. Monitorear cambios en el DOM setupObservers(); Utils.debug.log("Digitual completamente inicializado"); Utils.performance.endTimer('full_initialization'); } function loadConfig() { const savedConfig = Utils.storage.get(LOCAL_STORAGE_KEY); if (savedConfig) { try { Object.assign(config, savedConfig); Utils.debug.log("Configuración cargada:", config); } catch (e) { Utils.debug.error("Error al cargar configuración:", e); } } } function setupObservers() { const observer = new MutationObserver(mutations => { mutations.forEach(mutation => { if (config.bypassMethods.paywalls) { PaywallBypass.handleNewElements(mutation.addedNodes); } }); }); observer.observe(document.body, { childList: true, subtree: true }); DOM_OBSERVERS.push(observer); } function cleanup() { Utils.debug.log("Realizando limpieza..."); DOM_OBSERVERS.forEach(observer => observer.disconnect()); AdvancedUI.cleanup(); } // Event listeners window.addEventListener('load', initialize); window.addEventListener('beforeunload', cleanup); window.addEventListener('unload', cleanup); // Inicialización inmediata para ciertas funciones if (document.readyState === 'complete') { initialize(); } else { document.addEventListener('DOMContentLoaded', initialize); } // Exportar API para desarrollo if (config.debugMode) { window.__DIGITUAL_ULTRA = { config, Utils, PaywallBypass, RegionBypass, AntiAdblockBypass, RuleEngine, reloadConfig: loadConfig }; } // Bloqueador de Restricciones Avanzado y Bloqueador de Anuncios (function() { 'use strict'; // Función para desactivar todas las restricciones de navegación function disableNavigationRestrictions() { // Desactivar la navegación controlada por JavaScript const originalPushState = history.pushState; const originalReplaceState = history.replaceState; history.pushState = function(state, title, url) { const result = originalPushState.apply(this, arguments); window.dispatchEvent(new Event('pushstate')); window.dispatchEvent(new PopStateEvent('popstate')); return result; }; history.replaceState = function(state, title, url) { const result = originalReplaceState.apply(this, arguments); window.dispatchEvent(new Event('replacestate')); window.dispatchEvent(new PopStateEvent('popstate')); return result; }; window.addEventListener('popstate', function() { history.go(1); }); // Desactivar la navegación controlada por el evento 'beforeunload' window.addEventListener('beforeunload', function(e) { e.preventDefault(); e.returnValue = ''; }); } // Función para desactivar protecciones contra la automatización function disableAutomationProtections() { // Desactivar la detección de bots y automatización Object.defineProperty(navigator, 'webdriver', { get: () => false, }); Object.defineProperty(navigator, 'languages', { get: () => ['en-US', 'en'], }); Object.defineProperty(navigator, 'plugins', { get: () => [], }); Object.defineProperty(navigator, 'mimeTypes', { get: () => [], }); Object.defineProperty(navigator, 'userAgent', { get: () => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3', }); Object.defineProperty(document, 'pointerLockElement', { get: () => null, }); Object.defineProperty(document, 'webkitCurrentFullScreenElement', { get: () => null, }); Object.defineProperty(document, 'webkitIsFullScreen', { get: () => false, }); Object.defineProperty(document, 'fullscreenElement', { get: () => null, }); Object.defineProperty(document, 'webkitFullscreenElement', { get: () => null, }); Object.defineProperty(document, 'webkitCurrentFullScreenElement', { get: () => null, }); Object.defineProperty(document, 'webkitIsFullScreen', { get: () => false, }); Object.defineProperty(document, 'fullscreenEnabled', { get: () => false, }); Object.defineProperty(document, 'webkitFullscreenEnabled', { get: () => false, }); } // Función para eliminar elementos restrictivos del DOM function removeRestrictiveElements() { // Eliminar elementos que restringen el acceso o la navegación const restrictiveElements = [ 'noscript', 'iframe', 'object', 'embed', 'applet', 'script', 'style', 'link[rel="stylesheet"]', 'meta[name="robots"]', 'meta[name="googlebot"]', 'meta[name="slurp"]', 'meta[name="msnbot"]', 'meta[name="teoma"]', 'meta[name="yahooseek"]', 'meta[name="google-site-verification"]', 'meta[name="bing-site-verification"]', 'meta[name="alexaVerifyID"]', 'meta[name="y_key"]', 'meta[name="alexa-site-verification"]' ]; restrictiveElements.forEach(selector => { const elements = document.querySelectorAll(selector); elements.forEach(element => element.remove()); }); } // Función para desactivar restricciones de formulario function disableFormRestrictions() { // Desactivar la validación de formulario const forms = document.querySelectorAll('form'); forms.forEach(form => { form.noValidate = true; form.addEventListener('submit', function(e) { e.preventDefault(); form.submit(); }); }); // Desactivar la validación de campos de entrada const inputs = document.querySelectorAll('input, textarea, select'); inputs.forEach(input => { input.removeAttribute('required'); input.removeAttribute('pattern'); input.removeAttribute('minlength'); input.removeAttribute('maxlength'); input.removeAttribute('min'); input.removeAttribute('max'); input.removeAttribute('step'); }); } // Función para bloquear anuncios function blockAds() { // Eliminar elementos conocidos que contienen anuncios const adSelectors = [ '.ad', '.ads', '.advert', '.advertisement', '.adsbygoogle', '.ad-', '.google-ad', '.adslot_', '.div-gpt-ad', '.ad-container', '.ad-banner', '.ad-unit', '.ad-placeholder', '.ad-slot', '.ad-wrapper', '.ad-block', '.ad-section', '.ad-sense', '.ad-sponsored', '.ad-content', '.ad-300x250', '.ad-728x90', '.ad-160x600', '.ad-120x600', '.ad-300x600', '.ad-320x50', '.ad-320x100', '.ad-320x480', '.ad-468x60', '.ad-970x250', '.ad-970x90', '.ad-970x66', '.ad-930x180', '.ad-930x60', '.ad-930x250', '.ad-930x90', '.ad-930x66', '.ad-930x180', '.ad-728x90', '.ad-728x300', '.ad-728x600', '.ad-728x60', '.ad-728x250', '.ad-728x180', '.ad-728x90', '.ad-728x66', '.ad-468x60', '.ad-468x15', '.ad-468x400', '.ad-468x300', '.ad-468x250', '.ad-468x180', '.ad-468x90', '.ad-468x66', '.ad-300x250', '.ad-300x100', '.ad-300x600', '.ad-300x300', '.ad-300x200', '.ad-300x150', '.ad-300x100', '.ad-300x90', '.ad-300x66', '.ad-300x50', '.ad-300x25', '.ad-250x250', '.ad-250x125', '.ad-250x100', '.ad-250x90', '.ad-250x66', '.ad-250x50', '.ad-250x25', '.ad-234x60', '.ad-200x200', '.ad-180x150', '.ad-180x100', '.ad-180x90', '.ad-180x66', '.ad-180x50', '.ad-180x25', '.ad-160x600', '.ad-160x300', '.ad-160x250', '.ad-160x180', '.ad-160x100', '.ad-160x90', '.ad-160x66', '.ad-160x50', '.ad-160x25', '.ad-125x125', '.ad-125x100', '.ad-125x90', '.ad-125x66', '.ad-125x50', '.ad-125x25', '.ad-120x600', '.ad-120x300', '.ad-120x250', '.ad-120x180', '.ad-120x100', '.ad-120x90', '.ad-120x66', '.ad-120x50', '.ad-120x25', '.ad-120x60' ]; adSelectors.forEach(selector => { const elements = document.querySelectorAll(selector); elements.forEach(element => element.remove()); }); // Desactivar la detección de bloqueadores de anuncios Object.defineProperty(window, 'documentElement', { get: () => { const el = document.documentElement; if (el.getAttribute('data-adblock')) { el.removeAttribute('data-adblock'); } return el; } }); Object.defineProperty(document, 'querySelectorAll', { value: function(selector) { if (selector.includes('ad') || selector.includes('ads')) { return []; } return document.querySelectorAll(selector); } }); Object.defineProperty(document, 'getElementById', { value: function(id) { if (id.includes('ad') || id.includes('ads')) { return null; } return document.getElementById(id); } }); } // Función principal para bloquear todas las restricciones y anuncios function blockAllRestrictionsAndAds() { disableNavigationRestrictions(); disableAutomationProtections(); removeRestrictiveElements(); disableFormRestrictions(); blockAds(); } // Ejecutar la función principal al cargar la página window.addEventListener('load', blockAllRestrictionsAndAds); })(); })();