Cloudflare Bypasser for Nitro Type Race

Bypass Cloudflare

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name             Cloudflare Bypasser for Nitro Type Race
// @match            https://www.nitrotype.com/race
// @match            https://www.nitrotype.com/race/*
// @author           Sing Developments
// @grant            none
// @description      Bypass Cloudflare
// @license MIT
// @version          2
// @namespace https://singdevelopmentsblog.wordpress.com/?p=4354
// @icon         https://singdevelopmentsblog.files.wordpress.com/2022/11/nitrotype-logo.jpg
// ==/UserScript==


// This code is for educational purposes only and may not work or be safe to use.
// It tries to reverse engineer the Cloudflare JavaScript challenge and make a request to the target website.

// Define the target website URL
const targetURL = 'https://nitrotype.com/race';

// Define a function to extract the challenge parameters from the HTML source
function getChallengeParams(html) {
  // Use regular expressions to match the challenge parameters
  const challenge = /name="jschl_vc" value="(\w+)"/.exec(html)[1];
  const pass = /name="pass" value="(.+?)"/.exec(html)[1];
  const s = /s\s*=\s*document\.createElement\('div'\);\s*s\.innerHTML\s*=\s*"(.+?)";/.exec(html)[1];
  const k = /k\s*=\s*'(\w+)';/.exec(html)[1];
  return {challenge, pass, s, k};
}

// Define a function to solve the challenge expression using eval
function solveChallengeExpr(expr) {
  // Replace document.getElementById with a dummy function
  expr = expr.replace(/document\.getElementById/g, 'function(){}');
  // Evaluate the expression and return the result
  return eval(expr);
}

// Define a function to make a request using XMLHttpRequest
function makeRequest(url, callback) {
  // Create a new XMLHttpRequest object
  const xhr = new XMLHttpRequest();
  // Open a GET request to the url
  xhr.open('GET', url);
  // Set the response type to text
  xhr.responseType = 'text';
  // Set the onload event handler to call the callback function with the response text
  xhr.onload = function() {
    callback(xhr.responseText);
  };
  // Send the request
  xhr.send();
}

// Make an initial request to the target website
makeRequest(targetURL, function(response) {
  // Get the challenge parameters from the response
  const params = getChallengeParams(response);
  // Solve the challenge expression using eval
  const answer = solveChallengeExpr(params.s + params.k);
  // Construct the verification URL with the challenge parameters and answer
  const verifyURL = targetURL + '/cdn-cgi/l/chk_jschl?jschl_vc=' + params.challenge + '&pass=' + params.pass + '&jschl_answer=' + answer;
  // Wait for 4 seconds before making the verification request
  setTimeout(function() {
    makeRequest(verifyURL, function(response) {
      // Check if the verification was successful
      if (response.includes('You are being redirected')) {
        // Redirect to the target website
        window.location.href = targetURL;
      } else {
        // Display an error message
        alert('Verification failed');
      }
    });
  }, 4000);
});