#!/bin/bash

# Script : detect_perfctl.sh
# Description : Détecte la présence du malware Perfctl sur le système.

echo "--------------------------------------------"
echo "   Début de l'analyse pour le malware Perfctl"
echo "--------------------------------------------"
echo

# Fonction pour vérifier la présence de processus suspects
check_processes() {
    echo "1. Vérification des processus suspects..."
    processes=$(ps aux | grep -E 'perfcc|perfclean|perfctl|\.atmp' | grep -v grep)
    if [ -n "$processes" ]; then
        echo "   [!] Processus suspects trouvés :"
        echo "$processes"
    else
        echo "   Aucun processus suspect détecté."
    fi
}

# Fonction pour vérifier la présence de fichiers et répertoires malveillants
check_files() {
    echo "2. Vérification des fichiers et répertoires suspects..."
    files=(
        "/root/.config/cron/perfcc"
        "/etc/cron.d/perfclean"
        "/etc/cron.daily/perfclean"
        "/etc/cron.hourly/perfclean"
        "/etc/cron.weekly/perfclean"
        "/etc/cron.monthly/perfclean"
        "/usr/bin/.atmp"
        "/usr/bin/.atmp/tmp"
    )
    found_files=()
    for file in "${files[@]}"; do
        if [ -e "$file" ]; then
            found_files+=("$file")
        fi
    done

    if [ ${#found_files[@]} -gt 0 ]; then
        echo "   [!] Fichiers ou répertoires suspects trouvés :"
        for f in "${found_files[@]}"; do
            echo "      - $f"
        done
    else
        echo "   Aucun fichier ou répertoire suspect détecté."
    fi
}

# Fonction pour vérifier les tâches cron malveillantes
check_cron() {
    echo "3. Vérification des tâches cron suspectes..."
    cron_jobs=$(crontab -l 2>/dev/null | grep -E 'perfcc|perfclean|perfctl')
    if [ -n "$cron_jobs" ]; then
        echo "   [!] Tâches cron suspectes dans le crontab de l'utilisateur courant :"
        echo "$cron_jobs"
    else
        echo "   Aucune tâche cron suspecte dans le crontab de l'utilisateur courant."
    fi

    echo "   Vérification des tâches cron système..."
    cron_dirs=("/etc/crontab" "/etc/cron.d/" "/etc/cron.daily/" "/etc/cron.hourly/" "/etc/cron.weekly/" "/etc/cron.monthly/")
    for dir in "${cron_dirs[@]}"; do
        if [ -d "$dir" ]; then
            cron_files=$(grep -rlE 'perfcc|perfclean|perfctl' "$dir")
            if [ -n "$cron_files" ]; then
                echo "   [!] Tâches cron suspectes trouvées dans $dir :"
                echo "$cron_files"
            fi
        elif [ -f "$dir" ]; then
            cron_file=$(grep -lE 'perfcc|perfclean|perfctl' "$dir")
            if [ -n "$cron_file" ]; then
                echo "   [!] Tâche cron suspecte trouvée dans $dir"
            fi
        fi
    done
}

# Fonction pour vérifier les services système suspects
check_services() {
    echo "4. Vérification des services système suspects..."
    services=$(systemctl list-unit-files | grep -E 'perfcc|perfclean|perfctl')
    if [ -n "$services" ]; then
        echo "   [!] Services suspects trouvés :"
        echo "$services"
    else
        echo "   Aucun service suspect détecté."
    fi
}

# Fonction pour vérifier les utilisateurs suspects
check_users() {
    echo "5. Vérification des comptes utilisateurs suspects..."
    users=$(getent passwd | grep -E 'perfcc|perfclean|perfctl')
    if [ -n "$users" ]; then
        echo "   [!] Comptes utilisateurs suspects trouvés :"
        echo "$users"
    else
        echo "   Aucun compte utilisateur suspect détecté."
    fi
}

# Exécution des fonctions
check_processes
echo
check_files
echo
check_cron
echo
check_services
echo
check_users
echo
echo "--------------------------------------------"
echo "          Analyse terminée."
echo "--------------------------------------------"
