Volver a actualizaciones
ActualizadaAug 20, 2026

ProtOSINT — Actualizado!

ProtOSINT es un script de Python que te ayuda a investigar cuentas de Proton Mail.

Compartir

ProtOSINT

ProtOSINT es un script de Python que te ayuda a investigar cuentas de Proton Mail.

protosint (1)

Versión

Esta es la versión 2 de ProtOSINT. La primera versión ha estado disponible durante unos años, pero la API de Proton cambió y las comprobaciones antiguas dejaron de funcionar, por lo que esta es una reescritura que devuelve la herramienta a la vida. Muchas gracias a NeutrOSINT por mantener este tipo de investigación activa mientras tanto.

Descripción

Esta herramienta está diseñada para trabajo de OSINT en Proton Mail (solo uso educativo y autorizado). Le proporcionas una dirección de correo electrónico, un nombre de usuario o un dominio, y te indica lo que puede encontrar: si la dirección realmente existe, cuándo se creó la clave de cifrado de la cuenta, qué algoritmo utiliza y si un dominio personalizado está alojado en Proton.

Tiene cuatro módulos:

  • [1] Verificar un correo de Proton: si existe, y cuál es la fecha y tipo de creación de la clave.
  • [2] Enumerar un nombre de usuario en todos los dominios de Proton (protonmail.com, protonmail.ch, pm.me, proton.me).
  • [3] Verificar si un dominio utiliza Proton Mail (a través de sus registros MX, cotejados con el servidor de claves).
  • [4] Verificar por lotes una lista de direcciones a través de una sesión real de Proton iniciada.

Cómo funciona (y por qué)

Proton dificulta deliberadamente la enumeración de cuentas, por lo que una comprobación ingenua te mentirá. ProtOSINT lo resuelve combinando tres fuentes y confiando en la adecuada para cada caso.

El servidor de claves miente sobre direcciones inexistentes. El servidor de claves públicas de Proton (pks/lookup) devuelve una clave falsa "señuelo", con una fecha de creación inventada, para cualquier dirección en un dominio de Proton, exista o no. Por lo tanto, una "clave válida + fecha bonita" no es prueba de que la dirección exista. El servidor de claves sigue siendo útil, pero solo para leer la fecha real de la clave de una dirección que ya has confirmado que existe.

La API de cuentas es mejor, pero no perfecta. La API de cuentas de Proton (/users/available) te indica si un nombre de usuario está libre. Acierta la mayoría de las veces, pero comprueba el nombre de usuario, no la dirección específica, por lo que puede fallar en casos límite: [email protected] puede parecer "ocupado" aunque esa dirección .ch nunca se haya creado.

La única comprobación completamente fiable es la ventana de redacción de Proton. Cuando escribes una dirección en el campo "Para", Proton la valida y la marca en rojo si el buzón no existe. ProtOSINT puede automatizar eso con Selenium: inicia sesión en tu cuenta de Proton, abre un nuevo mensaje, escribe la dirección y lee si Proton la acepta o la rechaza. Esa es la respuesta autorizada, y es lo que los módulos 1, 2 y 4 usan cuando Selenium está activado (que lo está por defecto).

Los dominios personalizados se verifican mediante DNS. Para un dominio como example.com, la verdadera pregunta es hacia dónde se enruta su correo. Si el registro MX apunta a Proton (mail.protonmail.ch / mailsec.protonmail.ch), el dominio está en Proton Mail. El módulo 3 lee los registros MX y los coteja con el servidor de claves.

Requisitos

  • Python 3 (3.7 o más reciente)
  • Los paquetes de Python en requirements.txt (requests, selenium)
  • Un navegador (Chrome/Chromium o Firefox) para la comprobación con Selenium

Instalación

Clona el repositorio e instala las dependencias de Python:

git clone https://github.com/pixelbubble/ProtOSINT.git
cd ProtOSINT
python3 -m venv venv
source venv/bin/activate          # Windows: venv\Scripts\activate
pip install -r requirements.txt

También necesitas un navegador instalado para la comprobación con Selenium. Selenium descarga el controlador correspondiente por sí mismo, por lo que no necesitas instalar un chromedriver/geckodriver por separado.

Debian / Ubuntu / Kali:

wget -O /tmp/chrome.deb https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo apt update
sudo apt install -y /tmp/chrome.deb
# alternativas: sudo apt install -y chromium   (o: firefox-esr)

macOS (Homebrew):

brew install --cask google-chrome  # o: brew install --cask firefox

Windows: instala Chrome o Firefox normalmente desde su sitio web.

¿Ejecutando como root (común en Kali)? Chrome necesita el flag --no-sandbox o se bloquea al iniciar. ProtOSINT ya lo configura por ti, así que no tienes que hacer nada.

Configuración

La primera vez que ejecutas el script, crea un archivo config.json a su lado:

{
  "proton": {
    "username": "",
    "password": ""
  },
  "settings": {
    "use_selenium": true,
    "headless": true
  }
}
  • use_selenium (true/false) utiliza la comprobación de redacción de Selenium para los módulos 1, 2 y 4 (el método fiable). Configúralo en false para recurrir a la API de cuentas más rápida.
  • headless (true/false) ejecuta el navegador en segundo plano para que no aparezca ninguna ventana. Solo configúralo en true en una cuenta sin 2FA o CAPTCHA, ya que no puedes resolverlos cuando la ventana está oculta. Configúralo en false si necesitas ver el navegador.
  • username / password son tus credenciales de Proton. Puedes rellenarlos o dejarlos vacíos y el script te los pedirá al iniciar. Dejar la contraseña vacía es más seguro: nunca se escribe en disco. Si pones credenciales en el archivo, no lo confirmes (ya está en .gitignore).

Si cierras el navegador a mitad de sesión, la siguiente comprobación que lo necesite lo reabrirá e iniciará sesión automáticamente.

Uso

python3 protosint.py

Elige un módulo del menú y sigue las indicaciones. q sale (y cierra el navegador si estaba abierto).

Consejos para la investigación de Proton Mail

Proton Mail no distingue mayúsculas de minúsculas

El nombre de la cuenta no distingue mayúsculas de minúsculas, y Proton trata ., _ y - como transparentes. Cualquier cosa después de un + también se ignora. Por lo tanto, todas estas son la misma cuenta que [email protected]:

Todas comparten la misma clave y marca de tiempo.

La marca de tiempo es la fecha de la clave, no siempre la fecha de la cuenta

La fecha que muestra ProtOSINT es cuando se creó la clave PGP principal de la cuenta, que no siempre es la misma que cuando se creó la cuenta.

Ejemplo 1: el objetivo nunca tocó sus claves. Aquí la fecha de la clave es la fecha real de creación de la cuenta.

  • 2021-01-12: se crea la cuenta [email protected]
  • 2021-01-15: ProtOSINT informa 2021-01-12

Ejemplo 2: el objetivo regeneró su clave. Ahora la fecha refleja la clave más reciente, no la cuenta.

  • 2021-01-12: se crea la cuenta [email protected]
  • 2021-01-13: el objetivo genera una nueva clave en Configuración → Claves de cifrado
  • 2021-01-15: ProtOSINT informa 2021-01-13, no 2021-01-12

Claves de cifrado

ProtOSINT muestra qué tipo de clave utiliza la cuenta. Lo que el servidor de claves informa para la clave principal es uno de:

  • Curve25519 - ECC moderno (una clave de firma Ed25519); esta es la opción predeterminada en las cuentas más nuevas y la más rápida y segura
  • RSA 2048 - la opción predeterminada antigua en cuentas creadas antes de 2021
  • RSA 4096 - más fuerte pero más lenta, usualmente vista cuando alguien importó una clave para compatibilidad heredada

También puedes ver X25519, Ed25519 o RSA 3072 en algunas claves; todas se leen directamente del ID del algoritmo OpenPGP de la clave.

Dominios personalizados

Un plan de pago de Proton te permite adjuntar tu propio dominio. Si [email protected] se resuelve a Proton (módulo 1 o 3), el objetivo está en un plan de pago de Proton. El módulo 3 lo confirma a partir de los registros MX del dominio, que es la señal más fiable.

Límites de velocidad

Proton limita la velocidad tanto del servidor de claves (error 2028) como de la API de cuentas (HTTP 429). Los límites exactos no están documentados y parecen moverse, así que si te bloquean, espera un rato o ejecuta de nuevo desde una IP diferente. El método Selenium utiliza tu sesión normal iniciada, por lo que no se ve afectado por estos límites.

Contribuir

Siéntete libre de clonar el proyecto. Para algo importante, abre primero un issue para discutirlo.

El módulo Selenium lee la aplicación web de Proton, por lo que si Proton cambia su página, los selectores en selenium_login() y selenium_check_emails() pueden necesitar una pequeña actualización. Ese es el primer lugar donde mirar si la comprobación del navegador deja de funcionar.

Licencia

MIT

Categorías