
ProtOSINT — это Python-скрипт, который помогает вам исследовать аккаунты Proton Mail.
# ProtOSINT ProtOSINT — это Python-скрипт, который помогает вам расследовать учётные записи Proton Mail. <img width="800" height="832" alt="protosint (1)" src="https://github.com/user-attachments/assets/4c08389a-0525-40e3-99d3-392561752425" /> ## Версия Это **ProtOSINT v2**. Первая версия существовала несколько лет, но API Proton изменился, а старые проверки перестали работать, так что это переписывание, которое возвращает инструмент к жизни. Большое спасибо [NeutrOSINT](https://github.com/Kr0wZ/NeutrOSINT) за то, что поддерживал этот вид исследований в течение этого времени. ## Описание Этот инструмент предназначен для OSINT-работы с Proton Mail (только в образовательных и санкционированных целях). Вы даёте ему адрес электронной почты, имя пользователя или домен, и он сообщает вам, что может найти: существует ли адрес на самом деле, когда был создан ключ шифрования учётной записи, какой алгоритм используется, и размещён ли пользовательский домен на Proton. У него есть четыре модуля: - **[1]** Проверка одного Proton-адреса: существует ли он, а также дата и тип создания ключа. - **[2]** Перебор имени пользователя по всем доменам Proton (protonmail.com, protonmail.ch, pm.me, proton.me). - **[3]** Проверка, использует ли домен Proton Mail (через его MX-записи, перекрёстно сверенные с сервером ключей). - **[4]** Пакетная проверка списка адресов через реальную авторизованную сессию 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-записи и перекрёстно сверяет их с сервером ключей. ## Требования - [Python 3](https://www.python.org/downloads/) (3.7 или новее) - Пакеты Python из `requirements.txt` (`requests`, `selenium`) - Браузер (Chrome/Chromium или Firefox) для проверки через Selenium ## Установка Клонируйте репозиторий и установите зависимости 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 ``` Также вам понадобится установленный браузер для проверки через Selenium. Selenium сам загружает соответствующий драйвер, поэтому вам не нужно устанавливать отдельный chromedriver/geckodriver. 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 # альтернативы: sudo apt install -y chromium (или: firefox-esr) ``` macOS (Homebrew): ```bash brew install --cask google-chrome # или: brew install --cask firefox ``` Windows: установите Chrome или Firefox обычным образом с их веб-сайта. > Запускаете от root (часто на Kali)? Chrome нуждается в флаге `--no-sandbox`, иначе он вылетает при запуске. ProtOSINT уже устанавливает его за вас, так что ничего делать не нужно. ## Настройка При первом запуске скрипт создаёт файл `config.json` рядом с собой: ```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`). Если вы закроете браузер во время сеанса, следующая проверка, которой он понадобится, откроет его снова и автоматически войдёт в систему. ## Использование ```bash python3 protosint.py ``` Выберите модуль из меню и следуйте подсказкам. `q` завершает работу (и закрывает браузер, если он был открыт). ## Советы по расследованию Proton Mail ### Proton Mail не чувствителен к регистру Имя учётной записи не чувствительно к регистру, и Proton обрабатывает `.`, `_` и `-` как прозрачные. Всё, что идёт после `+`, также игнорируется. Итак, все эти адреса принадлежат одной и той же учётной записи, что и `[email protected]`: - `[email protected]` - `[email protected]` - `[email protected]` - `[email protected]` У них всех один и тот же ключ и временная метка. ### Временная метка — это дата ключа, а не всегда дата учётной записи Дата, которую показывает ProtOSINT, — это дата создания *основного PGP-ключа* учётной записи — что не всегда совпадает с датой создания учётной записи. **Пример 1 — цель никогда не трогала свои ключи.** В этом случае дата ключа — это реальная дата создания учётной записи. - 2021-01-12: создана учётная запись `[email protected]` - 2021-01-15: ProtOSINT сообщает 2021-01-12 **Пример 2 — цель перегенерировала свой ключ.** Теперь дата отражает новый ключ, а не учётную запись. - 2021-01-12: создана учётная запись `[email protected]` - 2021-01-13: цель генерирует новый ключ в Настройки → Ключи шифрования - 2021-01-15: ProtOSINT сообщает 2021-01-13, а не 2021-01-12 ### Ключи шифрования ProtOSINT показывает, какой тип ключа использует учётная запись. То, что сервер ключей сообщает о первичном ключе, является одним из следующих: - Curve25519 — современный ECC (ключ подписи Ed25519); это значение по умолчанию для новых учётных записей и самый быстрый и безопасный - RSA 2048 — старый вариант по умолчанию для учётных записей, созданных до 2021 года - RSA 4096 — более сильный, но медленнее, обычно виден, когда кто-то импортировал ключ для совместимости со старым оборудованием Вы также можете увидеть 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()` могут потребовать небольшого обновления. Это первое место, куда стоит смотреть, если проверка через браузер перестанет работать. ## Лицензия [MIT](https://choosealicense.com/licenses/mit/)