Linkvertise & Luarmor Auto Bypass

Automatically bypass Linkvertise and Luarmor ads without bans

Size

9.0 KB

Version

1.1.1

Created

Mar 22, 2026

Updated

25 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 (prioritize specific IDs)
146        const selectors = [
147            '#nextbtn',  // Primary Luarmor "Start" button
148            '#newkeybtn',  // "Get a new key" button
149            'button[class*="checkpoint"]',
150            'a[class*="checkpoint"]',
151            'button[class*="continue"]',
152            'a[class*="continue"]',
153            'button[id*="continue"]',
154            'a[id*="continue"]',
155            '.btn-continue',
156            '#continue-btn',
157            'button[type="submit"]',
158            'button.btn-success',  // Luarmor uses btn-success for primary actions
159            'a.btn',
160            'button.btn'
161        ];
162
163        for (const selector of selectors) {
164            const element = document.querySelector(selector);
165            if (element && element.offsetParent !== null) {
166                console.log(`Found Luarmor bypass element: ${selector}`);
167                await humanClick(element, 'Luarmor bypass button');
168                
169                // Wait and check for next step
170                await randomDelay(2000, 3000);
171                
172                // Look for next button if exists
173                const nextButton = document.querySelector('#nextbtn, button[class*="next"], a[class*="next"], button[class*="continue"]');
174                if (nextButton && nextButton.offsetParent !== null) {
175                    console.log('Found next step button');
176                    await humanClick(nextButton, 'next step button');
177                }
178                return;
179            }
180        }
181
182        // Try to find checkpoint or continue buttons by text
183        const buttons = document.querySelectorAll('button, a');
184        for (const button of buttons) {
185            const text = button.textContent.toLowerCase();
186            if (text.includes('start') || text.includes('checkpoint') || text.includes('continue') || 
187                text.includes('next') || text.includes('proceed') || text.includes('verify')) {
188                console.log(`Found Luarmor button with text: ${button.textContent}`);
189                await humanClick(button, 'Luarmor text-based button');
190                return;
191            }
192        }
193
194        console.log('No Luarmor bypass elements found yet...');
195    }
196
197    // Monitor for dynamic content changes
198    function setupObserver(callback) {
199        const observer = new MutationObserver(async (mutations) => {
200            for (const mutation of mutations) {
201                if (mutation.addedNodes.length > 0) {
202                    console.log('Page content changed, checking for bypass elements...');
203                    await randomDelay(1000, 2000);
204                    callback();
205                    break;
206                }
207            }
208        });
209
210        observer.observe(document.body, {
211            childList: true,
212            subtree: true
213        });
214
215        console.log('Mutation observer set up');
216        return observer;
217    }
218
219    // Main initialization function
220    async function init() {
221        console.log(`Current URL: ${currentUrl}`);
222        
223        if (isBypassTool) {
224            console.log('On bypass tool site - no action needed');
225            return;
226        }
227
228        // Wait for page to be fully loaded
229        if (document.readyState !== 'complete') {
230            console.log('Waiting for page to load...');
231            await new Promise(resolve => {
232                window.addEventListener('load', resolve);
233            });
234        }
235
236        await randomDelay(1500, 2500);
237
238        if (isLinkvertise) {
239            console.log('Detected Linkvertise site');
240            await bypassLinkvertise();
241            
242            // Set up observer for dynamic content
243            setupObserver(bypassLinkvertise);
244        } else if (isLuarmor) {
245            console.log('Detected Luarmor site');
246            await bypassLuarmor();
247            
248            // Set up observer for dynamic content
249            setupObserver(bypassLuarmor);
250        }
251
252        console.log('Bypass extension initialized');
253    }
254
255    // Start the extension
256    init().catch(error => {
257        console.error('Error in bypass extension:', error);
258    });
259
260})();