Linkvertise & Luarmor Auto Bypass

Automatically bypass Linkvertise and Luarmor ads without bans

Size

8.8 KB

Version

1.1.1

Created

Mar 20, 2026

Updated

28 days ago

1// ==UserScript==
2// @name		Linkvertise & Luarmor Auto Bypass
3// @description		Automatically bypass Linkvertise and Luarmor ads without bans
4// @version		1.1.1
5// @match		https://*.rip.linkvertise.lol/*
6// @match		https://*.luarmor.net/*
7// @match		https://luarmor.net/*
8// @match		https://*.linkvertise.com/*
9// @match		https://linkvertise.com/*
10// @icon		https://rip.linkvertise.lol/favicon.ico
11// ==/UserScript==
12(function() {
13    'use strict';
14
15    console.log('Linkvertise & Luarmor Auto Bypass extension loaded');
16
17    // Detect which site we're on
18    const currentUrl = window.location.href;
19    const isLinkvertise = currentUrl.includes('linkvertise.com');
20    const isLuarmor = currentUrl.includes('luarmor.net');
21    const isBypassTool = currentUrl.includes('rip.linkvertise.lol');
22
23    // Configuration for human-like behavior to avoid bans
24    const config = {
25        minDelay: 2000,  // Minimum delay in ms
26        maxDelay: 4000,  // Maximum delay in ms
27        scrollDelay: 500, // Delay between scroll actions
28        clickDelay: 1000  // Delay before clicking
29    };
30
31    // Utility function to wait with random delay
32    function randomDelay(min = config.minDelay, max = config.maxDelay) {
33        return new Promise(resolve => {
34            const delay = Math.floor(Math.random() * (max - min + 1)) + min;
35            console.log(`Waiting ${delay}ms to appear human-like...`);
36            setTimeout(resolve, delay);
37        });
38    }
39
40    // Simulate human-like scrolling
41    async function humanScroll() {
42        console.log('Simulating human scroll behavior...');
43        const scrollAmount = Math.floor(Math.random() * 300) + 100;
44        window.scrollBy({
45            top: scrollAmount,
46            behavior: 'smooth'
47        });
48        await randomDelay(config.scrollDelay, config.scrollDelay + 500);
49    }
50
51    // Simulate mouse movement (creates mouse events)
52    function simulateMouseMovement(element) {
53        const rect = element.getBoundingClientRect();
54        const x = rect.left + rect.width / 2;
55        const y = rect.top + rect.height / 2;
56        
57        const mouseoverEvent = new MouseEvent('mouseover', {
58            bubbles: true,
59            cancelable: true,
60            view: window,
61            clientX: x,
62            clientY: y
63        });
64        
65        element.dispatchEvent(mouseoverEvent);
66        console.log('Simulated mouse movement over element');
67    }
68
69    // Safe click with human-like behavior
70    async function humanClick(element, description = 'element') {
71        if (!element) {
72            console.error(`Cannot click ${description}: element not found`);
73            return false;
74        }
75
76        console.log(`Preparing to click ${description}...`);
77        
78        // Scroll element into view
79        element.scrollIntoView({ behavior: 'smooth', block: 'center' });
80        await randomDelay(500, 1000);
81
82        // Simulate mouse movement
83        simulateMouseMovement(element);
84        await randomDelay(300, 600);
85
86        // Click the element
87        console.log(`Clicking ${description}...`);
88        element.click();
89        
90        return true;
91    }
92
93    // Linkvertise bypass logic
94    async function bypassLinkvertise() {
95        console.log('Starting Linkvertise bypass...');
96        
97        await randomDelay();
98        await humanScroll();
99
100        // Look for common Linkvertise bypass elements
101        const selectors = [
102            'a[href*="get-link"]',
103            'button[class*="get-link"]',
104            'a.btn-primary',
105            'button.btn-primary',
106            'a[class*="continue"]',
107            'button[class*="continue"]',
108            '#skip-btn',
109            '.skip-btn',
110            'a[href*="skip"]',
111            'button[id*="skip"]'
112        ];
113
114        for (const selector of selectors) {
115            const element = document.querySelector(selector);
116            if (element && element.offsetParent !== null) {
117                console.log(`Found bypass element: ${selector}`);
118                await humanClick(element, 'bypass button');
119                return;
120            }
121        }
122
123        // Try to find and click any visible "Free Access" or similar buttons
124        const buttons = document.querySelectorAll('button, a');
125        for (const button of buttons) {
126            const text = button.textContent.toLowerCase();
127            if (text.includes('free') || text.includes('access') || text.includes('continue') || 
128                text.includes('skip') || text.includes('get link')) {
129                console.log(`Found potential bypass button with text: ${button.textContent}`);
130                await humanClick(button, 'text-based bypass button');
131                return;
132            }
133        }
134
135        console.log('No bypass elements found, waiting for page to load...');
136    }
137
138    // Luarmor bypass logic
139    async function bypassLuarmor() {
140        console.log('Starting Luarmor bypass...');
141        
142        await randomDelay();
143        await humanScroll();
144
145        // Look for Luarmor-specific bypass elements
146        const selectors = [
147            '#nextbtn',
148            '#newkeybtn',
149            'button[id*="next"]',
150            'button[id*="start"]',
151            'button[class*="checkpoint"]',
152            'a[class*="checkpoint"]',
153            'button[class*="continue"]',
154            'a[class*="continue"]',
155            'button[id*="continue"]',
156            'a[id*="continue"]',
157            '.btn-continue',
158            '#continue-btn',
159            'button[type="submit"]',
160            'a.btn',
161            'button.btn'
162        ];
163
164        for (const selector of selectors) {
165            const element = document.querySelector(selector);
166            if (element && element.offsetParent !== null) {
167                console.log(`Found Luarmor bypass element: ${selector}`);
168                await humanClick(element, 'Luarmor bypass button');
169                
170                // Wait and check for next step
171                await randomDelay(2000, 3000);
172                
173                // Look for next button if exists
174                const nextButton = document.querySelector('button[class*="next"], a[class*="next"], button[class*="continue"]');
175                if (nextButton && nextButton.offsetParent !== null) {
176                    console.log('Found next step button');
177                    await humanClick(nextButton, 'next step button');
178                }
179                return;
180            }
181        }
182
183        // Try to find checkpoint or continue buttons by text
184        const buttons = document.querySelectorAll('button, a');
185        for (const button of buttons) {
186            const text = button.textContent.toLowerCase();
187            if (text.includes('checkpoint') || text.includes('continue') || 
188                text.includes('next') || text.includes('proceed') || text.includes('verify')) {
189                console.log(`Found Luarmor button with text: ${button.textContent}`);
190                await humanClick(button, 'Luarmor text-based button');
191                return;
192            }
193        }
194
195        console.log('No Luarmor bypass elements found yet...');
196    }
197
198    // Monitor for dynamic content changes
199    function setupObserver(callback) {
200        const observer = new MutationObserver(async (mutations) => {
201            for (const mutation of mutations) {
202                if (mutation.addedNodes.length > 0) {
203                    console.log('Page content changed, checking for bypass elements...');
204                    await randomDelay(1000, 2000);
205                    callback();
206                    break;
207                }
208            }
209        });
210
211        observer.observe(document.body, {
212            childList: true,
213            subtree: true
214        });
215
216        console.log('Mutation observer set up');
217        return observer;
218    }
219
220    // Main initialization function
221    async function init() {
222        console.log(`Current URL: ${currentUrl}`);
223        
224        if (isBypassTool) {
225            console.log('On bypass tool site - no action needed');
226            return;
227        }
228
229        // Wait for page to be fully loaded
230        if (document.readyState !== 'complete') {
231            console.log('Waiting for page to load...');
232            await new Promise(resolve => {
233                window.addEventListener('load', resolve);
234            });
235        }
236
237        await randomDelay(1500, 2500);
238
239        if (isLinkvertise) {
240            console.log('Detected Linkvertise site');
241            await bypassLinkvertise();
242            
243            // Set up observer for dynamic content
244            setupObserver(bypassLinkvertise);
245        } else if (isLuarmor) {
246            console.log('Detected Luarmor site');
247            await bypassLuarmor();
248            
249            // Set up observer for dynamic content
250            setupObserver(bypassLuarmor);
251        }
252
253        console.log('Bypass extension initialized');
254    }
255
256    // Start the extension
257    init().catch(error => {
258        console.error('Error in bypass extension:', error);
259    });
260
261})();