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