
ProtOSINT — это Python-скрипт, который помогает вам исследовать аккаунты Proton Mail.
ProtOSINT — это Python-скрипт, который помогает вам расследовать учётные записи Proton Mail.
Это ProtOSINT v2. Первая версия существовала несколько лет, но API Proton изменился, а старые проверки перестали работать, так что это переписывание, которое возвращает инструмент к жизни. Большое спасибо NeutrOSINT за то, что поддерживал этот вид исследований в течение этого времени.
Этот инструмент предназначен для OSINT-работы с Proton Mail (только в образовательных и санкционированных целях). Вы даёте ему адрес электронной почты, имя пользователя или домен, и он сообщает вам, что может найти: существует ли адрес на самом деле, когда был создан ключ шифрования учётной записи, какой алгоритм используется, и размещён ли пользовательский домен на Proton.
У него есть четыре модуля:
Proton намеренно усложняет перебор учётных записей, поэтому наивная проверка вас обманет. ProtOSINT обходит это, комбинируя три источника и доверяя правильному для каждой задачи.
Сервер ключей врёт о несуществующих адресах. Публичный сервер ключей Proton (pks/lookup) возвращает поддельный «приманчивый» ключ — с вымышленной датой создания — для любого адреса на домене Proton, существует он или нет. Так что «действительный ключ + красивая дата» не является доказательством существования адреса. Сервер ключей всё ещё полезен, но только для чтения реальной даты ключа адреса, который вы уже подтвердили, что существует.
API учётных записей лучше, но не идеален. API учётных записей Proton (/users/available) сообщает вам, свободно ли имя пользователя. Он прав в большинстве случаев, но проверяет имя пользователя, а не конкретный адрес, поэтому может ошибаться в крайних случаях — [email protected] может выглядеть как «занятый», даже если этот .ch-адрес никогда не был создан.
Единственная полностью надёжная проверка — это собственное окно создания сообщения Proton. Когда вы вводите адрес в поле «Кому», Proton проверяет его и помечает красным, если почтовый ящик не существует. ProtOSINT может управлять этим с помощью Selenium: он входит в вашу учётную запись Proton, открывает новое сообщение, вводит адрес и считывает, принимает его Proton или отклоняет. Это авторитетный ответ, и именно его используют модули 1, 2 и 4, когда включён Selenium (по умолчанию он включён).
Пользовательские домены проверяются через DNS. Для домена, такого как example.com, реальный вопрос заключается в том, куда направляется его почта. Если MX-запись указывает на Proton (mail.protonmail.ch / mailsec.protonmail.ch), домен находится на Proton Mail. Модуль 3 считывает MX-записи и перекрёстно сверяет их с сервером ключей.
requirements.txt (requests, selenium)Клонируйте репозиторий и установите зависимости 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
Также вам понадобится установленный браузер для проверки через Selenium. Selenium сам загружает соответствующий драйвер, поэтому вам не нужно устанавливать отдельный chromedriver/geckodriver.
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
# альтернативы: sudo apt install -y chromium (или: firefox-esr)
macOS (Homebrew):
brew install --cask google-chrome # или: brew install --cask firefox
Windows: установите Chrome или Firefox обычным образом с их веб-сайта.
Запускаете от root (часто на Kali)? Chrome нуждается в флаге
--no-sandbox, иначе он вылетает при запуске. ProtOSINT уже устанавливает его за вас, так что ничего делать не нужно.
При первом запуске скрипт создаёт файл config.json рядом с собой:
{
"proton": {
"username": "",
"password": ""
},
"settings": {
"use_selenium": true,
"headless": true
}
}
use_selenium (true/false) использует проверку через окно создания сообщения Selenium для модулей 1, 2 и 4 (надёжный метод). Установите его в false, чтобы вернуться к более быстрому API учётных записей.headless (true/false) запускает браузер в фоновом режиме, так что окно не появляется. Устанавливайте его в true только для учётной записи без 2FA или CAPTCHA, так как вы не сможете решить их, когда окно скрыто. Установите его в false, если вам нужно видеть браузер.username / password — это ваш логин Proton. Вы можете заполнить их или оставить пустыми, и скрипт спросит при запуске. Оставлять пароль пустым безопаснее — он никогда не записывается на диск. Если вы всё же помещаете учётные данные в файл, не фиксируйте его (он уже в .gitignore).Если вы закроете браузер во время сеанса, следующая проверка, которой он понадобится, откроет его снова и автоматически войдёт в систему.
python3 protosint.py
Выберите модуль из меню и следуйте подсказкам. q завершает работу (и закрывает браузер, если он был открыт).
Имя учётной записи не чувствительно к регистру, и Proton обрабатывает ., _ и - как прозрачные. Всё, что идёт после +, также игнорируется. Итак, все эти адреса принадлежат одной и той же учётной записи, что и [email protected]:
У них всех один и тот же ключ и временная метка.
Дата, которую показывает ProtOSINT, — это дата создания основного PGP-ключа учётной записи — что не всегда совпадает с датой создания учётной записи.
Пример 1 — цель никогда не трогала свои ключи. В этом случае дата ключа — это реальная дата создания учётной записи.
[email protected]Пример 2 — цель перегенерировала свой ключ. Теперь дата отражает новый ключ, а не учётную запись.
[email protected]ProtOSINT показывает, какой тип ключа использует учётная запись. То, что сервер ключей сообщает о первичном ключе, является одним из следующих:
Вы также можете увидеть X25519, Ed25519 или RSA 3072 на некоторых ключах — все они считываются напрямую из идентификатора алгоритма OpenPGP ключа.
Платный план Proton позволяет вам прикрепить собственный домен. Если [email protected] разрешается в Proton (модуль 1 или 3), цель использует платный план Proton. Модуль 3 подтверждает это по MX-записям домена, что является наиболее надёжным сигналом.
Proton ограничивает как сервер ключей (ошибка 2028), так и API учётных записей (HTTP 429). Точные лимиты не задокументированы и, похоже, меняются, так что если вас заблокировали, подождите некоторое время или запустите с другого IP-адреса. Метод Selenium использует вашу обычную авторизованную сессию, поэтому на него эти лимиты не влияют.
Чувствуйте себя свободно, чтобы клонировать проект. Для чего-то серьёзного сначала откройте проблему, чтобы обсудить это.
Модуль Selenium считывает веб-приложение Proton, поэтому, если Proton изменит свою страницу, селекторы в selenium_login() и selenium_check_emails() могут потребовать небольшого обновления. Это первое место, куда стоит смотреть, если проверка через браузер перестанет работать.