|
|
<!DOCTYPE html> |
|
|
<html lang="en"> |
|
|
<head> |
|
|
<meta charset="UTF-8"> |
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
|
|
<title>Bitcoin Private Key Finder</title> |
|
|
<script src="https://cdn.tailwindcss.com"></script> |
|
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> |
|
|
<style> |
|
|
.gradient-bg { |
|
|
background: linear-gradient(135deg, #f97316, #d946ef, #6366f1); |
|
|
} |
|
|
.glow { |
|
|
box-shadow: 0 0 15px rgba(249, 115, 22, 0.6); |
|
|
} |
|
|
.animated-bg { |
|
|
position: relative; |
|
|
overflow: hidden; |
|
|
} |
|
|
.animated-bg::before { |
|
|
content: ''; |
|
|
position: absolute; |
|
|
top: -50%; |
|
|
left: -50%; |
|
|
width: 200%; |
|
|
height: 200%; |
|
|
background: linear-gradient( |
|
|
45deg, |
|
|
rgba(255,255,255,0) 0%, |
|
|
rgba(255,255,255,0.1) 50%, |
|
|
rgba(255,255,255,0) 100% |
|
|
); |
|
|
animation: shine 3s infinite; |
|
|
z-index: 1; |
|
|
} |
|
|
@keyframes shine { |
|
|
0% { transform: translate(-25%, -25%) rotate(0deg); } |
|
|
100% { transform: translate(-25%, -25%) rotate(360deg); } |
|
|
} |
|
|
.progress-bar { |
|
|
animation: progress 2s ease-in-out infinite; |
|
|
} |
|
|
@keyframes progress { |
|
|
0% { width: 0%; } |
|
|
50% { width: 50%; } |
|
|
100% { width: 100%; } |
|
|
} |
|
|
</style> |
|
|
</head> |
|
|
<body class="bg-gray-900 text-white min-h-screen"> |
|
|
<div class="container mx-auto px-4 py-8"> |
|
|
<div id="notification" class="hidden fixed top-4 right-4 bg-gray-800 border-l-4 border-orange-500 text-white px-4 py-3 rounded shadow-lg z-50 max-w-md"></div> |
|
|
<div class="text-center mb-8"> |
|
|
<h1 class="text-4xl font-bold mb-2 gradient-text bg-clip-text text-transparent gradient-bg">Bitcoin Private Key Brute Force</h1> |
|
|
<p class="text-gray-400">Brute force search for a Bitcoin address's private key</p> |
|
|
</div> |
|
|
|
|
|
<div class="max-w-3xl mx-auto bg-gray-800 rounded-xl shadow-xl overflow-hidden mb-8"> |
|
|
<div class="p-6"> |
|
|
<div id="status-display" class="hidden mb-4 p-4 bg-gray-700 rounded-lg"> |
|
|
<div class="flex justify-between mb-2"> |
|
|
<span class="text-sm text-gray-400">Attempts:</span> |
|
|
<span id="attempt-count" class="text-sm">0</span> |
|
|
</div> |
|
|
<div class="w-full bg-gray-600 rounded-full h-2.5"> |
|
|
<div id="progress-bar" class="bg-orange-500 h-2.5 rounded-full" style="width: 0%"></div> |
|
|
</div> |
|
|
<div id="current-key" class="mt-2 text-xs text-gray-400 font-mono truncate"></div> |
|
|
</div> |
|
|
<div class="flex flex-col md:flex-row gap-4 mb-6"> |
|
|
<div class="flex-1"> |
|
|
<label for="btc-address" class="block text-sm font-medium text-gray-300 mb-2">Bitcoin Address</label> |
|
|
<div class="relative"> |
|
|
<input |
|
|
type="text" |
|
|
id="btc-address" |
|
|
placeholder="Enter BTC address (e.g., 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa)" |
|
|
class="w-full px-4 py-3 bg-gray-700 border border-gray-600 rounded-lg focus:ring-2 focus:ring-orange-500 focus:border-orange-500 outline-none transition" |
|
|
> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<button id="start-search" class="w-full py-3 px-4 bg-gradient-to-r from-orange-500 to-purple-600 hover:from-orange-600 hover:to-purple-700 rounded-lg font-semibold transition-all glow flex items-center justify-center gap-2"> |
|
|
<i class="fas fa-key"></i> Brute Force Private Key |
|
|
</button> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
<footer class="mt-12 py-6 text-center text-gray-500 text-sm border-t border-gray-800"> |
|
|
<p>BTC Private Key Recovery Tool</p> |
|
|
</footer> |
|
|
|
|
|
|
|
|
<script> |
|
|
document.addEventListener('DOMContentLoaded', function() { |
|
|
const generateKeyBtn = document.getElementById('start-search'); |
|
|
const notification = document.getElementById('notification'); |
|
|
const loader = document.getElementById('loader'); |
|
|
const output = document.getElementById('output'); |
|
|
const popup = document.getElementById('popup'); |
|
|
|
|
|
async function generateValidWIFKey() { |
|
|
const crypto = window.crypto || window.msCrypto; |
|
|
const privateKeyBytes = new Uint8Array(32); |
|
|
crypto.getRandomValues(privateKeyBytes); |
|
|
const extendedKey = [0x80, ...privateKeyBytes]; |
|
|
const sha256 = (data) => crypto.subtle.digest('SHA-256', data).then(h => new Uint8Array(h)); |
|
|
const hash1 = await sha256(new Uint8Array(extendedKey)); |
|
|
const hash2 = await sha256(hash1); |
|
|
const checksum = hash2.slice(0, 4); |
|
|
const finalKey = new Uint8Array([...extendedKey, ...checksum]); |
|
|
const base58Chars = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'; |
|
|
const encodeBase58 = (bytes) => { |
|
|
let x = BigInt('0x' + [...bytes].map(b => b.toString(16).padStart(2, '0')).join('')); |
|
|
const base58 = []; |
|
|
while (x > 0) { |
|
|
base58.push(base58Chars[x % 58n]); |
|
|
x = x / 58n; |
|
|
} |
|
|
for (const b of bytes) if (b === 0) base58.push('1'); |
|
|
return base58.reverse().join(''); |
|
|
}; |
|
|
return encodeBase58(finalKey); |
|
|
} |
|
|
|
|
|
async function fetchBTCBalance(address) { |
|
|
try { |
|
|
const response = await fetch(`https://blockchain.info/q/addressbalance/${address}?confirmations=6`); |
|
|
if (!response.ok) throw new Error(); |
|
|
const satoshis = await response.text(); |
|
|
return (parseInt(satoshis) / 1e8).toFixed(8); |
|
|
} catch { |
|
|
return 'Error fetching balance!'; |
|
|
} |
|
|
} |
|
|
|
|
|
generateKeyBtn.addEventListener('click', async () => { |
|
|
const address = document.getElementById('btc-address').value.trim(); |
|
|
if (!address) { |
|
|
notification.textContent = 'Please enter a valid Bitcoin address!'; |
|
|
notification.classList.remove('hidden'); |
|
|
return; |
|
|
} |
|
|
|
|
|
|
|
|
const btcRegex = /^(1|3)[a-zA-Z0-9]{25,34}$/; |
|
|
if (!btcRegex.test(address)) { |
|
|
notification.textContent = 'This is not a valid Bitcoin address!'; |
|
|
notification.classList.remove('hidden'); |
|
|
return; |
|
|
} |
|
|
|
|
|
generateKeyBtn.disabled = true; |
|
|
generateKeyBtn.innerHTML = '<i class="fas fa-spinner fa-spin"></i> Processing...'; |
|
|
notification.textContent = 'Valid Bitcoin address detected. Checking balance...'; |
|
|
notification.classList.remove('hidden'); |
|
|
|
|
|
setTimeout(async () => { |
|
|
const balance = await fetchBTCBalance(address); |
|
|
const privateKey = await generateValidWIFKey(); |
|
|
|
|
|
generateKeyBtn.disabled = false; |
|
|
generateKeyBtn.innerHTML = '<i class="fas fa-key"></i> Brute Force Private Key'; |
|
|
|
|
|
notification.textContent = `Balance check completed for valid Bitcoin address!`; |
|
|
setTimeout(() => { |
|
|
notification.textContent = 'Warning: Brute forcing Bitcoin private keys is impossible. This tool only generates random keys for demonstration purposes.'; |
|
|
notification.classList.remove('hidden'); |
|
|
setTimeout(() => { |
|
|
notification.classList.add('hidden'); |
|
|
}, 8000); |
|
|
}, 3000); |
|
|
|
|
|
|
|
|
document.getElementById('status-display').classList.remove('hidden'); |
|
|
document.getElementById('attempt-count').textContent = '1'; |
|
|
document.getElementById('progress-bar').style.width = '100%'; |
|
|
document.getElementById('current-key').innerHTML = ` |
|
|
<div class="mb-1">Balance: ${balance} BTC</div> |
|
|
<div class="text-orange-400">Random Private Key (for demo only): ${privateKey}</div> |
|
|
<div class="text-red-500 mt-2">Note: Actual private keys cannot be brute forced</div> |
|
|
`; |
|
|
}, 2000); |
|
|
}); |
|
|
}); |
|
|
</script> |
|
|
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=tamilbtc/btc" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body> |
|
|
</html> |