
ProtOSINT é um script Python que ajuda você a investigar contas do Proton Mail.
# ProtOSINT ProtOSINT é um script Python que ajuda você a investigar contas do Proton Mail. <img width="800" height="832" alt="protosint (1)" src="https://github.com/user-attachments/assets/4c08389a-0525-40e3-99d3-392561752425" /> ## Versão Este é o **ProtOSINT v2**. A primeira versão existia há alguns anos, mas a API do Proton mudou e as verificações antigas pararam de funcionar, então esta é uma reescrita que traz a ferramenta de volta à vida. Muito obrigado ao [NeutrOSINT](https://github.com/Kr0wZ/NeutrOSINT) por manter esse tipo de pesquisa ativa enquanto isso. ## Descrição Esta ferramenta é destinada ao trabalho de OSINT no Proton Mail (apenas para uso educacional e autorizado). Você fornece um endereço de e-mail, um nome de usuário ou um domínio, e ela informa o que pode encontrar: se o endereço realmente existe, quando a chave de criptografia da conta foi criada, qual algoritmo ela usa e se um domínio personalizado está hospedado no Proton. Ela possui quatro módulos: - **[1]** Verificar um e-mail do Proton: ele existe e qual é a data e o tipo de criação da chave. - **[2]** Enumerar um nome de usuário em todos os domínios do Proton (protonmail.com, protonmail.ch, pm.me, proton.me). - **[3]** Verificar se um domínio usa o Proton Mail (através dos seus registros MX, verificados com o servidor de chaves). - **[4]** Verificar em lote uma lista de endereços através de uma sessão real do Proton logada. ## Como funciona (e porquê) O Proton torna a enumeração de contas deliberadamente difícil, então uma verificação ingênua mentirá para você. O ProtOSINT contorna isso combinando três fontes e confiando na correta para cada tarefa. **O servidor de chaves mente sobre endereços inexistentes.** O servidor de chaves públicas do Proton (`pks/lookup`) retorna uma chave "falsa" (decoy) - com uma data de criação inventada - para *qualquer* endereço em um domínio Proton, existente ou não. Portanto, uma "chave válida + data bonita" não é prova de que o endereço existe. O servidor de chaves ainda é útil, mas apenas para ler a data *real* da chave de um endereço que você já confirmou que existe. **A API da conta é melhor, mas não é perfeita.** A API de conta do Proton (`/users/available`) informa se um nome de usuário está disponível. Ela está correta na maioria das vezes, mas verifica o *nome de usuário*, não o endereço específico, então pode errar em casos extremos - `[email protected]` pode parecer "ocupado" mesmo que esse endereço `.ch` nunca tenha sido criado. **A única verificação totalmente confiável é a janela de composição do próprio Proton.** Quando você digita um endereço no campo "Para", o Proton o valida e o marca em vermelho se a caixa de correio não existir. O ProtOSINT pode conduzir isso com Selenium: ele faz login na sua conta Proton, abre uma nova mensagem, digita o endereço e lê se o Proton aceita ou rejeita. Essa é a resposta autoritativa, e é o que os módulos 1, 2 e 4 usam quando o Selenium está ativado (que é o padrão). **Domínios personalizados são verificados por DNS.** Para um domínio como `example.com`, a questão real é para onde seu e-mail é roteado. Se o registro MX aponta para o Proton (`mail.protonmail.ch` / `mailsec.protonmail.ch`), o domínio está no Proton Mail. O módulo 3 lê os registros MX e os verifica com o servidor de chaves. ## Requisitos - [Python 3](https://www.python.org/downloads/) (3.7 ou mais recente) - Os pacotes Python em `requirements.txt` (`requests`, `selenium`) - Um navegador (Chrome/Chromium ou Firefox) para a verificação do Selenium ## Instalação Clone o repositório e instale as dependências Python: ```bash 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 ``` Você também precisa de um navegador instalado para a verificação do Selenium. O Selenium baixa o driver correspondente por conta própria, então você não precisa instalar um chromedriver/geckodriver separado. Debian / Ubuntu / Kali: ```bash 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 (ou: firefox-esr) ``` macOS (Homebrew): ```bash brew install --cask google-chrome # ou: brew install --cask firefox ``` Windows: instale o Chrome ou Firefox normalmente a partir do site. > Executando como root (comum no Kali)? O Chrome precisa da flag `--no-sandbox` ou trava na inicialização. O ProtOSINT já a define para você, então não há nada a fazer. ## Configuração Na primeira vez que você executar o script, ele cria um arquivo `config.json` ao lado: ```json { "proton": { "username": "", "password": "" }, "settings": { "use_selenium": true, "headless": true } } ``` - `use_selenium` (`true`/`false`) usa a verificação de composição do Selenium para os módulos 1, 2 e 4 (o método confiável). Defina como `false` para voltar à API de conta mais rápida. - `headless` (`true`/`false`) executa o navegador em segundo plano para que nenhuma janela apareça. Defina como `true` apenas em uma conta **sem** 2FA ou CAPTCHA, pois você não pode resolvê-los quando a janela está oculta. Defina como `false` se precisar ver o navegador. - `username` / `password` são seu login do Proton. Você pode preenchê-los ou deixá-los vazios e o script perguntará quando iniciar. Deixar a senha vazia é mais seguro - ela nunca é gravada em disco. Se você colocar credenciais no arquivo, não as commite (já está no `.gitignore`). Se você fechar o navegador no meio da sessão, a próxima verificação que precisar dele o reabrirá e fará login novamente automaticamente. ## Uso ```bash python3 protosint.py ``` Escolha um módulo no menu e siga as instruções. `q` sai (e fecha o navegador se um estiver aberto). ## Dicas para investigação do Proton Mail ### Proton Mail não diferencia maiúsculas de minúsculas O nome da conta não diferencia maiúsculas de minúsculas, e o Proton trata `.`, `_` e `-` como transparentes. Qualquer coisa após um `+` também é ignorada. Portanto, todos estes são a mesma conta que `[email protected]`: - `[email protected]` - `[email protected]` - `[email protected]` - `[email protected]` Todos compartilham a mesma chave e timestamp. ### O timestamp é a data da chave, nem sempre a data da conta A data que o ProtOSINT mostra é quando a *chave PGP primária* da conta foi criada - o que nem sempre é o mesmo que quando a conta foi criada. **Exemplo 1 - o alvo nunca tocou nas chaves.** Aqui a data da chave é a data real de criação da conta. - 2021-01-12: conta `[email protected]` é criada. - 2021-01-15: ProtOSINT relata 2021-01-12. **Exemplo 2 - o alvo regenerou a chave.** Agora a data reflete a chave mais nova, não a conta. - 2021-01-12: conta `[email protected]` é criada. - 2021-01-13: alvo gera uma nova chave em Configurações → Chaves de criptografia. - 2021-01-15: ProtOSINT relata 2021-01-13, não 2021-01-12. ### Chaves de criptografia O ProtOSINT mostra o tipo de chave que a conta usa. O que o servidor de chaves relata para a chave primária é um dos seguintes: - Curve25519 - ECC moderna (chave de assinatura Ed25519); este é o padrão em contas mais novas e o mais rápido e seguro - RSA 2048 - o padrão antigo em contas criadas antes de 2021 - RSA 4096 - mais forte, mas mais lento, geralmente visto quando alguém importou uma chave para compatibilidade legada Você também pode ver X25519, Ed25519 ou RSA 3072 em algumas chaves - todas são lidas diretamente do ID do algoritmo OpenPGP da chave. ### Domínios personalizados Um plano pago do Proton permite que você anexe seu próprio domínio. Se `[email protected]` resolve para o Proton (módulo 1 ou 3), o alvo está em um plano pago do Proton. O módulo 3 confirma isso através dos registros MX do domínio, que é o sinal mais confiável. ## Limites de taxa O Proton limita tanto o servidor de chaves (erro 2028) quanto a API de conta (HTTP 429). Os limites exatos não são documentados e parecem mudar, então se você for bloqueado, espere um pouco ou execute novamente de um IP diferente. O método do Selenium usa sua sessão normal logada, então não é afetado por esses limites. ## Contribuindo Sinta-se à vontade para clonar o projeto. Para algo grande, abra uma issue primeiro para discutir. O módulo Selenium lê o aplicativo web do Proton, então se o Proton alterar sua página, os seletores em `selenium_login()` e `selenium_check_emails()` podem precisar de uma pequena atualização. Esse é o primeiro lugar para verificar se a verificação do navegador parar de funcionar. ## Licença [MIT](https://choosealicense.com/licenses/mit/)