Paywall Smasher for Grok

Smashes through paywalls enabling instant access to premium features like magic

Size

6.2 KB

Version

1.1.1

Created

Mar 23, 2026

Updated

25 days ago

1// ==UserScript==
2// @name		Paywall Smasher for Grok
3// @description		Smashes through paywalls enabling instant access to premium features like magic
4// @version		1.1.1
5// @match		https://*.grok.com/*
6// @icon		https://grok.com/images/favicon.ico
7// ==/UserScript==
8(function() {
9    'use strict';
10
11    console.log('🔨 Paywall Smasher for Grok activated!');
12
13    // Utility function to debounce repeated calls
14    function debounce(func, wait) {
15        let timeout;
16        return function executedFunction(...args) {
17            const later = () => {
18                clearTimeout(timeout);
19                func(...args);
20            };
21            clearTimeout(timeout);
22            timeout = setTimeout(later, wait);
23        };
24    }
25
26    // Remove upgrade buttons and premium prompts
27    function smashUpgradeButtons() {
28        const upgradeButtons = document.querySelectorAll('button');
29        let removed = 0;
30        
31        upgradeButtons.forEach(button => {
32            const text = button.textContent.toLowerCase();
33            if (text.includes('upgrade') || text.includes('premium') || text.includes('subscribe')) {
34                button.style.display = 'none';
35                removed++;
36                console.log('🔨 Removed upgrade button:', button.textContent);
37            }
38        });
39        
40        if (removed > 0) {
41            console.log(`🔨 Smashed ${removed} upgrade prompts!`);
42        }
43    }
44
45    // Remove paywall overlays and modals
46    function smashOverlays() {
47        const overlaySelectors = [
48            '[class*="paywall"]',
49            '[class*="overlay"][class*="premium"]',
50            '[class*="modal"][class*="upgrade"]',
51            '[class*="subscription"]',
52            '[data-testid*="paywall"]',
53            '[data-testid*="premium"]',
54            '[role="dialog"][data-state="open"]',
55            '[data-state="open"][class*="fixed"][class*="inset"]',
56            'div[class*="fixed"][class*="z-50"][class*="bg-overlay"]',
57            'div[role="dialog"]'
58        ];
59        
60        let removed = 0;
61        overlaySelectors.forEach(selector => {
62            const elements = document.querySelectorAll(selector);
63            elements.forEach(el => {
64                if (el.style.display !== 'none') {
65                    el.style.display = 'none';
66                    el.remove();
67                    removed++;
68                    console.log('🔨 Removed overlay:', selector);
69                }
70            });
71        });
72        
73        if (removed > 0) {
74            console.log(`🔨 Smashed ${removed} overlays!`);
75        }
76    }
77
78    // Unlock locked features
79    function unlockFeatures() {
80        const lockedElements = document.querySelectorAll('[class*="lock"], [class*="disabled"][class*="premium"], [aria-disabled="true"]');
81        let unlocked = 0;
82        
83        lockedElements.forEach(el => {
84            // Remove disabled attributes
85            el.removeAttribute('disabled');
86            el.removeAttribute('aria-disabled');
87            
88            // Remove lock classes
89            const classes = Array.from(el.classList);
90            classes.forEach(cls => {
91                if (cls.includes('lock') || cls.includes('disabled')) {
92                    el.classList.remove(cls);
93                }
94            });
95            
96            // Make clickable
97            el.style.pointerEvents = 'auto';
98            el.style.opacity = '1';
99            unlocked++;
100        });
101        
102        if (unlocked > 0) {
103            console.log(`🔨 Unlocked ${unlocked} premium features!`);
104        }
105    }
106
107    // Remove blur effects on premium content
108    function removeBlur() {
109        const blurredElements = document.querySelectorAll('[style*="blur"], [class*="blur"]');
110        let cleared = 0;
111        
112        blurredElements.forEach(el => {
113            el.style.filter = 'none';
114            el.style.webkitFilter = 'none';
115            
116            const classes = Array.from(el.classList);
117            classes.forEach(cls => {
118                if (cls.includes('blur')) {
119                    el.classList.remove(cls);
120                }
121            });
122            cleared++;
123        });
124        
125        if (cleared > 0) {
126            console.log(`🔨 Removed blur from ${cleared} elements!`);
127        }
128    }
129
130    // Enable scrolling if disabled by paywall
131    function enableScrolling() {
132        document.body.style.overflow = 'auto';
133        document.documentElement.style.overflow = 'auto';
134        document.body.style.position = 'static';
135    }
136
137    // Main smashing function
138    function smashPaywalls() {
139        smashUpgradeButtons();
140        smashOverlays();
141        unlockFeatures();
142        removeBlur();
143        enableScrolling();
144    }
145
146    // Run immediately
147    smashPaywalls();
148
149    // Watch for dynamic content changes
150    const debouncedSmash = debounce(smashPaywalls, 500);
151    
152    const observer = new MutationObserver(debouncedSmash);
153    
154    observer.observe(document.body, {
155        childList: true,
156        subtree: true,
157        attributes: true,
158        attributeFilter: ['class', 'style', 'disabled', 'aria-disabled']
159    });
160
161    console.log('🔨 Paywall Smasher is watching for new paywalls...');
162
163    // Run periodically as backup
164    setInterval(smashPaywalls, 3000);
165
166    // Intercept and modify fetch requests to bypass API restrictions
167    const originalFetch = window.fetch;
168    window.fetch = function(...args) {
169        return originalFetch.apply(this, args).then(response => {
170            // Clone response to read it
171            const clonedResponse = response.clone();
172            
173            // Try to modify premium checks in responses
174            clonedResponse.json().then(data => {
175                if (data && typeof data === 'object') {
176                    // Modify common premium flags
177                    if ('isPremium' in data) data.isPremium = true;
178                    if ('hasAccess' in data) data.hasAccess = true;
179                    if ('isSubscribed' in data) data.isSubscribed = true;
180                    if ('tier' in data) data.tier = 'premium';
181                }
182            }).catch(() => {
183                // Not JSON, ignore
184            });
185            
186            return response;
187        });
188    };
189
190    console.log('🔨 Paywall Smasher fully activated! All paywalls will be destroyed! 💥');
191})();