DZHQ Captcha Solver

Modern Captcha Solver For DZHQ Bypass Bot

Você precisará instalar uma extensão como Tampermonkey, Greasemonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Userscripts para instalar este script.

Você precisará instalar uma extensão como o Tampermonkey para instalar este script.

Você precisará instalar um gerenciador de scripts de usuário para instalar este script.

(Eu já tenho um gerenciador de scripts de usuário, me deixe instalá-lo!)

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

(Eu já possuo um gerenciador de estilos de usuário, me deixar fazer a instalação!)

// ==UserScript==
// @name         DZHQ Captcha Solver
// @namespace    http://tampermonkey.net/
// @version      2
// @description  Modern Captcha Solver For DZHQ Bypass Bot
// @author       DZHQ Bypass
// @match        https://*/*
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        none
// @license      MIT
// ==/UserScript==

(function () {
  try {
    const params = new URLSearchParams(location.search);
    const ncsm = params.get("ncsm");
    const siteKeyParam = params.get("sitekey");
    const id = params.get("id");
    const viewOnly = params.get("viewonly") === "1";

    if (!ncsm || !siteKeyParam || !id) return;

    const siteKeys = siteKeyParam.split("|").map(s => s.trim()).filter(Boolean);
    if (!siteKeys.length) return;

    const tokens = new Array(siteKeys.length).fill(null);

    document.open();
    document.write(`
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>DZHQ Captcha Solver Pro</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
  * {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
  }

  body {
    margin: 0;
    min-height: 100vh;
    background: linear-gradient(135deg, #0f172a 0%, #020617 50%, #0a0f1f 100%);
    font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;
    color: #e2e8f0;
    position: relative;
    overflow-x: hidden;
  }

  /* Animated background particles */
  body::before {
    content: '';
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background-image: radial-gradient(circle at 25% 40%, rgba(59,130,246,0.08) 0%, transparent 50%),
                      radial-gradient(circle at 75% 85%, rgba(139,92,246,0.08) 0%, transparent 50%);
    pointer-events: none;
    z-index: 0;
  }

  /* Glassmorphism container */
  .app-container {
    position: relative;
    z-index: 1;
    max-width: 1400px;
    margin: 0 auto;
    padding: 1.5rem;
    min-height: 100vh;
    display: flex;
    flex-direction: column;
  }

  /* Header Section */
  .header {
    background: rgba(15, 23, 42, 0.7);
    backdrop-filter: blur(20px);
    border-radius: 1.5rem;
    padding: 1.5rem 2rem;
    margin-bottom: 2rem;
    border: 1px solid rgba(71, 85, 105, 0.3);
    box-shadow: 0 20px 35px -12px rgba(0, 0, 0, 0.4);
  }

  .header-top {
    display: flex;
    justify-content: space-between;
    align-items: center;
    flex-wrap: wrap;
    gap: 1rem;
  }

  .title h1 {
    font-size: 1.8rem;
    font-weight: 700;
    background: linear-gradient(135deg, #fff, #60a5fa, #c084fc);
    background-clip: text;
    -webkit-background-clip: text;
    color: transparent;
    letter-spacing: -0.5px;
  }

  .title p {
    font-size: 0.85rem;
    color: #94a3b8;
    margin-top: 0.3rem;
  }

  .stats {
    display: flex;
    gap: 1rem;
  }

  .stat-card {
    background: rgba(30, 41, 59, 0.6);
    border-radius: 1rem;
    padding: 0.6rem 1.2rem;
    text-align: center;
    border: 1px solid rgba(71, 85, 105, 0.3);
  }

  .stat-number {
    font-size: 1.5rem;
    font-weight: 700;
    color: #60a5fa;
  }

  .stat-label {
    font-size: 0.7rem;
    color: #94a3b8;
    text-transform: uppercase;
    letter-spacing: 0.5px;
  }

  /* Grid Layout */
  .captcha-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(380px, 1fr));
    gap: 1.5rem;
    margin-bottom: 2rem;
    flex: 1;
  }

  /* Cards */
  .captcha-card {
    background: rgba(15, 23, 42, 0.75);
    backdrop-filter: blur(12px);
    border-radius: 1.5rem;
    border: 1px solid rgba(71, 85, 105, 0.4);
    overflow: hidden;
    transition: all 0.3s ease;
    animation: fadeInUp 0.5s ease backwards;
    animation-delay: calc(var(--index, 0) * 0.05s);
  }

  @keyframes fadeInUp {
    from {
      opacity: 0;
      transform: translateY(20px);
    }
    to {
      opacity: 1;
      transform: translateY(0);
    }
  }

  .captcha-card:hover {
    transform: translateY(-4px);
    border-color: #3b82f680;
    box-shadow: 0 20px 35px -12px rgba(0, 0, 0, 0.5);
  }

  .card-header {
    padding: 1.2rem 1.5rem;
    background: linear-gradient(135deg, rgba(30, 41, 59, 0.5), rgba(15, 23, 42, 0.8));
    border-bottom: 1px solid #1e293b;
    display: flex;
    justify-content: space-between;
    align-items: center;
  }

  .card-number {
    font-weight: 700;
    font-size: 1.1rem;
    color: #cbd5e1;
  }

  .card-number span {
    color: #60a5fa;
    font-size: 1.3rem;
  }

  .status-indicator {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    font-size: 0.75rem;
    font-weight: 600;
    padding: 0.3rem 0.8rem;
    border-radius: 2rem;
    background: #0f172a;
  }

  .status-dot {
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background: #f59e0b;
    animation: pulse 1.5s infinite;
  }

  @keyframes pulse {
    0%, 100% { opacity: 1; transform: scale(1); }
    50% { opacity: 0.5; transform: scale(0.8); }
  }

  .status-dot.solved {
    background: #22c55e;
    animation: none;
  }

  .captcha-content {
    padding: 1.8rem;
    min-height: 220px;
    display: flex;
    justify-content: center;
    align-items: center;
  }

  .captcha-widget {
    width: 100%;
    display: flex;
    justify-content: center;
  }

  /* Solved State */
  .solved-section {
    text-align: center;
  }

  .solved-icon {
    font-size: 3rem;
    margin-bottom: 0.5rem;
  }

  .solved-text {
    font-size: 1rem;
    font-weight: 600;
    color: #4ade80;
    margin-bottom: 0.75rem;
  }

  .token-display {
    background: #020617;
    border-radius: 0.75rem;
    padding: 0.75rem;
    margin: 0.75rem 0;
  }

  .token-display textarea {
    width: 100%;
    background: #0f172a;
    border: 1px solid #334155;
    border-radius: 0.5rem;
    padding: 0.6rem;
    color: #e2e8f0;
    font-family: 'Courier New', monospace;
    font-size: 0.7rem;
    resize: vertical;
  }

  .copy-btn {
    background: linear-gradient(135deg, #3b82f6, #2563eb);
    border: none;
    color: white;
    padding: 0.5rem 1rem;
    border-radius: 0.5rem;
    cursor: pointer;
    font-size: 0.8rem;
    font-weight: 500;
    transition: all 0.2s;
    margin-top: 0.5rem;
  }

  .copy-btn:hover {
    transform: scale(1.02);
    box-shadow: 0 4px 12px rgba(59,130,246,0.4);
  }

  .waiting-message {
    text-align: center;
    padding: 1rem;
    color: #94a3b8;
    font-size: 0.85rem;
  }

  /* Completion Screen */
  .completion-screen {
    background: rgba(15, 23, 42, 0.9);
    backdrop-filter: blur(20px);
    border-radius: 2rem;
    padding: 3rem 2rem;
    text-align: center;
    border: 1px solid #22c55e;
    animation: scaleIn 0.5s ease;
  }

  @keyframes scaleIn {
    from {
      opacity: 0;
      transform: scale(0.9);
    }
    to {
      opacity: 1;
      transform: scale(1);
    }
  }

  .completion-icon {
    font-size: 4rem;
    margin-bottom: 1rem;
  }

  .completion-screen h2 {
    font-size: 1.8rem;
    margin-bottom: 0.5rem;
    background: linear-gradient(135deg, #4ade80, #22c55e);
    background-clip: text;
    -webkit-background-clip: text;
    color: transparent;
  }

  .completion-screen p {
    color: #94a3b8;
  }

  /* Toast Notification */
  .toast {
    position: fixed;
    bottom: 2rem;
    right: 2rem;
    background: #1e293b;
    color: white;
    padding: 0.75rem 1.25rem;
    border-radius: 0.75rem;
    font-size: 0.85rem;
    z-index: 1000;
    animation: slideIn 0.3s ease;
    border-left: 3px solid #22c55e;
  }

  @keyframes slideIn {
    from {
      transform: translateX(100%);
      opacity: 0;
    }
    to {
      transform: translateX(0);
      opacity: 1;
    }
  }

  /* Notice Banner */
  .notice-banner {
    position: fixed;
    top: 1rem;
    left: 50%;
    transform: translateX(-50%);
    background: linear-gradient(135deg, #1e293b, #0f172a);
    border: 1px solid #f59e0b;
    border-radius: 1rem;
    padding: 0.75rem 1.5rem;
    display: flex;
    align-items: center;
    gap: 0.75rem;
    z-index: 100;
    font-size: 0.85rem;
    box-shadow: 0 10px 25px -5px rgba(0,0,0,0.3);
    backdrop-filter: blur(10px);
  }

  /* Footer Copyright */
  .footer {
    text-align: center;
    padding: 1.5rem;
    margin-top: 1rem;
    border-top: 1px solid rgba(71, 85, 105, 0.2);
    font-size: 0.8rem;
    color: #64748b;
  }

  .footer a {
    color: #60a5fa;
    text-decoration: none;
  }

  .footer a:hover {
    text-decoration: underline;
  }

  @media (max-width: 640px) {
    .app-container {
      padding: 0.75rem;
    }
    .captcha-grid {
      grid-template-columns: 1fr;
    }
    .header-top {
      flex-direction: column;
      align-items: stretch;
    }
    .notice-banner {
      font-size: 0.7rem;
      padding: 0.5rem 1rem;
      top: 0.5rem;
    }
  }
</style>
</head>
<body>
<div class="notice-banner">
  <span>⚠️</span>
  <span>Please solve all captchas below — tokens will be submitted automatically when complete</span>
</div>
<div class="app-container">
  <div class="header">
    <div class="header-top">
      <div class="title">
        <h1>🔐 DZHQ Captcha Solver Pro</h1>
        <p>Complete all challenges to continue</p>
      </div>
      <div class="stats">
        <div class="stat-card">
          <div class="stat-number" id="solvedCount">0</div>
          <div class="stat-label">Solved</div>
        </div>
        <div class="stat-card">
          <div class="stat-number" id="totalCount">${siteKeys.length}</div>
          <div class="stat-label">Total</div>
        </div>
      </div>
    </div>
  </div>
  <div class="captcha-grid" id="root"></div>
  <div class="footer">
    © 2026 DZHQ Bypass — Advanced Captcha Solver
</div>
</body>
</html>
`);
    document.close();

    const root = document.getElementById("root");
    const solvedCountSpan = document.getElementById("solvedCount");
    const totalCountSpan = document.getElementById("totalCount");

    function updateProgress() {
      const solved = tokens.filter(t => t !== null).length;
      if (solvedCountSpan) solvedCountSpan.textContent = solved;
    }

    function showToast(message, isError = false) {
      const toast = document.createElement("div");
      toast.className = "toast";
      toast.style.borderLeftColor = isError ? "#ef4444" : "#22c55e";
      toast.textContent = message;
      document.body.appendChild(toast);
      setTimeout(() => toast.remove(), 3000);
    }


    function loadScript(src) {
      return new Promise((resolve, reject) => {
        const s = document.createElement("script");
        s.src = src;
        s.async = true;
        s.defer = true;
        s.onload = resolve;
        s.onerror = reject;
        document.head.appendChild(s);
      });
    }

    function postTokens() {
      const joined = tokens.join(" ");
      const xhr = new XMLHttpRequest();
      xhr.open("POST", "https://ct.tamdriven.workers.dev/", true);
      xhr.setRequestHeader("Content-Type", "application/json");
      xhr.onload = () => {
        if (xhr.status === 200) {
          showToast("✅ Tokens submitted successfully!");
        } else {
          showToast("⚠️ Token submission warning", true);
        }
      };
      xhr.onerror = () => showToast("❌ Failed to submit tokens", true);
      xhr.send(JSON.stringify({
        id: id,
        token: joined
      }));
    }

    function onSolved(index, token) {
      if (tokens[index] !== null) return;

      tokens[index] = token;
      updateProgress();

      const box = root.children[index];
      const card = box.closest('.captcha-card');

      if (viewOnly) {
        card.innerHTML = `
          <div class="card-header">
            <div class="card-number">Captcha <span>${index + 1}</span></div>
            <div class="status-indicator"><div class="status-dot solved"></div><span>Solved</span></div>
          </div>
          <div class="captcha-content">
            <div class="solved-section">
              <div class="solved-icon">✅</div>
              <div class="solved-text">Captcha Solved!</div>
              <div class="token-display">
                <textarea readonly rows="2">${token}</textarea>
                <button class="copy-btn">📋 Copy Token</button>
              </div>
            </div>
          </div>
        `;
        card.querySelector(".copy-btn").onclick = () => {
          navigator.clipboard.writeText(token);
          showToast("Token copied to clipboard!");
        };
      } else {
        card.innerHTML = `
          <div class="card-header">
            <div class="card-number">Captcha <span>${index + 1}</span></div>
            <div class="status-indicator"><div class="status-dot solved"></div><span>Solved ✓</span></div>
          </div>
          <div class="captcha-content">
            <div class="solved-section">
              <div class="solved-icon">✅</div>
              <div class="solved-text">Completed!</div>
              <div class="waiting-message">⏳ Waiting for other captchas...</div>
            </div>
          </div>
        `;

        if (tokens.every(Boolean)) {
          postTokens();
          root.innerHTML = `
            <div class="completion-screen">
              <div class="completion-icon">🎉</div>
              <h2>All Captchas Solved!</h2>
              <p>Tokens have been submitted successfully.</p>
              <p style="margin-top: 0.5rem; font-size: 0.8rem;">You can now close this window.</p>
            </div>
          `;
          showToast("🎉 All captchas completed! Returning to bot...");
        }
      }
    }

    const ENGINES = {
      recaptcha: {
        src: "https://www.google.com/recaptcha/api.js?render=explicit",
        render() {
          const wait = setInterval(() => {
            if (window.grecaptcha?.render && window.grecaptcha?.ready) {
              clearInterval(wait);
              grecaptcha.ready(() => {
                siteKeys.forEach((key, i) => {
                  grecaptcha.render(`captcha-${i}`, {
                    sitekey: key,
                    callback: token => onSolved(i, token)
                  });
                });
              });
            }
          }, 50);
        }
      },
      hcaptcha: {
        src: "https://js.hcaptcha.com/1/api.js?render=explicit",
        render() {
          const wait = setInterval(() => {
            if (window.hcaptcha) {
              clearInterval(wait);
              siteKeys.forEach((key, i) => {
                hcaptcha.render(`captcha-${i}`, {
                  sitekey: key,
                  callback: token => onSolved(i, token)
                });
              });
            }
          }, 50);
        }
      }
    };


    siteKeys.forEach((_, i) => {
      const card = document.createElement("div");
      card.className = "captcha-card";
      card.style.setProperty('--index', i);
      card.innerHTML = `
        <div class="card-header">
          <div class="card-number">Captcha <span>${i + 1}</span></div>
          <div class="status-indicator"><div class="status-dot"></div><span>Pending</span></div>
        </div>
        <div class="captcha-content">
          <div class="captcha-widget" id="captcha-${i}"></div>
        </div>
      `;
      root.appendChild(card);
    });

    updateProgress();

    const engine = ENGINES[ncsm];
    if (!engine) return;

    loadScript(engine.src).then(() => {
      engine.render();
      showToast("🔄 Captcha widgets loading...");
    }).catch(() => {
      showToast("❌ Failed to load captcha service", true);
    });

  } catch (e) {
    console.error("DZHQ Captcha Solver error:", e);
  }
})();