module-builder / index.html
S-Dreamer's picture
Add 3 files
2cb178d verified
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Viper C2 Module Builder</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">
<script>
tailwind.config = {
theme: {
extend: {
colors: {
viper: {
primary: '#dc2626',
secondary: '#1e293b',
accent: '#7c3aed',
dark: '#0f172a',
light: '#f8fafc'
}
},
animation: {
'pulse-slow': 'pulse 3s cubic-bezier(0.4, 0, 0.6, 1) infinite',
'spin-slow': 'spin 2s linear infinite'
}
}
}
}
</script>
<style>
@keyframes float {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-5px); }
}
.float-animation {
animation: float 3s ease-in-out infinite;
}
.sidebar {
transition: all 0.3s ease;
box-shadow: 4px 0 6px -1px rgba(0, 0, 0, 0.1);
}
.sidebar.collapsed {
width: 70px;
}
.sidebar.collapsed .sidebar-text,
.sidebar.collapsed .logo-text,
.sidebar.collapsed .quick-actions-title {
display: none;
}
.sidebar.collapsed .nav-item {
justify-content: center;
}
.main-content {
transition: all 0.3s ease;
}
.main-content.expanded {
margin-left: 70px;
}
.json-viewer {
font-family: 'Fira Code', monospace;
white-space: pre;
background-color: #0f172a;
color: #e2e8f0;
padding: 1rem;
border-radius: 0.5rem;
max-height: 300px;
overflow-y: auto;
border: 1px solid #1e293b;
font-size: 0.875rem;
line-height: 1.5;
}
.status-valid {
background-color: #10b981;
}
.status-invalid {
background-color: #ef4444;
}
.status-deployed {
background-color: #3b82f6;
}
.status-pending {
background-color: #f59e0b;
}
.module-card:hover {
transform: translateY(-2px);
box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
}
.notification-badge {
position: absolute;
top: -0.25rem;
right: -0.25rem;
width: 1.25rem;
height: 1.25rem;
border-radius: 50%;
background-color: #dc2626;
color: white;
font-size: 0.75rem;
display: flex;
align-items: center;
justify-content: center;
}
.dropdown-menu {
opacity: 0;
visibility: hidden;
transform: translateY(-10px);
transition: all 0.3s ease;
}
.dropdown-menu.active {
opacity: 1;
visibility: visible;
transform: translateY(0);
}
.nav-item.active {
background-color: #1e293b;
border-left: 3px solid #dc2626;
}
.search-input:focus + .search-icon {
color: #dc2626;
}
.terminal {
background-color: #0f172a;
color: #e2e8f0;
font-family: 'Fira Code', monospace;
border-radius: 0.5rem;
padding: 1rem;
height: 300px;
overflow-y: auto;
}
.terminal-line {
margin-bottom: 0.5rem;
line-height: 1.5;
}
.terminal-prompt {
color: #10b981;
}
.terminal-command {
color: #60a5fa;
}
.terminal-output {
color: #e2e8f0;
}
.terminal-error {
color: #ef4444;
}
.glow-effect {
box-shadow: 0 0 10px rgba(220, 38, 38, 0.5);
}
@media (max-width: 768px) {
.sidebar {
position: absolute;
z-index: 50;
height: 100%;
}
.sidebar.collapsed {
transform: translateX(-100%);
}
.main-content.expanded {
margin-left: 0;
}
}
</style>
</head>
<body class="bg-viper-light">
<div class="flex h-screen overflow-hidden">
<!-- Sidebar -->
<div id="sidebar" class="sidebar bg-viper-dark text-white w-64 flex flex-col z-10">
<div class="p-4 flex items-center space-x-2 border-b border-gray-700">
<div class="relative">
<i class="fas fa-bug text-viper-primary text-2xl float-animation"></i>
<div class="absolute -bottom-1 -right-1 w-3 h-3 bg-green-500 rounded-full border-2 border-viper-dark"></div>
</div>
<span class="logo-text text-xl font-bold bg-gradient-to-r from-viper-primary to-viper-accent bg-clip-text text-transparent">Viper C2</span>
</div>
<div class="flex-1 overflow-y-auto">
<nav class="p-4 space-y-1">
<a href="#" class="nav-item flex items-center space-x-3 p-3 rounded hover:bg-gray-700 active">
<i class="fas fa-tachometer-alt text-gray-300"></i>
<span class="sidebar-text font-medium">Dashboard</span>
</a>
<a href="#" class="nav-item flex items-center space-x-3 p-3 rounded hover:bg-gray-700">
<i class="fas fa-plus-circle text-gray-300"></i>
<span class="sidebar-text font-medium">Create Module</span>
</a>
<a href="#" class="nav-item flex items-center space-x-3 p-3 rounded hover:bg-gray-700">
<i class="fas fa-rocket text-gray-300"></i>
<span class="sidebar-text font-medium">Deployments</span>
<span class="ml-auto bg-viper-primary text-xs px-2 py-1 rounded-full">3</span>
</a>
<a href="#" class="nav-item flex items-center space-x-3 p-3 rounded hover:bg-gray-700">
<i class="fas fa-history text-gray-300"></i>
<span class="sidebar-text font-medium">Execution History</span>
</a>
<a href="#" class="nav-item flex items-center space-x-3 p-3 rounded hover:bg-gray-700">
<i class="fas fa-server text-gray-300"></i>
<span class="sidebar-text font-medium">Listeners</span>
</a>
<a href="#" class="nav-item flex items-center space-x-3 p-3 rounded hover:bg-gray-700">
<i class="fas fa-cog text-gray-300"></i>
<span class="sidebar-text font-medium">Settings</span>
</a>
</nav>
<div class="p-4 border-t border-gray-700">
<h3 class="quick-actions-title text-xs uppercase font-semibold text-gray-400 mb-2">Quick Actions</h3>
<div class="space-y-2">
<button onclick="showCreateModuleModal()" class="w-full flex items-center space-x-3 p-2 rounded hover:bg-gray-700 text-sm transition-all duration-200 hover:translate-x-1">
<i class="fas fa-plus text-green-400"></i>
<span class="sidebar-text">New Module</span>
</button>
<button onclick="showTestModuleModal()" class="w-full flex items-center space-x-3 p-2 rounded hover:bg-gray-700 text-sm transition-all duration-200 hover:translate-x-1">
<i class="fas fa-play text-blue-400"></i>
<span class="sidebar-text">Test Module</span>
</button>
<button onclick="showDeployModal()" class="w-full flex items-center space-x-3 p-2 rounded hover:bg-gray-700 text-sm transition-all duration-200 hover:translate-x-1">
<i class="fas fa-paper-plane text-purple-400"></i>
<span class="sidebar-text">Quick Deploy</span>
</button>
</div>
</div>
</div>
<div class="p-4 border-t border-gray-700 flex items-center justify-between">
<div class="flex items-center space-x-3">
<div class="relative">
<div class="w-8 h-8 rounded-full bg-gradient-to-br from-viper-primary to-viper-accent flex items-center justify-center">
<span class="text-white font-bold text-xs">AD</span>
</div>
<div class="absolute bottom-0 right-0 w-3 h-3 bg-green-500 rounded-full border-2 border-viper-dark"></div>
</div>
<div class="sidebar-text">
<div class="font-medium">Admin User</div>
<div class="text-xs text-gray-400">admin@viper.local</div>
</div>
</div>
<button onclick="toggleSidebar()" class="text-gray-400 hover:text-white transition-transform hover:rotate-180 duration-300">
<i class="fas fa-chevron-left"></i>
</button>
</div>
</div>
<!-- Main Content -->
<div id="main-content" class="main-content flex-1 overflow-auto bg-gray-50">
<!-- Top Navigation -->
<header class="bg-white shadow-sm sticky top-0 z-10">
<div class="px-4 py-3 flex items-center justify-between">
<div class="flex items-center space-x-4">
<button onclick="toggleSidebar()" class="text-gray-600 hover:text-gray-900 md:hidden">
<i class="fas fa-bars"></i>
</button>
<h1 class="text-xl font-semibold text-gray-800 flex items-center">
<span>Module Builder</span>
<span class="ml-2 text-xs bg-viper-primary text-white px-2 py-1 rounded-full">BETA</span>
</h1>
</div>
<div class="flex items-center space-x-4">
<div class="relative hidden md:block">
<input type="text" placeholder="Search modules..." class="search-input pl-10 pr-4 py-2 border rounded-lg focus:outline-none focus:ring-2 focus:ring-viper-primary w-64 transition-all duration-300">
<i class="fas fa-search search-icon absolute left-3 top-3 text-gray-400 transition-colors duration-300"></i>
</div>
<div class="relative">
<button id="notification-btn" class="p-2 text-gray-600 hover:text-gray-900 relative">
<i class="fas fa-bell"></i>
<div class="notification-badge">3</div>
</button>
<div id="notification-dropdown" class="dropdown-menu absolute right-0 mt-2 w-72 bg-white rounded-md shadow-lg py-1 z-20 border border-gray-200">
<div class="px-4 py-2 border-b border-gray-200">
<h3 class="text-sm font-medium text-gray-800">Notifications</h3>
</div>
<div class="max-h-60 overflow-y-auto">
<a href="#" class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 border-b border-gray-100">
<div class="flex items-center">
<div class="flex-shrink-0">
<i class="fas fa-check-circle text-green-500 mr-2"></i>
</div>
<div>
<p class="font-medium">Module validated</p>
<p class="text-xs text-gray-500">New module "persistence" is ready</p>
</div>
</div>
</a>
<a href="#" class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 border-b border-gray-100">
<div class="flex items-center">
<div class="flex-shrink-0">
<i class="fas fa-exclamation-triangle text-yellow-500 mr-2"></i>
</div>
<div>
<p class="font-medium">Deployment warning</p>
<p class="text-xs text-gray-500">Listener "aws-east" has low uptime</p>
</div>
</div>
</a>
<a href="#" class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100">
<div class="flex items-center">
<div class="flex-shrink-0">
<i class="fas fa-server text-blue-500 mr-2"></i>
</div>
<div>
<p class="font-medium">New agent connected</p>
<p class="text-xs text-gray-500">Agent "win10-prod" is now active</p>
</div>
</div>
</a>
</div>
<div class="px-4 py-2 border-t border-gray-200 text-center">
<a href="#" class="text-xs font-medium text-viper-primary hover:text-viper-accent">View all notifications</a>
</div>
</div>
</div>
<div class="relative">
<button id="user-menu-btn" class="flex items-center space-x-2 focus:outline-none">
<div class="w-8 h-8 rounded-full bg-gradient-to-br from-viper-primary to-viper-accent flex items-center justify-center">
<span class="text-white font-bold text-xs">AD</span>
</div>
<span class="hidden md:inline text-sm font-medium text-gray-700">Admin</span>
<i class="fas fa-chevron-down hidden md:inline text-xs text-gray-500"></i>
</button>
<div id="user-menu-dropdown" class="dropdown-menu absolute right-0 mt-2 w-48 bg-white rounded-md shadow-lg py-1 z-20 border border-gray-200">
<a href="#" class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100">Your Profile</a>
<a href="#" class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100">Settings</a>
<div class="border-t border-gray-200"></div>
<a href="#" class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100">Sign out</a>
</div>
</div>
</div>
</div>
</header>
<!-- Content -->
<main class="p-6">
<!-- Dashboard Overview -->
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-6">
<div class="bg-white rounded-lg shadow p-6 flex items-center">
<div class="p-3 rounded-full bg-green-100 text-green-600 mr-4">
<i class="fas fa-check-circle text-xl"></i>
</div>
<div>
<p class="text-sm text-gray-500">Valid Modules</p>
<p class="text-2xl font-bold">24</p>
</div>
</div>
<div class="bg-white rounded-lg shadow p-6 flex items-center">
<div class="p-3 rounded-full bg-blue-100 text-blue-600 mr-4">
<i class="fas fa-rocket text-xl"></i>
</div>
<div>
<p class="text-sm text-gray-500">Active Deployments</p>
<p class="text-2xl font-bold">8</p>
</div>
</div>
<div class="bg-white rounded-lg shadow p-6 flex items-center">
<div class="p-3 rounded-full bg-yellow-100 text-yellow-600 mr-4">
<i class="fas fa-exclamation-triangle text-xl"></i>
</div>
<div>
<p class="text-sm text-gray-500">Pending Tests</p>
<p class="text-2xl font-bold">3</p>
</div>
</div>
<div class="bg-white rounded-lg shadow p-6 flex items-center">
<div class="p-3 rounded-full bg-purple-100 text-purple-600 mr-4">
<i class="fas fa-server text-xl"></i>
</div>
<div>
<p class="text-sm text-gray-500">Active Listeners</p>
<p class="text-2xl font-bold">5</p>
</div>
</div>
</div>
<!-- Recent Modules -->
<div class="bg-white rounded-lg shadow overflow-hidden mb-6">
<div class="px-6 py-4 border-b border-gray-200 flex items-center justify-between">
<h2 class="text-lg font-semibold text-gray-800">Recent Modules</h2>
<button onclick="showCreateModuleModal()" class="text-sm bg-viper-primary text-white px-4 py-2 rounded-md hover:bg-red-700 transition-colors flex items-center">
<i class="fas fa-plus mr-2"></i> New Module
</button>
</div>
<div class="divide-y divide-gray-200">
<div class="grid grid-cols-12 gap-4 p-6 hover:bg-gray-50 transition-colors module-card">
<div class="col-span-12 md:col-span-6 lg:col-span-4 flex items-center">
<div class="p-2 rounded-full bg-blue-100 text-blue-600 mr-4">
<i class="fas fa-network-wired"></i>
</div>
<div>
<p class="font-medium">Network Scanner</p>
<p class="text-sm text-gray-500">v1.2.0</p>
</div>
</div>
<div class="col-span-6 md:col-span-3 lg:col-span-2">
<p class="text-sm text-gray-500">Type</p>
<p class="font-medium">Recon</p>
</div>
<div class="col-span-6 md:col-span-3 lg:col-span-2">
<p class="text-sm text-gray-500">Status</p>
<span class="px-2 py-1 text-xs rounded-full bg-green-100 text-green-800">Validated</span>
</div>
<div class="col-span-6 md:col-span-3 lg:col-span-2">
<p class="text-sm text-gray-500">Last Modified</p>
<p class="font-medium">2 hours ago</p>
</div>
<div class="col-span-6 md:col-span-3 lg:col-span-2 flex items-center justify-end space-x-2">
<button class="p-2 text-gray-400 hover:text-viper-primary rounded-full hover:bg-gray-100">
<i class="fas fa-play"></i>
</button>
<button class="p-2 text-gray-400 hover:text-blue-500 rounded-full hover:bg-gray-100">
<i class="fas fa-edit"></i>
</button>
<button class="p-2 text-gray-400 hover:text-red-500 rounded-full hover:bg-gray-100">
<i class="fas fa-trash"></i>
</button>
</div>
</div>
<div class="grid grid-cols-12 gap-4 p-6 hover:bg-gray-50 transition-colors module-card">
<div class="col-span-12 md:col-span-6 lg:col-span-4 flex items-center">
<div class="p-2 rounded-full bg-purple-100 text-purple-600 mr-4">
<i class="fas fa-user-secret"></i>
</div>
<div>
<p class="font-medium">Credential Dumper</p>
<p class="text-sm text-gray-500">v2.1.3</p>
</div>
</div>
<div class="col-span-6 md:col-span-3 lg:col-span-2">
<p class="text-sm text-gray-500">Type</p>
<p class="font-medium">Post-Exploit</p>
</div>
<div class="col-span-6 md:col-span-3 lg:col-span-2">
<p class="text-sm text-gray-500">Status</p>
<span class="px-2 py-1 text-xs rounded-full bg-blue-100 text-blue-800">Deployed</span>
</div>
<div class="col-span-6 md:col-span-3 lg:col-span-2">
<p class="text-sm text-gray-500">Last Modified</p>
<p class="font-medium">1 day ago</p>
</div>
<div class="col-span-6 md:col-span-3 lg:col-span-2 flex items-center justify-end space-x-2">
<button class="p-2 text-gray-400 hover:text-viper-primary rounded-full hover:bg-gray-100">
<i class="fas fa-play"></i>
</button>
<button class="p-2 text-gray-400 hover:text-blue-500 rounded-full hover:bg-gray-100">
<i class="fas fa-edit"></i>
</button>
<button class="p-2 text-gray-400 hover:text-red-500 rounded-full hover:bg-gray-100">
<i class="fas fa-trash"></i>
</button>
</div>
</div>
<div class="grid grid-cols-12 gap-4 p-6 hover:bg-gray-50 transition-colors module-card">
<div class="col-span-12 md:col-span-6 lg:col-span-4 flex items-center">
<div class="p-2 rounded-full bg-red-100 text-red-600 mr-4">
<i class="fas fa-lock"></i>
</div>
<div>
<p class="font-medium">Persistence</p>
<p class="text-sm text-gray-500">v1.0.0</p>
</div>
</div>
<div class="col-span-6 md:col-span-3 lg:col-span-2">
<p class="text-sm text-gray-500">Type</p>
<p class="font-medium">Privilege</p>
</div>
<div class="col-span-6 md:col-span-3 lg:col-span-2">
<p class="text-sm text-gray-500">Status</p>
<span class="px-2 py-1 text-xs rounded-full bg-yellow-100 text-yellow-800">Testing</span>
</div>
<div class="col-span-6 md:col-span-3 lg:col-span-2">
<p class="text-sm text-gray-500">Last Modified</p>
<p class="font-medium">3 days ago</p>
</div>
<div class="col-span-6 md:col-span-3 lg:col-span-2 flex items-center justify-end space-x-2">
<button class="p-2 text-gray-400 hover:text-viper-primary rounded-full hover:bg-gray-100">
<i class="fas fa-play"></i>
</button>
<button class="p-2 text-gray-400 hover:text-blue-500 rounded-full hover:bg-gray-100">
<i class="fas fa-edit"></i>
</button>
<button class="p-2 text-gray-400 hover:text-red-500 rounded-full hover:bg-gray-100">
<i class="fas fa-trash"></i>
</button>
</div>
</div>
</div>
<div class="px-6 py-3 border-t border-gray-200 text-center">
<a href="#" class="text-sm font-medium text-viper-primary hover:text-viper-accent">View all modules</a>
</div>
</div>
<!-- Recent Activity and Terminal -->
<div class="grid grid-cols-1 lg:grid-cols-2 gap-6">
<!-- Recent Activity -->
<div class="bg-white rounded-lg shadow overflow-hidden">
<div class="px-6 py-4 border-b border-gray-200">
<h2 class="text-lg font-semibold text-gray-800">Recent Activity</h2>
</div>
<div class="divide-y divide-gray-200">
<div class="p-4 flex items-start">
<div class="flex-shrink-0">
<div class="p-2 rounded-full bg-green-100 text-green-600">
<i class="fas fa-check"></i>
</div>
</div>
<div class="ml-3">
<p class="text-sm font-medium text-gray-900">Module validation complete</p>
<p class="text-sm text-gray-500">"Network Scanner" passed all tests</p>
<p class="text-xs text-gray-400 mt-1">10 minutes ago</p>
</div>
</div>
<div class="p-4 flex items-start">
<div class="flex-shrink-0">
<div class="p-2 rounded-full bg-blue-100 text-blue-600">
<i class="fas fa-rocket"></i>
</div>
</div>
<div class="ml-3">
<p class="text-sm font-medium text-gray-900">New deployment</p>
<p class="text-sm text-gray-500">"Credential Dumper" deployed to 3 agents</p>
<p class="text-xs text-gray-400 mt-1">2 hours ago</p>
</div>
</div>
<div class="p-4 flex items-start">
<div class="flex-shrink-0">
<div class="p-2 rounded-full bg-yellow-100 text-yellow-600">
<i class="fas fa-exclamation-triangle"></i>
</div>
</div>
<div class="ml-3">
<p class="text-sm font-medium text-gray-900">Test warning</p>
<p class="text-sm text-gray-500">"Persistence" module has compatibility issues</p>
<p class="text-xs text-gray-400 mt-1">1 day ago</p>
</div>
</div>
<div class="p-4 flex items-start">
<div class="flex-shrink-0">
<div class="p-2 rounded-full bg-purple-100 text-purple-600">
<i class="fas fa-server"></i>
</div>
</div>
<div class="ml-3">
<p class="text-sm font-medium text-gray-900">New agent connected</p>
<p class="text-sm text-gray-500">Agent "win10-dev" from 192.168.1.45</p>
<p class="text-xs text-gray-400 mt-1">2 days ago</p>
</div>
</div>
</div>
</div>
<!-- Terminal Output -->
<div class="bg-white rounded-lg shadow overflow-hidden">
<div class="px-6 py-4 border-b border-gray-200 flex items-center justify-between">
<h2 class="text-lg font-semibold text-gray-800">Terminal</h2>
<div class="flex space-x-2">
<button class="p-1 text-gray-400 hover:text-green-500">
<i class="fas fa-play"></i>
</button>
<button class="p-1 text-gray-400 hover:text-red-500">
<i class="fas fa-stop"></i>
</button>
<button class="p-1 text-gray-400 hover:text-blue-500">
<i class="fas fa-redo"></i>
</button>
</div>
</div>
<div class="terminal">
<div class="terminal-line">
<span class="terminal-prompt">$</span> <span class="terminal-command">viper --validate persistence</span>
</div>
<div class="terminal-line terminal-output">
Starting validation for module: persistence
</div>
<div class="terminal-line terminal-output">
[✓] Syntax check passed
</div>
<div class="terminal-line terminal-output">
[✓] Dependencies verified
</div>
<div class="terminal-line terminal-output">
[✓] Security checks completed
</div>
<div class="terminal-line terminal-output">
[✓] Test environment initialized
</div>
<div class="terminal-line terminal-output">
Running functional tests...
</div>
<div class="terminal-line terminal-output">
[✓] Test 1: Registry key creation
</div>
<div class="terminal-line terminal-output">
[✓] Test 2: Scheduled task setup
</div>
<div class="terminal-line terminal-output">
[!] Warning: Test 3: Service creation - requires admin
</div>
<div class="terminal-line terminal-output">
Validation complete: 2/3 tests passed
</div>
<div class="terminal-line">
<span class="terminal-prompt">$</span> <span class="terminal-command">_</span>
</div>
</div>
</div>
</div>
</main>
</div>
</div>
<!-- Create Module Modal -->
<div id="create-module-modal" class="fixed inset-0 z-50 hidden overflow-y-auto">
<div class="flex items-center justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0">
<div class="fixed inset-0 transition-opacity" aria-hidden="true">
<div class="absolute inset-0 bg-gray-500 opacity-75"></div>
</div>
<span class="hidden sm:inline-block sm:align-middle sm:h-screen" aria-hidden="true">&#8203;</span>
<div class="inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-2xl sm:w-full">
<div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4">
<div class="sm:flex sm:items-start">
<div class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-viper-primary sm:mx-0 sm:h-10 sm:w-10">
<i class="fas fa-plus text-white"></i>
</div>
<div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left">
<h3 class="text-lg leading-6 font-medium text-gray-900">Create New Module</h3>
<div class="mt-2">
<p class="text-sm text-gray-500">Fill in the details below to create a new C2 module.</p>
</div>
</div>
</div>
<div class="mt-6 grid grid-cols-1 gap-y-6 gap-x-4 sm:grid-cols-6">
<div class="sm:col-span-3">
<label for="module-name" class="block text-sm font-medium text-gray-700">Module Name</label>
<input type="text" name="module-name" id="module-name" class="mt-1 focus:ring-viper-primary focus:border-viper-primary block w-full shadow-sm sm:text-sm border-gray-300 rounded-md">
</div>
<div class="sm:col-span-3">
<label for="module-type" class="block text-sm font-medium text-gray-700">Module Type</label>
<select id="module-type" name="module-type" class="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-viper-primary focus:border-viper-primary sm:text-sm">
<option>Reconnaissance</option>
<option>Privilege Escalation</option>
<option>Lateral Movement</option>
<option>Post-Exploitation</option>
<option>Persistence</option>
<option>Evasion</option>
</select>
</div>
<div class="sm:col-span-6">
<label for="module-description" class="block text-sm font-medium text-gray-700">Description</label>
<textarea id="module-description" name="module-description" rows="3" class="mt-1 shadow-sm focus:ring-viper-primary focus:border-viper-primary block w-full sm:text-sm border border-gray-300 rounded-md"></textarea>
</div>
<div class="sm:col-span-6">
<label for="module-code" class="block text-sm font-medium text-gray-700">Module Code</label>
<div class="mt-1">
<textarea id="module-code" name="module-code" rows="10" class="shadow-sm focus:ring-viper-primary focus:border-viper-primary block w-full sm:text-sm border border-gray-300 rounded-md font-mono text-sm"></textarea>
</div>
</div>
</div>
</div>
<div class="bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse">
<button type="button" class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-viper-primary text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-viper-primary sm:ml-3 sm:w-auto sm:text-sm">
Create Module
</button>
<button type="button" onclick="hideCreateModuleModal()" class="mt-3 w-full inline-flex justify-center rounded-md border border-gray-300 shadow-sm px-4 py-2 bg-white text-base font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-viper-primary sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm">
Cancel
</button>
</div>
</div>
</div>
</div>
<!-- Test Module Modal -->
<div id="test-module-modal" class="fixed inset-0 z-50 hidden overflow-y-auto">
<div class="flex items-center justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0">
<div class="fixed inset-0 transition-opacity" aria-hidden="true">
<div class="absolute inset-0 bg-gray-500 opacity-75"></div>
</div>
<span class="hidden sm:inline-block sm:align-middle sm:h-screen" aria-hidden="true">&#8203;</span>
<div class="inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-2xl sm:w-full">
<div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4">
<div class="sm:flex sm:items-start">
<div class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-500 sm:mx-0 sm:h-10 sm:w-10">
<i class="fas fa-play text-white"></i>
</div>
<div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left">
<h3 class="text-lg leading-6 font-medium text-gray-900">Test Module</h3>
<div class="mt-2">
<p class="text-sm text-gray-500">Select a module to test in the sandbox environment.</p>
</div>
</div>
</div>
<div class="mt-6 grid grid-cols-1 gap-y-6 gap-x-4 sm:grid-cols-6">
<div class="sm:col-span-6">
<label for="test-module-select" class="block text-sm font-medium text-gray-700">Module to Test</label>
<select id="test-module-select" name="test-module-select" class="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 sm:text-sm">
<option>Network Scanner</option>
<option>Credential Dumper</option>
<option>Persistence</option>
<option>Keylogger</option>
<option>Process Injector</option>
</select>
</div>
<div class="sm:col-span-6">
<label for="test-environment" class="block text-sm font-medium text-gray-700">Test Environment</label>
<select id="test-environment" name="test-environment" class="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 sm:text-sm">
<option>Windows 10 (x64)</option>
<option>Windows Server 2019</option>
<option>Ubuntu 20.04</option>
<option>Custom Sandbox</option>
</select>
</div>
<div class="sm:col-span-6">
<label class="block text-sm font-medium text-gray-700">Test Options</label>
<div class="mt-2 space-y-2">
<div class="flex items-center">
<input id="full-test" name="test-options" type="radio" class="focus:ring-blue-500 h-4 w-4 text-blue-600 border-gray-300" checked>
<label for="full-test" class="ml-3 block text-sm font-medium text-gray-700">Full Test (All checks)</label>
</div>
<div class="flex items-center">
<input id="quick-test" name="test-options" type="radio" class="focus:ring-blue-500 h-4 w-4 text-blue-600 border-gray-300">
<label for="quick-test" class="ml-3 block text-sm font-medium text-gray-700">Quick Test (Basic validation only)</label>
</div>
<div class="flex items-center">
<input id="custom-test" name="test-options" type="radio" class="focus:ring-blue-500 h-4 w-4 text-blue-600 border-gray-300">
<label for="custom-test" class="ml-3 block text-sm font-medium text-gray-700">Custom Test</label>
</div>
</div>
</div>
</div>
</div>
<div class="bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse">
<button type="button" class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-500 text-base font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:ml-3 sm:w-auto sm:text-sm">
Run Test
</button>
<button type="button" onclick="hideTestModuleModal()" class="mt-3 w-full inline-flex justify-center rounded-md border border-gray-300 shadow-sm px-4 py-2 bg-white text-base font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm">
Cancel
</button>
</div>
</div>
</div>
</div>
<!-- Deploy Module Modal -->
<div id="deploy-modal" class="fixed inset-0 z-50 hidden overflow-y-auto">
<div class="flex items-center justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0">
<div class="fixed inset-0 transition-opacity" aria-hidden="true">
<div class="absolute inset-0 bg-gray-500 opacity-75"></div>
</div>
<span class="hidden sm:inline-block sm:align-middle sm:h-screen" aria-hidden="true">&#8203;</span>
<div class="inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-2xl sm:w-full">
<div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4">
<div class="sm:flex sm:items-start">
<div class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-purple-500 sm:mx-0 sm:h-10 sm:w-10">
<i class="fas fa-paper-plane text-white"></i>
</div>
<div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left">
<h3 class="text-lg leading-6 font-medium text-gray-900">Deploy Module</h3>
<div class="mt-2">
<p class="text-sm text-gray-500">Select a module and target agents for deployment.</p>
</div>
</div>
</div>
<div class="mt-6 grid grid-cols-1 gap-y-6 gap-x-4 sm:grid-cols-6">
<div class="sm:col-span-6">
<label for="deploy-module-select" class="block text-sm font-medium text-gray-700">Module to Deploy</label>
<select id="deploy-module-select" name="deploy-module-select" class="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-purple-500 focus:border-purple-500 sm:text-sm">
<option>Network Scanner</option>
<option>Credential Dumper</option>
<option>Persistence</option>
<option>Keylogger</option>
<option>Process Injector</option>
</select>
</div>
<div class="sm:col-span-6">
<label class="block text-sm font-medium text-gray-700">Target Agents</label>
<div class="mt-2 space-y-2 max-h-40 overflow-y-auto border border-gray-200 rounded-md p-2">
<div class="flex items-center">
<input id="agent1" name="agents" type="checkbox" class="focus:ring-purple-500 h-4 w-4 text-purple-600 border-gray-300 rounded">
<label for="agent1" class="ml-3 block text-sm font-medium text-gray-700">win10-prod (192.168.1.10)</label>
</div>
<div class="flex items-center">
<input id="agent2" name="agents" type="checkbox" class="focus:ring-purple-500 h-4 w-4 text-purple-600 border-gray-300 rounded">
<label for="agent2" class="ml-3 block text-sm font-medium text-gray-700">win10-dev (192.168.1.45)</label>
</div>
<div class="flex items-center">
<input id="agent3" name="agents" type="checkbox" class="focus:ring-purple-500 h-4 w-4 text-purple-600 border-gray-300 rounded">
<label for="agent3" class="ml-3 block text-sm font-medium text-gray-700">ws2019-dc (192.168.1.100)</label>
</div>
<div class="flex items-center">
<input id="agent4" name="agents" type="checkbox" class="focus:ring-purple-500 h-4 w-4 text-purple-600 border-gray-300 rounded">
<label for="agent4" class="ml-3 block text-sm font-medium text-gray-700">ubuntu-web (192.168.1.150)</label>
</div>
</div>
</div>
<div class="sm:col-span-6">
<label for="deploy-options" class="block text-sm font-medium text-gray-700">Deployment Options</label>
<select id="deploy-options" name="deploy-options" class="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-purple-500 focus:border-purple-500 sm:text-sm">
<option>Standard Deployment</option>
<option>Stealth Mode</option>
<option>High Priority</option>
<option>Delayed Execution</option>
</select>
</div>
<div class="sm:col-span-6">
<label for="deploy-params" class="block text-sm font-medium text-gray-700">Parameters (JSON)</label>
<div class="mt-1">
<textarea id="deploy-params" name="deploy-params" rows="4" class="shadow-sm focus:ring-purple-500 focus:border-purple-500 block w-full sm:text-sm border border-gray-300 rounded-md font-mono text-sm"></textarea>
</div>
</div>
</div>
</div>
<div class="bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse">
<button type="button" class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-purple-500 text-base font-medium text-white hover:bg-purple-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-purple-500 sm:ml-3 sm:w-auto sm:text-sm">
Deploy Now
</button>
<button type="button" onclick="hideDeployModal()" class="mt-3 w-full inline-flex justify-center rounded-md border border-gray-300 shadow-sm px-4 py-2 bg-white text-base font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-purple-500 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm">
Cancel
</button>
</div>
</div>
</div>
</div>
<script>
// Toggle sidebar
function toggleSidebar() {
const sidebar = document.getElementById('sidebar');
const mainContent = document.getElementById('main-content');
sidebar.classList.toggle('collapsed');
mainContent.classList.toggle('expanded');
// Change the chevron icon direction
const toggleBtn = sidebar.querySelector('button');
const icon = toggleBtn.querySelector('i');
if (sidebar.classList.contains('collapsed')) {
icon.classList.remove('fa-chevron-left');
icon.classList.add('fa-chevron-right');
} else {
icon.classList.remove('fa-chevron-right');
icon.classList.add('fa-chevron-left');
}
}
// Show modals
function showCreateModuleModal() {
document.getElementById('create-module-modal').classList.remove('hidden');
}
function showTestModuleModal() {
document.getElementById('test-module-modal').classList.remove('hidden');
}
function showDeployModal() {
document.getElementById('deploy-modal').classList.remove('hidden');
}
// Hide modals
function hideCreateModuleModal() {
document.getElementById('create-module-modal').classList.add('hidden');
}
function hideTestModuleModal() {
document.getElementById('test-module-modal').classList.add('hidden');
}
function hideDeployModal() {
document.getElementById('deploy-modal').classList.add('hidden');
}
// Close modals when clicking outside
window.addEventListener('click', function(event) {
if (event.target.classList.contains('fixed')) {
event.target.classList.add('hidden');
}
});
// Dropdown menus
document.addEventListener('DOMContentLoaded', function() {
// Notification dropdown
const notificationBtn = document.getElementById('notification-btn');
const notificationDropdown = document.getElementById('notification-dropdown');
notificationBtn.addEventListener('click', function(e) {
e.stopPropagation();
notificationDropdown.classList.toggle('active');
userMenuDropdown.classList.remove('active');
});
// User menu dropdown
const userMenuBtn = document.getElementById('user-menu-btn');
const userMenuDropdown = document.getElementById('user-menu-dropdown');
userMenuBtn.addEventListener('click', function(e) {
e.stopPropagation();
userMenuDropdown.classList.toggle('active');
notificationDropdown.classList.remove('active');
});
// Close dropdowns when clicking outside
document.addEventListener('click', function() {
notificationDropdown.classList.remove('active');
userMenuDropdown.classList.remove('active');
});
// Prevent dropdown from closing when clicking inside
notificationDropdown.addEventListener('click', function(e) {
e.stopPropagation();
});
userMenuDropdown.addEventListener('click', function(e) {
e.stopPropagation();
});
});
// Terminal animation
function animateTerminal() {
const terminal = document.querySelector('.terminal');
if (!terminal) return;
const lines = terminal.querySelectorAll('.terminal-line');
let delay = 0;
lines.forEach(line => {
setTimeout(() => {
line.style.opacity = '1';
}, delay);
delay += 100;
});
}
// Initialize terminal animation
setTimeout(animateTerminal, 500);
// Module card hover effect
const moduleCards = document.querySelectorAll('.module-card');
moduleCards.forEach(card => {
card.style.transition = 'all 0.3s ease';
});
// Mobile menu toggle
function toggleMobileMenu() {
const sidebar = document.getElementById('sidebar');
sidebar.classList.toggle('hidden');
}
</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=S-Dreamer/module-builder" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
</html>