Spaces:
Running
Running
<html lang="en"> | |
<head> | |
<meta charset="UTF-8"> | |
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
<title>ShadowWatch - Dark Web Intelligence</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> | |
@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;700&display=swap'); | |
body { | |
font-family: 'JetBrains Mono', monospace; | |
background-color: #0a0a0a; | |
} | |
.signal-strength { | |
height: 20px; | |
width: 100px; | |
position: relative; | |
} | |
.signal-bar { | |
position: absolute; | |
bottom: 0; | |
width: 15px; | |
background-color: #00ff00; | |
opacity: 0.3; | |
} | |
.signal-bar.filled { | |
opacity: 1; | |
} | |
.blink { | |
animation: blink-animation 1.5s steps(2, start) infinite; | |
} | |
@keyframes blink-animation { | |
to { | |
visibility: hidden; | |
} | |
} | |
.pulsing-border { | |
animation: pulse-border 2s infinite; | |
} | |
@keyframes pulse-border { | |
0% { | |
box-shadow: 0 0 0 0 rgba(0, 255, 0, 0.7); | |
} | |
70% { | |
box-shadow: 0 0 0 10px rgba(0, 255, 0, 0); | |
} | |
100% { | |
box-shadow: 0 0 0 0 rgba(0, 255, 0, 0); | |
} | |
} | |
.terminal-scroll { | |
scrollbar-width: thin; | |
scrollbar-color: #00ff00 #111111; | |
} | |
.terminal-scroll::-webkit-scrollbar { | |
width: 8px; | |
} | |
.terminal-scroll::-webkit-scrollbar-track { | |
background: #111111; | |
} | |
.terminal-scroll::-webkit-scrollbar-thumb { | |
background-color: #00ff00; | |
border-radius: 6px; | |
border: 1px solid #00ff00; | |
} | |
.code-input { | |
caret-color: #00ff00; | |
} | |
.gradient-text { | |
background: linear-gradient(90deg, #00ff00, #00aa00); | |
-webkit-background-clip: text; | |
background-clip: text; | |
color: transparent; | |
} | |
.scan-animation { | |
animation: scan 2s linear infinite; | |
} | |
@keyframes scan { | |
0% { | |
background-position: 0 0; | |
} | |
100% { | |
background-position: 0 30px; | |
} | |
} | |
</style> | |
</head> | |
<body class="text-gray-200"> | |
<div class="container mx-auto px-4 py-6"> | |
<!-- Header --> | |
<header class="flex justify-between items-center border-b border-green-600 pb-4 mb-8"> | |
<div class="flex items-center"> | |
<div class="w-4 h-12 bg-green-500 mr-3"></div> | |
<div> | |
<h1 class="text-2xl font-bold gradient-text">SHADOWWATCH</h1> | |
<p class="text-xs text-gray-500">DARK WEB INTELLIGENCE PLATFORM</p> | |
</div> | |
</div> | |
<div class="flex items-center space-x-4"> | |
<div class="flex items-center"> | |
<div class="signal-strength mr-2"> | |
<div class="signal-bar" style="left: 0; height: 5px;"></div> | |
<div class="signal-bar" style="left: 20px; height: 10px;"></div> | |
<div class="signal-bar filled" style="left: 40px; height: 15px;"></div> | |
<div class="signal-bar filled" style="left: 60px; height: 20px;"></div> | |
<div class="signal-bar filled" style="left: 80px; height: 20px;"></div> | |
</div> | |
<span class="text-green-500 text-xs">TOR RELAY: ACTIVE</span> | |
</div> | |
<span class="text-gray-500">|</span> | |
<div class="text-xs"> | |
<span class="text-yellow-400">ENCRYPTION: </span> | |
<span class="text-green-400">AES-256</span> | |
</div> | |
<span class="text-gray-500">|</span> | |
<div class="text-xs"> | |
<span class="text-yellow-400">SESSION: </span> | |
<span class="text-green-400">SECURE</span> | |
</div> | |
<button class="bg-red-900 hover:bg-red-800 text-xs px-3 py-1 rounded-md" id="killswitch"> | |
<i class="fas fa-power-off mr-1"></i> KILLSWITCH | |
</button> | |
</div> | |
</header> | |
<!-- Main Dashboard --> | |
<div class="grid grid-cols-1 lg:grid-cols-4 gap-6"> | |
<!-- Left sidebar --> | |
<div class="lg:col-span-1 space-y-6"> | |
<!-- User Profile --> | |
<div class="bg-gray-900 rounded-lg border border-gray-800 p-4"> | |
<div class="flex items-center mb-4"> | |
<div class="w-12 h-12 rounded-full bg-gray-800 flex items-center justify-center border border-green-500"> | |
<i class="fas fa-user-secret text-green-500"></i> | |
</div> | |
<div class="ml-3"> | |
<h3 class="font-bold text-green-400">AGENT-74X</h3> | |
<p class="text-xs text-gray-500">SENIOR INTELLIGENCE ANALYST</p> | |
</div> | |
</div> | |
<div class="grid grid-cols-2 gap-2 text-xs"> | |
<div class="bg-gray-800 rounded p-2"> | |
<div class="text-gray-500">CLEARANCE</div> | |
<div class="text-green-400">LEVEL 5</div> | |
</div> | |
<div class="bg-gray-800 rounded p-2"> | |
<div class="text-gray-500">STATUS</div> | |
<div class="text-green-400">ACTIVE</div> | |
</div> | |
<div class="bg-gray-800 rounded p-2"> | |
<div class="text-gray-500">TEAM</div> | |
<div class="text-green-400">PHANTOM</div> | |
</div> | |
<div class="bg-gray-800 rounded p-2"> | |
<div class="text-gray-500">SINCE</div> | |
<div class="text-green-400">2018</div> | |
</div> | |
</div> | |
</div> | |
<!-- Quick Actions --> | |
<div class="bg-gray-900 rounded-lg border border-gray-800 p-4"> | |
<h3 class="font-bold text-green-500 mb-3 flex items-center"> | |
<i class="fas fa-bolt mr-2"></i> QUICK ACTIONS | |
</h3> | |
<div class="space-y-2"> | |
<button id="deep-scan" class="w-full bg-gray-800 hover:bg-green-900 text-green-400 text-left text-sm py-2 px-3 rounded flex items-center"> | |
<i class="fas fa-search mr-2"></i> DEEP SCAN | |
</button> | |
<button id="credential-trace" class="w-full bg-gray-800 hover:bg-green-900 text-green-400 text-left text-sm py-2 px-3 rounded flex items-center"> | |
<i class="fas fa-fingerprint mr-2"></i> CREDENTIAL TRACE | |
</button> | |
<button id="chatter-analysis" class="w-full bg-gray-800 hover:bg-green-900 text-green-400 text-left text-sm py-2 px-3 rounded flex items-center"> | |
<i class="fas fa-comment-dots mr-2"></i> CHATTER ANALYSIS | |
</button> | |
<button id="identity-alert" class="w-full bg-gray-800 hover:bg-green-900 text-green-400 text-left text-sm py-2 px-3 rounded flex items-center"> | |
<i class="fas fa-mask mr-2"></i> IDENTITY ALERT | |
</button> | |
</div> | |
<div id="scan-progress" class="mt-3 hidden"> | |
<div class="flex justify-between text-xs text-gray-400 mb-1"> | |
<span>SCAN PROGRESS</span> | |
<span id="progress-percent">0%</span> | |
</div> | |
<div class="w-full bg-gray-800 rounded-full h-1.5"> | |
<div id="progress-bar" class="bg-green-500 h-1.5 rounded-full" style="width: 0%"></div> | |
</div> | |
</div> | |
<div id="scan-result" class="mt-3 hidden"> | |
<div class="text-xs p-2 rounded border border-green-900 bg-gray-800 text-green-400"> | |
<i class="fas fa-check-circle mr-1"></i> | |
<span>Scan completed successfully</span> | |
</div> | |
</div> | |
</div> | |
<!-- Threat Level --> | |
<div class="bg-gray-900 rounded-lg border border-gray-800 p-4"> | |
<div class="flex justify-between items-center mb-3"> | |
<h3 class="font-bold text-green-500 flex items-center"> | |
<i class="fas fa-shield-alt mr-2"></i> THREAT LEVEL | |
</h3> | |
<span class="text-xs bg-red-900 text-red-300 px-2 py-1 rounded-full">ELEVATED</span> | |
</div> | |
<div class="h-2 w-full bg-gray-800 rounded-full mb-2"> | |
<div class="h-2 bg-gradient-to-r from-green-500 to-yellow-500 rounded-full" style="width: 70%"></div> | |
</div> | |
<div class="flex justify-between text-xs text-gray-500"> | |
<span>LOW</span> | |
<span>MODERATE</span> | |
<span>HIGH</span> | |
<span>CRITICAL</span> | |
</div> | |
<div class="mt-4 text-xs text-gray-400"> | |
<div class="flex items-center mb-2"> | |
<div class="w-2 h-2 bg-green-500 rounded-full mr-2"></div> | |
<span>+12% DARKNET ACTIVITY</span> | |
</div> | |
<div class="flex items-center"> | |
<div class="w-2 h-2 bg-red-500 rounded-full mr-2"></div> | |
<span>3 NEW DATA BREACHES</span> | |
</div> | |
</div> | |
</div> | |
</div> | |
<!-- Main Content --> | |
<div class="lg:col-span-3 space-y-6"> | |
<!-- Active Threats --> | |
<div class="bg-gray-900 rounded-lg border border-gray-800 overflow-hidden"> | |
<div class="border-b border-gray-800 p-4 bg-gray-950 flex justify-between items-center"> | |
<h2 class="font-bold text-green-400 flex items-center"> | |
<i class="fas fa-radiation mr-2"></i> ACTIVE THREATS | |
</h2> | |
<div class="text-xs flex items-center"> | |
<div class="w-2 h-2 rounded-full bg-green-500 mr-1 pulsing-border"></div> | |
<span class="text-green-400">REALTIME MONITORING</span> | |
</div> | |
</div> | |
<div class="grid grid-cols-1 md:grid-cols-3"> | |
<div class="border-b md:border-b-0 md:border-r border-gray-800 p-4 hover:bg-gray-950 cursor-pointer transition"> | |
<div class="flex items-center mb-2"> | |
<div class="w-9 h-9 bg-red-900 rounded-full flex items-center justify-center mr-3"> | |
<i class="fas fa-key text-red-400"></i> | |
</div> | |
<div> | |
<h3 class="font-bold">CREDENTIAL LEAK</h3> | |
<p class="text-xs text-gray-500">12 MINUTES AGO</p> | |
</div> | |
</div> | |
<p class="text-xs text-gray-400 mb-1">FINANCIAL INSTITUTION DATABASE</p> | |
<div class="flex justify-between text-xs mb-2"> | |
<span class="text-red-400">26,752 RECORDS</span> | |
<span class="text-yellow-400">REDACTED HOST</span> | |
</div> | |
<div class="w-full bg-gray-800 rounded-full h-1.5"> | |
<div class="bg-red-500 h-1.5 rounded-full" style="width: 85%"></div> | |
</div> | |
</div> | |
<div class="border-b md:border-b-0 md:border-r border-gray-800 p-4 hover:bg-gray-950 cursor-pointer transition"> | |
<div class="flex items-center mb-2"> | |
<div class="w-9 h-9 bg-yellow-900 rounded-full flex items-center justify-center mr-3"> | |
<i class="fas fa-comments text-yellow-400"></i> | |
</div> | |
<div> | |
<h3 class="font-bold">CHATTER SPIKE</h3> | |
<p class="text-xs text-gray-500">34 MINUTES AGO</p> | |
</div> | |
</div> | |
<p class="text-xs text-gray-400 mb-1">MENTION OF MAJOR RETAILER</p> | |
<div class="flex justify-between text-xs mb-2"> | |
<span class="text-yellow-400">358 MENTIONS</span> | |
<span class="text-blue-400">72% INCREASE</span> | |
</div> | |
<div class="w-full bg-gray-800 rounded-full h-1.5"> | |
<div class="bg-yellow-500 h-1.5 rounded-full" style="width: 65%"></div> | |
</div> | |
</div> | |
<div class="p-4 hover:bg-gray-950 cursor-pointer transition"> | |
<div class="flex items-center mb-2"> | |
<div class="w-9 h-9 bg-purple-900 rounded-full flex items-center justify-center mr-3"> | |
<i class="fas fa-server text-purple-400"></i> | |
</div> | |
<div> | |
<h3 class="font-bold">SERVER BREACH</h3> | |
<p class="text-xs text-gray-500">1 HOUR AGO</p> | |
</div> | |
</div> | |
<p class="text-xs text-gray-400 mb-1">GOVERNMENT CONTRACTOR</p> | |
<div class="flex justify-between text-xs mb-2"> | |
<span class="text-purple-400">SENSITIVE DATA</span> | |
<span class="text-red-400">CONFIRMED</span> | |
</div> | |
<div class="w-full bg-gray-800 rounded-full h-1.5"> | |
<div class="bg-purple-500 h-1.5 rounded-full" style="width: 45%"></div> | |
</div> | |
</div> | |
</div> | |
</div> | |
<!-- Terminal & Alerts --> | |
<div class="grid grid-cols-1 lg:grid-cols-3 gap-6"> | |
<div class="lg:col-span-2"> | |
<div class="bg-gray-900 rounded-lg border border-gray-800 overflow-hidden h-full"> | |
<div class="border-b border-gray-800 p-3 bg-gray-950 flex justify-between items-center"> | |
<h2 class="font-bold text-green-400 flex items-center"> | |
<i class="fas fa-terminal mr-2"></i> MONITOR TERMINAL | |
</h2> | |
<div class="flex space-x-2"> | |
<button class="text-xs bg-gray-800 hover:bg-green-900 text-green-400 px-2 py-1 rounded" id="clear-terminal"> | |
<i class="fas fa-trash mr-1"></i> CLEAR | |
</button> | |
<button class="text-xs bg-gray-800 hover:bg-green-900 text-green-400 px-2 py-1 rounded" id="refresh-terminal"> | |
<i class="fas fa-redo mr-1"></i> REFRESH | |
</button> | |
</div> | |
</div> | |
<div id="terminal-content" class="h-64 p-3 overflow-y-auto terminal-scroll bg-black text-green-400 text-xs font-mono"> | |
<div class="mb-1"><span class="text-yellow-400">root@shadowwatch:~#</span> ./scan --deep --crawl -t credential_leak</div> | |
<div class="mb-1">[+] Initiating deep scan protocol...</div> | |
<div class="mb-1">[+] Connecting to TOR network... <span class="text-green-400">SUCCESS</span></div> | |
<div class="mb-1">[+] Establishing secure channels... <span class="text-green-400">SUCCESS</span></div> | |
<div class="mb-1">[+] Crawling 12 marketplaces, 8 forums, 15 channels</div> | |
<div class="mb-1">[!] Potential leak detected: financial_institution_db.tar.gz</div> | |
<div class="mb-1">[!] Analyzing contents... | |
<span class="inline-block loader animate-spin h-3 w-3 border-2 border-green-500 border-t-transparent rounded-full"></span> | |
</div> | |
<div class="mb-1">[!] CREDENTIAL ALERT: 26,752 records confirmed valid</div> | |
<div class="mb-1">[+] Initiating analysis of chatter patterns...</div> | |
<div class="mb-1">[!] Increased mentions of "major_retailer" detected (+72%)</div> | |
<div class="mb-1">[+] Scanning pastebin clones for matches...</div> | |
<div class="mb-1">[!] MATCH: server_dump.txt contains 438 credentials</div> | |
<div class="mb-1">root@shadowwatch:~#<span class="code-input"> _</span></div> | |
</div> | |
</div> | |
</div> | |
<div> | |
<div class="bg-gray-900 rounded-lg border border-gray-800 overflow-hidden h-full"> | |
<div class="border-b border-gray-800 p-3 bg-gray-950 flex justify-between items-center"> | |
<h2 class="font-bold text-green-400 flex items-center"> | |
<i class="fas fa-bell mr-2"></i> ALERT FEED | |
</h2> | |
<span id="alert-count" class="text-xs bg-red-900 text-red-300 px-2 py-1 rounded-full">3 NEW</span> | |
</div> | |
<div id="alert-feed" class="h-64 overflow-y-auto terminal-scroll"> | |
<div class="p-3 border-b border-gray-800 hover:bg-gray-950 cursor-pointer transition"> | |
<div class="flex justify-between items-start mb-1"> | |
<span class="text-xs bg-red-900 text-red-300 px-2 py-0.5 rounded-full">CRITICAL</span> | |
<span class="text-xs text-gray-500">12:23:45</span> | |
</div> | |
<p class="text-sm">Large credential dump detected on DarkNet market</p> | |
<p class="text-xs text-gray-400 mt-1 flex items-center"> | |
<i class="fas fa-database mr-1"></i> Financial records (26K+) potentially compromised | |
</p> | |
</div> | |
<div class="p-3 border-b border-gray-800 hover:bg-gray-950 cursor-pointer transition"> | |
<div class="flex justify-between items-start mb-1"> | |
<span class="text-xs bg-yellow-900 text-yellow-300 px-2 py-0.5 rounded-full">WARNING</span> | |
<span class="text-xs text-gray-500">11:58:12</span> | |
</div> | |
<p class="text-sm">Chatter spike detected mentioning major retailer</p> | |
<p class="text-xs text-gray-400 mt-1 flex items-center"> | |
<i class="fas fa-comment-alt mr-1"></i> 358 mentions in last 2 hours (+72%) | |
</p> | |
</div> | |
<div class="p-3 border-b border-gray-800 hover:bg-gray-950 cursor-pointer transition"> | |
<div class="flex justify-between items-start mb-1"> | |
<span class="text-xs bg-purple-900 text-purple-300 px-2 py-0.5 rounded-full">SUSPICIOUS</span> | |
<span class="text-xs text-gray-500">10:35:27</span> | |
</div> | |
<p class="text-sm">Server breach reported on underground forum</p> | |
<p class="text-xs text-gray-400 mt-1 flex items-center"> | |
<i class="fas fa-shield-alt mr-1"></i> Government contractor data potentially exposed | |
</p> | |
</div> | |
<div class="p-3 border-b border-gray-800 hover:bg-gray-950 cursor-pointer transition"> | |
<div class="flex justify-between items-start mb-1"> | |
<span class="text-xs bg-blue-900 text-blue-300 px-2 py-0.5 rounded-full">INFO</span> | |
<span class="text-xs text-gray-500">09:42:18</span> | |
</div> | |
<p class="text-sm">New ransomware variant detected in wild</p> | |
<p class="text-xs text-gray-400 mt-1 flex items-center"> | |
<i class="fas fa-bug mr-1"></i> Targeting healthcare sector, requires patch KB5021234 | |
</p> | |
</div> | |
<div class="p-3 hover:bg-gray-950 cursor-pointer transition"> | |
<div class="flex justify-between items-start mb-1"> | |
<span class="text-xs bg-yellow-900 text-yellow-300 px-2 py-0.5 rounded-full">WARNING</span> | |
<span class="text-xs text-gray-500">08:15:03</span> | |
</div> | |
<p class="text-sm">Unusual login attempts from ASN 14061</p> | |
<p class="text-xs text-gray-400 mt-1 flex items-center"> | |
<i class="fas fa-globe mr-1"></i> 147 attempts from new IP blocks | |
</p> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
<!-- Data Analysis --> | |
<div class="bg-gray-900 rounded-lg border border-gray-800 overflow-hidden"> | |
<div class="border-b border-gray-800 p-4 bg-gray-950 flex justify-between items-center"> | |
<h2 class="font-bold text-green-400 flex items-center"> | |
<i class="fas fa-chart-line mr-2"></i> DARK WEB ACTIVITY ANALYSIS | |
</h2> | |
<div class="flex space-x-3"> | |
<div class="text-xs"> | |
<span class="text-yellow-400">LAST 24H: </span> | |
<span id="alert-count-main" class="text-green-400">1,247 ALERTS</span> | |
</div> | |
<div class="text-xs"> | |
<span class="text-yellow-400">TOP THREAT: </span> | |
<span class="text-red-400">CREDENTIAL LEAKS</span> | |
</div> | |
</div> | |
</div> | |
<div class="grid grid-cols-1 md:grid-cols-3 gap-4 p-4"> | |
<div class="bg-gray-950 p-3 rounded border border-gray-800"> | |
<div class="flex justify-between items-center mb-2"> | |
<h3 class="text-sm font-bold text-green-400">CREDENTIAL EXPOSURE</h3> | |
<span class="text-xs bg-red-900 text-red-300 px-2 py-0.5 rounded-full">+24%</span> | |
</div> | |
<div class="h-40"> | |
<canvas id="credentialChart"></canvas> | |
</div> | |
<div class="text-xs text-gray-400 mt-2 flex justify-between"> | |
<span>12H AGO</span> | |
<span>6H AGO</span> | |
<span>CURRENT</span> | |
</div> | |
</div> | |
<div class="bg-gray-950 p-3 rounded border border-gray-800"> | |
<div class="flex justify-between items-center mb-2"> | |
<h3 class="text-sm font-bold text-green-400">FORUM ACTIVITY</h3> | |
<span class="text-xs bg-yellow-900 text-yellow-300 px-2 py-0.5 rounded-full">+18%</span> | |
</div> | |
<div class="h-40"> | |
<canvas id="forumChart"></canvas> | |
</div> | |
<div class="text-xs text-gray-400 mt-2 flex justify-between"> | |
<span>12H AGO</span> | |
<span>6H AGO</span> | |
<span>CURRENT</span> | |
</div> | |
</div> | |
<div class="bg-gray-950 p-3 rounded border border-gray-800"> | |
<div class="flex justify-between items-center mb-2"> | |
<h3 class="text-sm font-bold text-green-400">THREAT TYPES</h3> | |
<div class="text-xs bg-gray-800 text-gray-300 px-2 py-0.5 rounded-full">ANALYSIS</div> | |
</div> | |
<div class="h-40"> | |
<canvas id="threatChart"></canvas> | |
</div> | |
<div class="text-xs text-gray-400 mt-2 flex justify-center space-x-4"> | |
<span><span class="inline-block w-2 h-2 bg-red-500 rounded-full mr-1"></span>LEAKS</span> | |
<span><span class="inline-block w-2 h-2 bg-yellow-500 rounded-full mr-1"></span>CHATTER</span> | |
<span><span class="inline-block w-2 h-2 bg-purple-500 rounded-full mr-1"></span>BREACHES</span> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
<!-- Footer --> | |
<footer class="mt-8 border-t border-gray-800 pt-4 text-xs text-gray-600 flex justify-between items-center"> | |
<div> | |
<span>SHADOWWATCH v3.7.4</span> | |
<span class="mx-2">|</span> | |
<span>SECURE SIGNAL: ENCRYPTED</span> | |
<span class="mx-2">|</span> | |
<span>LAST SYNCHRONIZATION: <span class="text-green-400">2m 34s ago</span></span> | |
</div> | |
<div class="flex items-center"> | |
<div class="w-2 h-2 rounded-full bg-green-500 mr-2"></div> | |
<span>OPERATIONAL</span> | |
<span class="mx-2">|</span> | |
<span id="status-message" class="blink text-yellow-400">AWAITING COMMANDS</span> | |
</div> | |
</footer> | |
</div> | |
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script> | |
<script> | |
// Initialize charts | |
document.addEventListener('DOMContentLoaded', function() { | |
// Credential Exposure Chart | |
const ctx1 = document.getElementById('credentialChart').getContext('2d'); | |
new Chart(ctx1, { | |
type: 'line', | |
data: { | |
labels: ['00:00', '04:00', '08:00', '12:00', '16:00', '20:00', 'Now'], | |
datasets: [{ | |
label: 'Credentials', | |
data: [65, 59, 80, 81, 92, 105, 132], | |
borderColor: '#ff5555', | |
backgroundColor: 'rgba(255, 85, 85, 0.1)', | |
tension: 0.4, | |
fill: true, | |
borderWidth: 2, | |
pointRadius: 0 | |
}] | |
}, | |
options: { | |
responsive: true, | |
maintainAspectRatio: false, | |
plugins: { | |
legend: { | |
display: false | |
} | |
}, | |
scales: { | |
x: { | |
display: false, | |
grid: { | |
display: false | |
} | |
}, | |
y: { | |
display: false, | |
grid: { | |
display: false | |
} | |
} | |
} | |
} | |
}); | |
// Forum Activity Chart | |
const ctx2 = document.getElementById('forumChart').getContext('2d'); | |
new Chart(ctx2, { | |
type: 'bar', | |
data: { | |
labels: ['00:00', '04:00', '08:00', '12:00', '16:00', '20:00', 'Now'], | |
datasets: [{ | |
label: 'Posts', | |
data: [30, 42, 55, 72, 63, 88, 102], | |
backgroundColor: 'rgba(255, 255, 85, 0.7)', | |
borderColor: 'rgba(255, 255, 85, 1)', | |
borderWidth: 0 | |
}] | |
}, | |
options: { | |
responsive: true, | |
maintainAspectRatio: false, | |
plugins: { | |
legend: { | |
display: false | |
} | |
}, | |
scales: { | |
x: { | |
display: false, | |
grid: { | |
display: false | |
} | |
}, | |
y: { | |
display: false, | |
grid: { | |
display: false | |
} | |
} | |
} | |
} | |
}); | |
// Threat Types Chart | |
const ctx3 = document.getElementById('threatChart').getContext('2d'); | |
new Chart(ctx3, { | |
type: 'doughnut', | |
data: { | |
labels: ['Credential Leaks', 'Chatter Spikes', 'Server Breaches'], | |
datasets: [{ | |
data: [45, 35, 20], | |
backgroundColor: [ | |
'rgba(255, 85, 85, 0.7)', | |
'rgba(255, 255, 85, 0.7)', | |
'rgba(170, 85, 255, 0.7)' | |
], | |
borderColor: [ | |
'rgba(255, 85, 85, 1)', | |
'rgba(255, 255, 85, 1)', | |
'rgba(170, 85, 255, 1)' | |
], | |
borderWidth: 0 | |
}] | |
}, | |
options: { | |
responsive: true, | |
maintainAspectRatio: false, | |
plugins: { | |
legend: { | |
display: false | |
} | |
}, | |
cutout: '65%' | |
} | |
}); | |
// Simulate terminal updates | |
const terminal = document.getElementById('terminal-content'); | |
let count = 0; | |
setInterval(() => { | |
if (count < 3) { | |
const newEntry = document.createElement('div'); | |
newEntry.className = 'mb-1 text-gray-500'; | |
newEntry.textContent = `[${new Date().toLocaleTimeString()}] Background scan: ${Math.floor(Math.random() * 100)} new items found`; | |
terminal.appendChild(newEntry); | |
terminal.scrollTop = terminal.scrollHeight; | |
count++; | |
} | |
}, 10000); | |
// Blinking cursor effect | |
setInterval(() => { | |
const cursor = document.querySelector('.code-input'); | |
cursor.classList.toggle('opacity-0'); | |
}, 500); | |
// Quick action functionality | |
const quickActions = { | |
currentScan: null, | |
alertCount: 3, | |
addAlert: function(type, message, details) { | |
const alertFeed = document.getElementById('alert-feed'); | |
const alertCount = document.getElementById('alert-count'); | |
const alertCountMain = document.getElementById('alert-count-main'); | |
const timestamp = new Date().toLocaleTimeString(); | |
const alertTypes = { | |
'CRITICAL': 'bg-red-900 text-red-300', | |
'WARNING': 'bg-yellow-900 text-yellow-300', | |
'SUSPICIOUS': 'bg-purple-900 text-purple-300', | |
'INFO': 'bg-blue-900 text-blue-300' | |
}; | |
const icons = { | |
'CRITICAL': 'fa-exclamation-triangle', | |
'WARNING': 'fa-exclamation-circle', | |
'SUSPICIOUS': 'fa-user-secret', | |
'INFO': 'fa-info-circle' | |
}; | |
const alertDiv = document.createElement('div'); | |
alertDiv.className = 'p-3 border-b border-gray-800 hover:bg-gray-950 cursor-pointer transition'; | |
alertDiv.innerHTML = ` | |
<div class="flex justify-between items-start mb-1"> | |
<span class="text-xs ${alertTypes[type]} px-2 py-0.5 rounded-full">${type}</span> | |
<span class="text-xs text-gray-500">${timestamp}</span> | |
</div> | |
<p class="text-sm">${message}</p> | |
<p class="text-xs text-gray-400 mt-1 flex items-center"> | |
<i class="fas ${icons[type]} mr-1"></i> ${details} | |
</p> | |
`; | |
alertFeed.insertBefore(alertDiv, alertFeed.firstChild); | |
this.alertCount++; | |
alertCount.textContent = `${this.alertCount} NEW`; | |
// Update the main alert counter in analysis section | |
const currentCount = parseInt(alertCountMain.textContent.replace(/,/g, '')); | |
alertCountMain.textContent = (currentCount + 1).toLocaleString() + ' ALERTS'; | |
}, | |
terminalMessage: function(message) { | |
const terminal = document.getElementById('terminal-content'); | |
const cursor = document.querySelector('.code-input'); | |
cursor.remove(); | |
const newLine = document.createElement('div'); | |
newLine.className = 'mb-1'; | |
newLine.textContent = message; | |
terminal.appendChild(newLine); | |
// Add back the cursor | |
const prompt = document.createElement('div'); | |
prompt.className = 'mb-1'; | |
prompt.innerHTML = '<span class="text-yellow-400">root@shadowwatch:~#</span><span class="code-input"> _</span>'; | |
terminal.appendChild(prompt); | |
terminal.scrollTop = terminal.scrollHeight; | |
}, | |
runDeepScan: function() { | |
if (this.currentScan) return; | |
this.currentScan = 'deep-scan'; | |
document.getElementById('scan-progress').classList.remove('hidden'); | |
document.getElementById('scan-result').classList.add('hidden'); | |
const statusMessage = document.getElementById('status-message'); | |
statusMessage.classList.remove('text-yellow-400', 'blink'); | |
statusMessage.classList.add('text-green-400'); | |
statusMessage.textContent = 'RUNNING DEEP SCAN'; | |
this.terminalMessage('[+] Initiating deep scan protocol across darknet surfaces...'); | |
let progress = 0; | |
const scanInterval = setInterval(() => { | |
progress += Math.floor(Math.random() * 5) + 1; | |
if (progress >= 100) { | |
progress = 100; | |
clearInterval(scanInterval); | |
this.scanComplete(); | |
this.terminalMessage('[+] Deep scan completed. Analyzing results...'); | |
// Add some findings | |
setTimeout(() => { | |
this.terminalMessage('[!] Detected 3 new data dumps on underground marketplaces'); | |
this.terminalMessage('[!] Found credentials matching 14 corporate email domains'); | |
}, 1500); | |
// Add alert | |
setTimeout(() => { | |
this.addAlert('WARNING', 'Multiple credential dumps detected', '14 corporate domains affected, 3 marketplaces'); | |
}, 3000); | |
} | |
document.getElementById('progress-bar').style.width = `${progress}%`; | |
document.getElementById('progress-percent').textContent = `${progress}%`; | |
}, 150); | |
}, | |
runCredentialTrace: function() { | |
if (this.currentScan) return; | |
this.currentScan = 'credential-trace'; | |
document.getElementById('scan-progress').classList.remove('hidden'); | |
document.getElementById('scan-result').classList.add('hidden'); | |
const statusMessage = document.getElementById('status-message'); | |
statusMessage.classList.remove('text-yellow-400', 'blink'); | |
statusMessage.classList.add('text-green-400'); | |
statusMessage.textContent = 'TRACING CREDENTIALS'; | |
this.terminalMessage('[+] Initializing credential tracing module...'); | |
this.terminalMessage('[+] Checking known breaches and paste sites...'); | |
let progress = 0; | |
const scanInterval = setInterval(() => { | |
progress += Math.floor(Math.random() * 10) + 5; | |
if (progress >= 100) { | |
progress = 100; | |
clearInterval(scanInterval); | |
this.scanComplete(); | |
this.terminalMessage('[+] Credential trace completed. Results available.'); | |
// Add some findings | |
setTimeout(() => { | |
this.terminalMessage('[!] Matched 143 credentials against corporate watchlist'); | |
this.terminalMessage('[!] 12 CEO/C-level credentials found in recent dumps'); | |
}, 1500); | |
// Add alert | |
setTimeout(() => { | |
this.addAlert('CRITICAL', 'Executive credentials exposed', '12 C-level credentials found in recent breaches'); | |
}, 3000); | |
} | |
document.getElementById('progress-bar').style.width = `${progress}%`; | |
document.getElementById('progress-percent').textContent = `${progress}%`; | |
}, 100); | |
}, | |
runChatterAnalysis: function() { | |
if (this.currentScan) return; | |
this.currentScan = 'chatter-analysis'; | |
document.getElementById('scan-progress').classList.remove('hidden'); | |
document.getElementById('scan-result').classList.add('hidden'); | |
const statusMessage = document.getElementById('status-message'); | |
statusMessage.classList.remove('text-yellow-400', 'blink'); | |
statusMessage.classList.add('text-green-400'); | |
statusMessage.textContent = 'ANALYZING CHATTER'; | |
this.terminalMessage('[+] Connecting to darknet chat channels...'); | |
this.terminalMessage('[+] Initializing natural language processing...'); | |
let progress = 0; | |
const scanInterval = setInterval(() => { | |
progress += Math.floor(Math.random() * 15) + 5; | |
if (progress >= 100) { | |
progress = 100; | |
clearInterval(scanInterval); | |
this.scanComplete(); | |
this.terminalMessage('[+] Chatter analysis completed. Trends identified.'); | |
// Add some findings | |
setTimeout(() => { | |
this.terminalMessage('[!] 72% increase in mentions of "supply chain attack"'); | |
this.terminalMessage('[!] New ransomware variant "ShadowKill" discussed in 3 forums'); | |
}, 1500); | |
// Add alert | |
setTimeout(() => { | |
this.addAlert('SUSPICIOUS', 'Emerging ransomware variant detected', 'New "ShadowKill" ransomware discussed across 3 forums'); | |
}, 3000); | |
} | |
document.getElementById('progress-bar').style.width = `${progress}%`; | |
document.getElementById('progress-percent').textContent = `${progress}%`; | |
}, 80); | |
}, | |
runIdentityAlert: function() { | |
if (this.currentScan) return; | |
this.currentScan = 'identity-alert'; | |
document.getElementById('scan-progress').classList.remove('hidden'); | |
document.getElementById('scan-result').classList.add('hidden'); | |
const statusMessage = document.getElementById('status-message'); | |
statusMessage.classList.remove('text-yellow-400', 'blink'); | |
statusMessage.classList.add('text-green-400'); | |
statusMessage.textContent = 'MONITORING IDENTITIES'; | |
this.terminalMessage('[+] Scanning for mentions of protected identities...'); | |
this.terminalMessage('[+] Checking deep/dark web archives...'); | |
let progress = 0; | |
const scanInterval = setInterval(() => { | |
progress += Math.floor(Math.random() * 20) + 10; | |
if (progress >= 100) { | |
progress = 100; | |
clearInterval(scanInterval); | |
this.scanComplete(); | |
this.terminalMessage('[+] Identity monitoring sweep completed.'); | |
// Add some findings | |
setTimeout(() => { | |
this.terminalMessage('[!] 3 protected identities mentioned in hacker forums'); | |
this.terminalMessage('[!] 1 identity potentially compromised - immediate action advised'); | |
}, 1500); | |
// Add alert | |
setTimeout(() => { | |
this.addAlert('CRITICAL', 'Protected identity potentially exposed', 'High-profile identity compromise detected'); | |
}, 3000); | |
} | |
document.getElementById('progress-bar').style.width = `${progress}%`; | |
document.getElementById('progress-percent').textContent = `${progress}%`; | |
}, 50); | |
}, | |
scanComplete: function() { | |
document.getElementById('progress-bar').style.width = '100%'; | |
document.getElementById('progress-percent').textContent = '100%'; | |
setTimeout(() => { | |
document.getElementById('scan-result').classList.remove('hidden'); | |
this.currentScan = null; | |
const statusMessage = document.getElementById('status-message'); | |
statusMessage.classList.remove('text-green-400'); | |
statusMessage.classList.add('text-yellow-400', 'blink'); | |
statusMessage.textContent = 'AWAITING COMMANDS'; | |
}, 1000); | |
}, | |
killswitch: function() { | |
const terminal = document.getElementById('terminal-content'); | |
this.terminalMessage('[!] ACTIVATING EMERGENCY KILLSWITCH PROTOCOL...'); | |
this.terminalMessage('[+] Disconnecting from TOR network...'); | |
this.terminalMessage('[+] Wiping session data...'); | |
this.terminalMessage('[+] Terminating all connections...'); | |
this.terminalMessage('[!] SYSTEM SHUTDOWN INITIATED.'); | |
document.querySelectorAll('button').forEach(btn => { | |
btn.disabled = true; | |
}); | |
document.body.style.backgroundColor = '#000'; | |
setTimeout(() => { | |
document.body.innerHTML = ` | |
<div class="h-screen w-full bg-black flex items-center justify-center"> | |
<div class="text-center"> | |
<h1 class="text-red-500 text-4xl mb-4">SYSTEM TERMINATED</h1> | |
<p class="text-gray-500">All connections terminated. Secure wipe complete.</p> | |
<p class="text-gray-500 mt-8">Refresh page to restart (simulated)</p> | |
</div> | |
</div> | |
`; | |
}, 3000); | |
} | |
}; | |
// Event listeners for quick actions | |
document.getElementById('deep-scan').addEventListener('click', () => quickActions.runDeepScan()); | |
document.getElementById('credential-trace').addEventListener('click', () => quickActions.runCredentialTrace()); | |
document.getElementById('chatter-analysis').addEventListener('click', () => quickActions.runChatterAnalysis()); | |
document.getElementById('identity-alert').addEventListener('click', () => quickActions.runIdentityAlert()); | |
document.getElementById('killswitch').addEventListener('click', () => quickActions.killswitch()); | |
// Terminal control buttons | |
document.getElementById('clear-terminal').addEventListener('click', () => { | |
document.getElementById('terminal-content').innerHTML = '<div class="mb-1"><span class="text-yellow-400">root@shadowwatch:~#</span><span class="code-input"> _</span></div>'; | |
}); | |
document.getElementById('refresh-terminal').addEventListener('click', () => { | |
quickActions.terminalMessage('[+] Refreshing terminal session...'); | |
setTimeout(() => { | |
quickActions.terminalMessage('[+] Terminal refreshed. All connections stable.'); | |
}, 800); | |
}); | |
}); | |
</script> | |
</body> | |
</html> |