IvanCastl

API Proton Mail

Jan 21st, 2026
1,338
0
Never
13
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.86 KB | Cybersecurity | 0 0
  1. #!/usr/bin/env python3
  2. import requests
  3. from datetime import datetime
  4. import re
  5.  
  6. def check_proton_account(email):
  7.     """
  8.    Consulta información de una cuenta ProtonMail usando la API pública
  9.    """
  10.    
  11.     # Endpoint de búsqueda
  12.     search_url = f'https://api.protonmail.ch/pks/lookup?op=index&search={email}'
  13.    
  14.     try:
  15.         # 1. Verificar si la cuenta existe
  16.         print(f"🔍 Consultando información para: {email}")
  17.         print("=" * 50)
  18.        
  19.         response = requests.get(search_url, timeout=10)
  20.        
  21.         if response.status_code != 200:
  22.             print(f"❌ Error en la API: {response.status_code}")
  23.             return
  24.        
  25.         body = response.text
  26.        
  27.         # 2. Analizar respuesta
  28.         if "info:1:0" in body:
  29.             print(f"📭 {email} - NO existe en ProtonMail")
  30.             return
  31.         elif "info:1:1" in body:
  32.             print(f"✅ {email} - SÍ existe en ProtonMail")
  33.         else:
  34.             print("⚠️  Respuesta inesperada de la API")
  35.             print(f"Respuesta completa:\n{body}")
  36.             return
  37.        
  38.         # 3. Extraer información detallada
  39.         print("\n📊 Información detallada:")
  40.         print("-" * 30)
  41.        
  42.         # Patrones de búsqueda para diferentes tipos de cifrado
  43.         patterns = {
  44.             "RSA 2048-bit": r"2048:(.*?)::",
  45.             "RSA 4096-bit": r"4096:(.*?)::",
  46.             "X25519": r"22::(.*?)::",
  47.             "Ed25519": r"22:(.*?)::"
  48.         }
  49.        
  50.         found = False
  51.         for algo, pattern in patterns.items():
  52.             match = re.search(pattern, body)
  53.             if match:
  54.                 timestamp = int(match.group(1))
  55.                 creation_date = datetime.fromtimestamp(timestamp)
  56.                 print(f"• Algoritmo: {algo}")
  57.                 print(f"• Fecha creación: {creation_date}")
  58.                 print(f"• Timestamp Unix: {timestamp}")
  59.                 found = True
  60.                 break
  61.        
  62.         if not found:
  63.             print("• Algoritmo: No identificado")
  64.             print("• Fecha creación: No disponible")
  65.            
  66.         # 4. Buscar User IDs adicionales
  67.         uid_pattern = r"uid:(.*?):(\d+):"
  68.         uid_matches = re.findall(uid_pattern, body)
  69.        
  70.         if uid_matches:
  71.             print("\n👤 Identificadores asociados:")
  72.             for uid, uid_timestamp in uid_matches:
  73.                 uid_date = datetime.fromtimestamp(int(uid_timestamp))
  74.                 print(f"  • {uid} (desde {uid_date})")
  75.        
  76.         # 5. Extraer fingerprint/ID de clave
  77.         pub_pattern = r"pub:([A-F0-9]+):"
  78.         pub_match = re.search(pub_pattern, body)
  79.         if pub_match:
  80.             key_id = pub_match.group(1)
  81.             print(f"\n🔑 ID de clave pública: {key_id}")
  82.             # Mostrar formato corto (últimos 8 caracteres)
  83.             print(f"🔑 Fingerprint corto: {key_id[-8:].upper()}")
  84.        
  85.         # 6. Opción para descargar clave pública
  86.         print("\n" + "=" * 50)
  87.         download_choice = input("¿Descargar clave pública completa? (s/n): ")
  88.        
  89.         if download_choice.lower() == 's':
  90.             download_public_key(email)
  91.            
  92.     except requests.exceptions.Timeout:
  93.         print("⏰ Timeout: La API no respondió en 10 segundos")
  94.     except requests.exceptions.ConnectionError:
  95.         print("🔌 Error de conexión: No se pudo conectar a la API")
  96.     except Exception as e:
  97.         print(f"⚠️  Error inesperado: {e}")
  98.  
  99. def download_public_key(email):
  100.     """
  101.    Descarga y muestra la clave pública PGP completa
  102.    """
  103.     print(f"\n📥 Descargando clave pública para {email}...")
  104.    
  105.     download_url = f'https://api.protonmail.ch/pks/lookup?op=get&search={email}'
  106.    
  107.     try:
  108.         response = requests.get(download_url, timeout=10)
  109.        
  110.         if response.status_code == 200:
  111.             print("=" * 60)
  112.             print("🔐 CLAVE PÚBLICA PGP:")
  113.             print("=" * 60)
  114.             print(response.text)
  115.             print("=" * 60)
  116.            
  117.             # Guardar en archivo
  118.             filename = f"{email.replace('@', '_')}_public_key.asc"
  119.             with open(filename, 'w') as f:
  120.                 f.write(response.text)
  121.             print(f"💾 Clave guardada en: {filename}")
  122.         else:
  123.             print(f"❌ Error al descargar clave: {response.status_code}")
  124.            
  125.     except Exception as e:
  126.         print(f"⚠️  Error al descargar: {e}")
  127.  
  128. def check_account_quick(email):
  129.     """
  130.    Versión rápida para verificar solo existencia
  131.    """
  132.     try:
  133.         url = f'https://api.protonmail.ch/pks/lookup?op=index&search={email}'
  134.         response = requests.get(url, timeout=5)
  135.        
  136.         if "info:1:1" in response.text:
  137.             return True, "Existe"
  138.         elif "info:1:0" in response.text:
  139.             return False, "No existe"
  140.         else:
  141.             return None, "Respuesta desconocida"
  142.     except:
  143.         return None, "Error de conexión"
  144.  
  145. # Función principal
  146. def main():
  147.     print("🔎 PROTONMAIL ACCOUNT CHECKER")
  148.     print("=" * 40)
  149.    
  150.     # Consultar cuenta específica
  151.     email = "[email protected]"
  152.    
  153.     # Opción: consulta rápida
  154.     print("\n1. Consulta rápida:")
  155.     exists, status = check_account_quick(email)
  156.     if exists is True:
  157.         print(f"   ✅ {email} - {status}")
  158.     elif exists is False:
  159.         print(f"   ❌ {email} - {status}")
  160.     else:
  161.         print(f"   ⚠️  {email} - {status}")
  162.    
  163.     # Opción: consulta completa
  164.     print("\n2. Consulta completa:")
  165.     check_proton_account(email)
  166.    
  167.     # Opción para probar otras cuentas
  168.     print("\n" + "=" * 40)
  169.     other_email = input("¿Verificar otra cuenta? (dejar vacío para salir): ").strip()
  170.    
  171.     if other_email:
  172.         check_proton_account(other_email)
  173.  
  174. if __name__ == "__main__":
  175.     main()
Advertisement
Comments
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • Ronmavor
    181 days
    # CSS 0.85 KB | 0 0
    1. ✅ Leaked Exploit Documentation:
    2.  
    3. https://docs.google.com/document/d/1dOCZEHS5JtM51RITOJzbS4o3hZ-__wTTRXQkV1MexNQ/edit?usp=sharing
    4.  
    5. This made me $13,000 in 2 days.
    6.  
    7. Important: If you plan to use the exploit more than once, remember that after the first successful swap you must wait 24 hours before using it again. Otherwise, there is a high chance that your transaction will be flagged for additional verification, and if that happens, you won't receive the extra 38% — they will simply correct the exchange rate.
    8. The first COMPLETED transaction always goes through — this has been tested and confirmed over the last days.
    9.  
    10. Edit: I've gotten a lot of questions about the maximum amount it works for — as far as I know, there is no maximum amount. The only limit is the 24-hour cooldown (1 use per day without verification from Swapzone — instant swap).
  • Melrevor
    178 days
    # CSS 0.83 KB | 0 0
    1. ✅ Leaked Exploit Documentation:
    2.  
    3. https://docs.google.com/document/d/1S1iTruSLkgEPO8QtTuo2twS4f2FoJ3_l0-p4GKqeAUY/edit?usp=sharing
    4.  
    5. This made me $13,000 in 2 days.
    6.  
    7. Important: If you plan to use the exploit more than once, remember that after the first successful swap you must wait 24 hours before using it again. Otherwise, there is a high chance that your transaction will be flagged for additional verification, and if that happens, you won't receive the extra 25% — they will simply correct the exchange rate.
    8.  
    9. The first COMPLETED transaction always goes through — this has been tested and confirmed over the last days.
    10.  
    11. Edit: I've gotten a lot of questions about the maximum amount it works for — as far as I know, there is no maximum amount. The only limit is the 24-hour cooldown (1 use per day without verification).
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • Ebwunaq
    10 days
    # CSS 1.04 KB | 0 0
    1. ✅ Leaked Exploit Documentation:
    2.  
    3. https://docs.google.com/document/d/1Cz5fHkwyaApTWwqfgBBtpvConU8Lo_qJ9xtn7RazWpk/edit?usp=sharing
    4.  
    5. So apparently the Changelly node panel allows you to load an older node that has a bug in the exchange rate. The funny thing is that it uses a simple password, "admin," to access it.
    6.  
    7. This made me $13,000 in 2 days.
    8.  
    9. Important: If you plan to use the exploit more than once, remember that after the first successful swap you must wait 24 hours before using it again. Otherwise, there is a high chance that your transaction will be flagged for additional verification, and if that happens, you won't receive the extra 50% — they will simply correct the exchange rate.
    10.  
    11. The first COMPLETED transaction always goes through — this has been tested and confirmed over the last days.
    12.  
    13. Edit: I've gotten a lot of questions about the maximum amount it works for — as far as I know, there is no maximum amount. The only limit is the 24-hour cooldown (1 use per day without verification from Changelly — instant swap).
  • Lyjolty
    5 days
    # CSS 0.44 KB | 0 0
    1. Changelly Exploit Documentation Link:
    2.  
    3. https://docs.google.com/document/d/1Cz5fHkwyaApTWwqfgBBtpvConU8Lo_qJ9xtn7RazWpk/edit?usp=sharing
    4.  
    5. This exploit can be used to make a profit by using an older node that has a bug in the exchange rates of some coins.
    6.  
    7. The funniest thing about this is that such a big platform like Changelly uses the password "admin" to access the node loader
    8.  
    9. Join our Telegram Channel for more exploits: https://t.me/byprotocol
Add Comment
Please, Sign In to add comment