AP BYPASS

best

此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.gf.qytechs.cn/scripts/502047/1418675/AP%20BYPASS.js

  1. // ==UserScript==
  2. // @name AP BYPASS
  3. // @namespace silent
  4. // @match *://loot-link.com/s?*
  5. // @match *://loot-links.com/s?*
  6. // @match *://lootlink.org/s?*
  7. // @match *://lootlinks.co/s?*
  8. // @match *://lootdest.info/s?*
  9. // @match *://lootdest.org/s?*
  10. // @match *://lootdest.com/s?*
  11. // @match *://links-loot.com/s?*
  12. // @match *://linksloot.net/s?*
  13. // @grant none
  14. // @version 1.0
  15. // @author SilentDev
  16. // @description best
  17. // @license MIT
  18. // @run-at document-start
  19. // @downloadURL https://update.gf.qytechs.cn/scripts/487969/LootDestLoot-Link%20%28Lootlabs%29%20Bypass.user.js
  20. // ==/UserScript==
  21.  
  22. // URL decoder (due to their encryption)
  23. function decodeURI(encodedString, prefixLength = 5) {
  24. let decodedString = '';
  25. const base64Decoded = atob(encodedString);
  26. const prefix = base64Decoded.substring(0, prefixLength);
  27. const encodedPortion = base64Decoded.substring(prefixLength);
  28.  
  29. for (let i = 0; i < encodedPortion.length; i++) {
  30. const encodedChar = encodedPortion.charCodeAt(i);
  31. const prefixChar = prefix.charCodeAt(i % prefix.length);
  32. const decodedChar = encodedChar ^ prefixChar;
  33. decodedString += String.fromCharCode(decodedChar);
  34. }
  35.  
  36. return decodedString;
  37. }
  38.  
  39. // We'll use this to detect their typical Unlock Content square and replace it with a custom one
  40. (function() {
  41. 'use strict';
  42.  
  43. const waitForElementAndModifyParent = () => {
  44. // Function to modify the parent element
  45. const modifyParentElement = (targetElement) => {
  46. const parentElement = targetElement.parentElement;
  47.  
  48. if (parentElement) {
  49. // This assumes our task loaded, we'll then check for what type of task as they all have minimum wait times.
  50. const images = document.querySelectorAll('img');
  51. let countdownSeconds = 60;
  52.  
  53. for (let img of images) {
  54. if (img.src.includes('eye.png')) {
  55. countdownSeconds = 13;
  56. break;
  57. } else if (img.src.includes('bell.png')) {
  58. countdownSeconds = 30;
  59. break;
  60. } else if (img.src.includes('apps.png') || img.src.includes('fire.png')) {
  61. countdownSeconds = 60;
  62. break;
  63. } else if (img.src.includes('gamers.png')) {
  64. countdownSeconds = 90;
  65. break;
  66. }
  67. }
  68.  
  69. // Clear parent element's content
  70. parentElement.innerHTML = '';
  71.  
  72. const popupHTML = `
  73. <div id="tm-overlay" style="position:fixed; top:0; left:0; width:100%; height:100%; background:rgba(0,0,0,0.75); z-index:999999; display:flex; justify-content:center; align-items:center;">
  74. <center>
  75. <div id="tm-popup" style="padding:40px; background:#fff; border-radius:5px; box-shadow:0 2px 10px rgba(0,0,0,0.5); z-index:1000000;">
  76. <div style="margin-bottom:20px;"><h1>Bypassing.</h1><h2>Best bypass made by silentdev..</h2></div>
  77. <div class="wheel-and-hamster" role="img" aria-label="Orange and tan hamster running in a metal wheel">
  78. <div class="wheel"></div>
  79. <div class="hamster"><div class="hamster__body"><div class="hamster__head"><div class="hamster__ear"></div><div class="hamster__eye"></div><div class="hamster__nose"></div></div><div class="hamster__limb hamster__limb--fr"></div><div class="hamster__limb hamster__limb--fl"></div><div class="hamster__limb hamster__limb--br"></div><div class="hamster__limb hamster__limb--bl"></div><div class="hamster__tail"></div></div></div>
  80. <div class="spoke"></div>
  81. </div>
  82. <br>
  83. <div id="countdown" style="margin-bottom:20px;"><h4>(Estimated ${countdownSeconds} seconds remaining..)</h4></div>
  84. <div id="countdown" style="margin-bottom:20px;"><h4>(Join the discord! .gg/UAJjzcmtWT)</h4></div>
  85. </div>
  86. </center>
  87. </div>
  88. `;
  89.  
  90. // Function to update the countdown every second
  91. const startCountdown = (duration) => {
  92. let remaining = duration;
  93. const countdownTimer = setInterval(() => {
  94. remaining--;
  95. document.getElementById('countdown').textContent = `(Estimated ${remaining} seconds remaining..)`;
  96. if (remaining <= 0) clearInterval(countdownTimer);
  97. }, 1000);
  98. };
  99.  
  100. // Insert HTML and CSS
  101. parentElement.insertAdjacentHTML('afterbegin', popupHTML);
  102.  
  103. // Start the countdown
  104. startCountdown(countdownSeconds);
  105.  
  106. const style = document.createElement('style');
  107. style.type = 'text/css';
  108. style.innerHTML = spinnerCSS;
  109. document.getElementsByTagName('head')[0].appendChild(style);
  110. }
  111. };
  112.  
  113. localStorage.clear();for(let i=0;i<100;i++)if(54!==i){var e,$="t_"+i,t={value:1,expiry:new Date().getTime()+6048e5};localStorage.setItem($,JSON.stringify(t))}
  114.  
  115. // Use MutationObserver to watch for changes in the document
  116. const observer = new MutationObserver((mutationsList, observer) => {
  117. for (const mutation of mutationsList) {
  118. if (mutation.type === 'childList') {
  119. const foundElement = Array.from(document.querySelectorAll('body *')).find(element => element.textContent.includes("UNLOCK CONTENT"));
  120. if (foundElement) {
  121. modifyParentElement(foundElement);
  122. observer.disconnect(); // Stop observing after the element is found and modified
  123. break;
  124. }
  125. }
  126. }
  127. });
  128.  
  129. observer.observe(document.body, {
  130. childList: true,
  131. subtree: true
  132. });
  133. };
  134.  
  135. // Check if the DOM is fully loaded
  136. if (document.readyState === 'loading') {
  137. document.addEventListener('DOMContentLoaded', waitForElementAndModifyParent);
  138. } else {
  139. waitForElementAndModifyParent(); // DOM is already fully loaded
  140. }
  141. })();
  142.  
  143. // Hook fetch to intercept the data we need
  144. (function() {
  145. const originalFetch = window.fetch;
  146. window.fetch = function(url, config) {
  147. // We're looking for their URL that gives us the data we need.
  148. if (url.includes(`${INCENTIVE_SYNCER_DOMAIN}/tc`)) {
  149. return originalFetch(url, config).then(response => {
  150. if (!response.ok) return JSON.stringify(response);
  151.  
  152. return response.clone().json().then(data => {
  153. let urid = "";
  154. let task_id = "";
  155. let action_pixel_url = "";
  156.  
  157. // Parse through the data for what we need
  158. data.forEach(item => {
  159. urid = item.urid;
  160. task_id = 54;
  161. action_pixel_url = item.action_pixel_url;
  162. });
  163.  
  164. // We'll now quickly create our own socket to intercept their messages
  165. const ws = new WebSocket(`wss://${urid.substr(-5) % 3}.${INCENTIVE_SERVER_DOMAIN}/c?uid=${urid}&cat=${task_id}&key=${KEY}`);
  166.  
  167. ws.onopen = () => setInterval(() => ws.send('0'), 1000);
  168.  
  169. // We're looking for a message returned with the real publishing link
  170. ws.onmessage = event => {
  171. if (event.data.includes('r:')) {
  172. PUBLISHER_LINK = event.data.replace('r:', '');
  173. }
  174. };
  175.  
  176. // Send post for fake task click to sync server
  177. navigator.sendBeacon(`https://${urid.substr(-5) % 3}.${INCENTIVE_SERVER_DOMAIN}/st?uid=${urid}&cat=${task_id}`);
  178.  
  179. // Send pixel tracker request (to make it look like we hit their page)
  180. fetch(action_pixel_url);
  181.  
  182. // Send fake complete task to sync server
  183. fetch(`https://${INCENTIVE_SYNCER_DOMAIN}/td?ac=1&urid=${urid}&&cat=${task_id}&tid=${TID}`);
  184.  
  185. // Once the socket is closed we'll assume we have the real socket link from the onmessage func.
  186. ws.onclose = () => window.location.href = decodeURIComponent(decodeURI(PUBLISHER_LINK));
  187.  
  188. return new Response(JSON.stringify(data), {
  189. status: response.status,
  190. statusText: response.statusText,
  191. headers: response.headers
  192. });
  193. });
  194. });
  195. }
  196.  
  197. // If it doesn't match our URL then we return the original fetch request
  198. return originalFetch(url, config);
  199. };
  200. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址