Greasy Fork is available in English.
Modern Captcha Solver For DZHQ Bypass Bot
// ==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);
}
})();