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