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})();