Не взимайте моето IP

Блокира заснемането на IP адрес, извършено чрез външна заявка към API.

// ==UserScript==
// @namespace    http://linkme.bio/jhonpergon/?userscript=api_block
// @version      1.4
// @author       Jhon Pérgon

// @name         Não Pegue Meu IP
// @name:pt       Não Pegue Meu IP
// @name:es       No Obtengas Mi IP
// @name:en       Don't Get My IP
// @name:fr       Ne Prends Pas Mon IP
// @name:ru       Не бери мой IP
// @name:ja       IPを取得しないでください
// @name:ko       내 IP를 가져가지 마세요
// @name:zh-TW     不要获取我的IP
// @name:zh-CN     不要获取我的IP
// @name:id        Jangan Ambil IP Saya
// @name:ug        مېنىڭ ئۆزئىپىمنى قۇلۇپ قويما
// @name:ar        لا تأخذ عنوان IP الخاص بي
// @name:he        אל תקבל את כתובת ה-IP שלי
// @name:hi        मेरा IP मत लो
// @name:th        อย่าเก็บ IP ของฉัน
// @name:bg        Не взимайте моето IP
// @name:ro        Nu Luați IP-ul Meu
// @name:fi        Älä Hae Minun IP-osoitettani
// @name:it        Non Prendere Il Mio IP
// @name:el        Μην Πάρεις Την IP Μου
// @name:eo        Ne Prenu Mian IP
// @name:hu        Ne Vegyél El Az IP-címemet
// @name:nb        Ikke Hent Min IP
// @name:sk        Neberaj Moju IP
// @name:sv        Ta Inte Mitt IP
// @name:sr        Ne Uzimaj Moj IP
// @name:pl        Nie Bierz Mojego IP
// @name:nl        Pak Mijn IP Niet
// @name:de        Mein IP Nicht Abrufen
// @name:da        Tag Ikke Min IP
// @name:cs        Nezírej Moji IP
// @name:uk        Не Бери Мою IP
// @name:tr        IP'imi Alma
// @name:vi        Đừng Lấy IP Của Tôi
// @name:fr-CA     Ne Prends Pas Mon IP (Canada)

// @description         Impede a captura do endereço IP feita por solicitação de API externa.
// @description:pt      Impede a captura do endereço IP feita por solicitação de API externa.
// @description:es      Bloquea la captura de IP realizada por una solicitud de API externa.
// @description:en      Blocks the capture of the IP address done by an external API request.
// @description:fr      Bloque la capture de l'adresse IP effectuée par une demande d'API externe.
// @description:ru      Блокирует захват IP-адреса, сделанный внешним запросом API.
// @description:ja      外部APIリクエストによるIPアドレスのキャプチャをブロックします。
// @description:ko      외부 API 요청으로 수행 된 IP 주소 캡처를 차단합니다.
// @description:zh-TW   阻止外部API请求捕获IP地址。
// @description:zh-CN   阻止外部API请求捕获IP地址。
// @description:id       Mencegah penangkapan alamat IP yang dilakukan oleh permintaan API eksternal.
// @description:ug       سىرىقى API سورىسى تەرىپىدىن ئىشلىتىلغان IP ؛ىمىزنى قولۇپ قويىدۇ.
// @description:ar       يحظر التقاط عنوان IP الذي يتم بواسطة طلب API خارجي.
// @description:he       מונע את לכידת כתובת ה-IP שנעשית על ידי בקשת API חיצונית.
// @description:hi       एक्सटर्नल API अनुरोध द्वारा किए गए IP पता को ब्लॉक करता है।
// @description:th       บล็อกการจับ IP address ที่ทำโดยคำขอ API จากภายนอก
// @description:bg       Блокира заснемането на IP адрес, извършено чрез външна заявка към API.
// @description:ro       Blochează capturarea adresei IP efectuată prin cererea unei API externe.
// @description:fi       Estää IP-osoitteen kaappauksen, joka on tehty ulkoisen API-pyynnön kautta.
// @description:it       Blocca la cattura dell'indirizzo IP effettuata da una richiesta di API esterna.
// @description:el       Φράζει την καταγραφή της διεύθυνσης IP που πραγματοποιείται από εξωτερικό αίτημα API.
// @description:eo       Blokas la kaptadon de la IP-adreso farita per ekstera API peto.
// @description:hu       Blokkolja az IP-cím elkapását, amit külső API-kérés végzett.
// @description:nb       Blokkerer fangsten av IP-adressen utført av en ekstern API-forespørsel.
// @description:sk       Blokuje zachytávanie IP adresy vykonané externou požiadavkou API.
// @description:sv       Blockerar fångsten av IP-adressen som utförs av en extern API-begäran.
// @description:sr       Blokira hvatanje IP adrese izvršeno preko spoljnog API zahteva.
// @description:pl       Blokuje przechwytywanie adresu IP dokonywane przez zewnętrzne żądanie API.
// @description:nl       Blokkeert het vastleggen van het IP-adres dat wordt gedaan door een externe API-aanvraag.
// @description:de       Blockiert das Erfassen der IP-Adresse durch eine externe API-Anfrage.
// @description:da       Blokerer opfange IP-adressen udført af en ekstern API-forespørgsel.
// @description:cs       Blokuje zachycení IP adresy provedené externí žádostí o API.
// @description:uk       Блокує захоплення IP-адреси, здійснене зовнішньою запитом до API.
// @description:tr       Harici bir API isteği tarafından yapılan IP adresi yakalamayı engeller.
// @description:vi       Chặn việc thu thập địa chỉ IP thực hiện bởi yêu cầu API bên ngoài.
// @description:fr-CA   Bloque la capture de l'adresse IP effectuée par une demande d'API externe.

// @match        *://*/*
// @exclude      *://www.google.*
// @exclude      *://greasyfork.org/*
// @exclude      *://translate.google.*
// @exclude      *://www.google.it/*
// @exclude      https://www.youtube.com/*
// @exclude      https://m.youtube.com/*
// @exclude      https://music.youtube.com/*
// @exclude      https://youtu.be/*
// @exclude      https://accounts.youtube.com/*
// @exclude      https://www.youtube-nocookie.com/*
// @exclude      https://gmail.com/*
// @exclude      https://mail.google.com/*
// @exclude      https://github.com/*
// @exclude        https://www.facebook.com/*
// @exclude        https://facebook.com/*
// @exclude        https://m.facebook.com/*
// @exclude        https://wikipedia.org/*
// @exclude        https://web.whatsapp.com/*
// @exclude        https://instagram.com/*
// @exclude        https://x.com/*
// @exclude        https://twitter.com/*
// @exclude       *://www.bilibili.com/*
// @exclude       *://*.bilibili.com/*
// @exclude       *://s1.hdslb.com/*


// @grant        none
// @icon         data:image/png;base64,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

// @license      MIT
// @run-at       document-start

// @compatible      chrome
// @compatible      firefox
// @compatible      opera
// @compatible      edge
// @compatible      safari
// @compatible      berrybrowser

// ==/UserScript==

(function() {
    'use strict';

    let stopGo = false;

    function stopAll(){
    // Sobrescreve a função addEventListener para prevenir a adição de eventos
    const originalAddEventListener = EventTarget.prototype.addEventListener;
    EventTarget.prototype.addEventListener = function(type, listener, options) {
        console.log(`Tentativa de adição de evento bloqueada: ${type}`);
        // Não faz nada, impedindo a adição de eventos
    };

    // Remove o listener padrão do contexto de usuário para eventos adicionados dinamicamente
    window.removeEventListener = function(type, listener, options) {
        // Não faz nada
    };

    // Remove todos os listeners existentes
    const removeAllListeners = () => {
        const elements = document.querySelectorAll('*');
        elements.forEach(element => {
            const events = getEventListeners(element);
            for (const eventType in events) {
                events[eventType].forEach(event => {
                    element.removeEventListener(event.type, event.listener);
                });
            }
        });
    };

    // Remove todos os listeners existentes antes de a página ser totalmente carregada
    window.addEventListener('beforeunload', removeAllListeners);
    window.addEventListener('error', removeAllListeners);
    window.addEventListener('load', removeAllListeners);



     // Desativa o JavaScript na página
        function letsGo(){

              const gElements = document.querySelectorAll('svg');
              if (gElements) {
                 gElements.forEach((svgElement) => {
                    svgElement.style.width = '10px';
                });
              }
              const imggElements = document.querySelectorAll('img');
              if (imggElements) {
                 imggElements.forEach((svgElement) => {
                    svgElement.style.display = 'none';
                });
              }

              window.eval = function() { };

              // Desativa a criação de novos elementos de script
              document.createElement = function(tagName) {
                  if (tagName.toLowerCase() === 'script') {
                      return document.createTextNode('');
                  }
                  return false;
              };

              // Remove todos os scripts existentes na página
                var scripts = document.querySelectorAll('script');
                scripts.forEach(function(script) {
                    script.parentNode.removeChild(script);
                });

              var allElements = document.querySelectorAll('*');
                allElements.forEach(function(element) {
                element.DOMContentLoaded = "";
                element.load = "";
                element.click = "";
                element.keydown = "";
                element.mousedown = "";
                element.down = "";
                element.attached = "";
                element.onclick = "";
                element.auxclick = "";
                element.dblclick = "";
                element.copy = "";
                element.change = "";
                element.keypress = "";
                element.mouseover = "";
                element.beforeunload = "";
                element.error = "";
                if(element.href){
                  element.innerHTML = "Don't Get My IP (Your UserScript)";
                  element.href = 'https://greasyfork.org/pt-BR/scripts/472375-n%C3%A3o-pegue-meu-ip';
                }
                if(element.src){
                  element.src = '';
                }
                if(element.tagName == 'BUTTON'){
                  element.remove();
                }
                //console.log(element.tagName)
                if(element.tagName == 'P' && element.id !== 'hahahax' || element.tagName == 'SPAN' || element.tagName == 'STRONG' || element.tagName == 'SMALL' || element.tagName == 'TD' || element.tagName == 'TH' || element.tagName == 'B' || element.tagName == 'H1' || element.tagName == 'H2' || element.tagName == 'H3' || element.tagName == 'H4'){
                  element.innerText = " Suspicious activity verified. The site's javascript has been disabled to prevent future actions.";
                }

            });

            allElements.forEach(function(element) {
                element.removeAttribute('DOMContentLoaded');
                element.removeAttribute('load');
                element.removeAttribute('onmousedown');
                element.removeAttribute('onmouseup');
                element.removeAttribute('onclick');
                element.removeAttribute('click');
                element.removeAttribute('attached');
                element.removeAttribute('keypress');
                element.removeAttribute('mouseover');
                element.removeAttribute('mousedown');
                element.removeAttribute('keydown');
                element.removeAttribute('beforeunload');
                element.removeAttribute('popstate');
                element.removeAttribute('error');
            });
        }

      window.setTimeout(letsGo, 100);


          // Cria a barra de pesquisa
          const addalertBlock = document.createElement('div');
          addalertBlock.innerHTML = `<p id='hahahax' style='text-align: center;color: rgb(255, 255, 255);'>Userscript IPBLOCK: SITE BLOCKED.</p>`;
          addalertBlock.style.position = 'fixed';
          addalertBlock.style.width = '100%';
          addalertBlock.style.height = 'auto';
          addalertBlock.title = 'Open userscript page';
          addalertBlock.style.borderBottom = 'solid 1px rgb(129, 133, 142)';
          addalertBlock.style.paddingTop = '10px';
          addalertBlock.style.top = '0';
          addalertBlock.style.left = '50%';
          addalertBlock.style.right = '50%';
          addalertBlock.style.transform = 'translate(-50%, 0px)';
          addalertBlock.style.zIndex = '99999';
          addalertBlock.style.display = 'list-item';
          addalertBlock.style.alignItems = 'center';
          addalertBlock.style.textAlign = 'center';
          addalertBlock.style.backgroundColor = 'rgb(85, 0, 0)';
          addalertBlock.style.color = '#fff';
          addalertBlock.style.cursor = 'pointer';

        document.addEventListener("keydown", function(event) {
            window.open('https://greasyfork.org/pt-BR/scripts/472375-n%C3%A3o-pegue-meu-ip', '_blank');
        });

        document.body.style.backgroundColor = 'rgb(4, 2, 2)';
        document.body.style.color = '#fff';
        document.body.style.marginTop = '40px';
        document.body.appendChild(addalertBlock);

    }


      var palavrasSalvas = `
         geoip,
         ip address:,
         address ip:,
         your ip:,
         ip2Location,
         ipaddress,
         myip,
         whatismyip,
         what is my ip?,
         endereço ip:,
         meu ip:,
         meuip.com`;

      function stringParaArray(xpalavrasChave) {
        const arrayDePalavras = xpalavrasChave.split(',');
        const palavrasLimparEspacos = arrayDePalavras
          .map(palavra => palavra.trim())
          .filter(palavra => palavra !== '');
        return palavrasLimparEspacos;
      }

      const palavrasChaveString = palavrasSalvas;
      const palavrasChave = stringParaArray(palavrasChaveString);

      // Função para verificar se uma palavra-chave está presente em um elemento
      function verificaPalavrasChave(elemento) {
        var texto = elemento.textContent.toLowerCase();
        for (var i = 0; i < palavrasChave.length; i++) {
          var palavra = palavrasChave[i].toLowerCase();
          if (texto.includes(palavra)) {
            return true;
          }
        }
        return false;
      }


      // Função para remover tags com base nas palavras-chave
      function removeTagsComPalavrasChave() {
        var checarSubtags = Array.from(document.querySelectorAll('*'));
        checarSubtags.forEach(function (checarSubtag) {
              if (verificaPalavrasChave(checarSubtag)) {
                stopGo = true;
              }
        });
      }


    const ativeChekall = setInterval(() => {
        luazul();
    }, 100);

    function luazul(){
      if(document.body){
           removeTagsComPalavrasChave();
           //setInterval(removeTagsComPalavrasChave, 1200);
           clearInterval(ativeChekall);
        }
    }

    console.log('IPBLOCK ====>> Listening for requests...');
    // Lista de URLs de API conhecidas para capturar o IP
    const blockedApiUrls = [
        'https://www.gstatic.com/charts/geochart',
        'https://api.ipify.org',
        'https://api.ipify.org?format=json',
        'https://ipinfo.io',
        'https://api.ipapi.com',
        'https://www.iplocation.net',
        'https://api.iplocation.net',
        'https://website-cdn.ipinfo.io',
        'https://p.typekit.net',
        'https://use.typekit.net',
        'https://pagead2.googlesyndication.com',
        'https://data-jsext.com',
        'https:main.exoclick.com',
        'https:main.exdynsrv.com',
        'https:main.exosrv.com',
        'https://geolocation.onetrust.com',
        'https://cdn.cookielaw.org',
        'http://axeocy.com',
        'https://chikzzz.com',
        'https://themeetpartners.life',
        'https://api.ip-api.com',
        'https://ipapi.co',
        'https://geo.ipify.org',
        'https://extreme-ip-lookup.com',
        'https://freeipapi.com',
        'https://application/vnd.maxmind.com',
        'https://freegeoip.io',
        'ipbase.com',
        'https://api.ip2location.com',
        'https://ipstack.com',
        'https://ipstack1.p.rapidapi.com',
        'https://app.fusebox.fm',
        'https://api.usercentrics.eu',
        'https://maps.googleapis.com',
        'https://www.expressvpn.com',
        'https://graphql.usercentrics.eu',
        'https://ipaddress',
        'https://tls.browserleaks.com',
        'https://rf.revolvermaps.com',
        '/website/_next/static',
        'nordvpn.com/',
        'expressvpn.com/',
        'whoisxmlapi.com',
        'maxmind.com',
        'whatismyip.com',
        'ip-api',
        'myip.',
        '/cookie',
        '/location',
        '/ip',
        '/ips',
        '/api/hostname',
        '/api/whois',
        'https://[',
        'geoip',
        'geoip2',
        'ipaddress'
        // Adicione mais URLs de API que deseja bloquear, se necessário
    ];

    let listBlock1 = "list of blocked ==> ";
    let listBlock2 = "list of blocked --> ";

    var verifyc1 = false;

    let contagemBlck = 1;

    // Intercepta as solicitações AJAX feitas pelo website
    const open = XMLHttpRequest.prototype.open;
    XMLHttpRequest.prototype.open = function(method, url) {
        // Verifica se a URL da solicitação corresponde a uma URL de API bloqueada
        console.log('====>>', url);
        if (blockedApiUrls.some(apiUrl => url.startsWith(apiUrl))) {
            verifyc1 = true;
            listBlock1 += '\n\n'+contagemBlck+': '+url;
            contagemBlck++;
            console.log(`Solicitação de API bloqueada: ${url}`);
            return; // Interrompe a execução da solicitação
        }
        for (var i = 0; i < blockedApiUrls.length; i++) {
          var palavra = blockedApiUrls[i];
          if (url.includes(palavra)) {
            console.log(`~ Block: ${palavra}`);
            listBlock1 += palavra+" ~ ";
            verifyc1 = true;

                  // Intercepta as requisições AJAX
                  var send = XMLHttpRequest.prototype.send;
                  XMLHttpRequest.prototype.send = function() {
                      console.log('Tentativa de enviar requisição AJAX bloqueada.');
                      // bloqueia a requisição e para de carregar a página
                  };

                  // Intercepta o envio de formulários
                  var submit = HTMLFormElement.prototype.submit;
                  HTMLFormElement.prototype.submit = function() {
                      console.log('Tentativa de enviar formulário bloqueada.');
                      // bloqueia o envio de formuário e para de carregar a página
                  };

                  // Intercepta o clique em links
                  document.addEventListener('click', function(event) {
                      if (event.target.tagName === 'a') {
                          console.log('Tentativa de navegar para outra página bloqueada.');
                          event.preventDefault(); // Bloqueia o comportamento padrão do link
                      }
                  });
            return;
          }
        }
        // Continua com a execução normal da solicitação
        open.apply(this, arguments);
    };



  let bloquearFetch = true;
  let verifyc2 = false;

  function interceptarFetch(url, options) {
    console.log('---->>', url);
    for (var i = 0; i < blockedApiUrls.length; i++) {
        var palavra = blockedApiUrls[i];
        if (url.includes(palavra)) {
          console.log(`~ Block: ${palavra}`);
          listBlock2 += palavra+" ~ ";
          verifyc2 = true;
          return Promise.resolve({ status: 200, body: 'A solicitação foi bloqueada.' });
        }
      }
    if (bloquearFetch && correspondeAUrlBloqueada(url)) {
      console.log('Solicitação fetch bloqueada:', url);
      verifyc2 = true;
      listBlock2 += '\n\n'+contagemBlck+': '+url+" ~ ";
      contagemBlck++;
      return Promise.resolve({ status: 200, body: 'A solicitação foi bloqueada.' });
    } else {
      return window.originalFetch.call(this, url, options);
    }
  }

  function correspondeAUrlBloqueada(url) {
    for (const urlBloqueada of blockedApiUrls) {
      if (url.startsWith(urlBloqueada)) {
        return true;
      }
      for (var i = 0; i < blockedApiUrls.length; i++) {
        var palavra = blockedApiUrls[i];
        if (url.includes(palavra)) {
          console.log(`~ Block: ${palavra}`);
          return true;
        }
      }
    }
    return false;
  }

  // Substituir a função fetch globalmente
  window.originalFetch = window.fetch;
  window.fetch = interceptarFetch;

  // Aguarde o evento de carregamento total da página
  window.addEventListener('load', function() {
    // Após o carregamento total da página, permitir todas as solicitações fetch
    bloquearFetch = false;
  });



  function notificaAlert() {
    setTimeout(function(){
      if(verifyc1 == true){
        window.stop();
        console.log("~~ IPBLOCK AJAX ~~\n\n"+listBlock1);
        listBlock1 = "list of blocked ==> ";
        verifyc1 = false;
        stopAll();
      }
      else if(verifyc2 == true){
        window.stop();
        console.log("~~ IPBLOCK Fetch ~~\n\n"+listBlock2);
        listBlock2 = "list of blocked --> ";
        verifyc2 = false;
        stopAll();
      }else if(stopGo == true){
          window.stop();
          console.log("~~ IPBLOCK: Stop All.");
          stopAll();
      }else{
        console.log('IPBLOCK ====>> No API requests for IP identified.');
      }
    },1000);
  }

    var xurl = window.location.href;
    // Verifica o URL para determinar o que fazer no site
    if (xurl.includes(`https://[`) || xurl.includes(`vercel`)) {
      stopGo = true;
      Object.defineProperty(Element.prototype, 'innerText', {
          set: function(value) {},
      });
      Object.defineProperty(Element.prototype, 'innerHTML', {
          set: function(value) {},
      });
    };

  window.addEventListener('load', notificaAlert);

})();