Как выжать максимум из подписки iCloud+
Больше всего в iCloud+ я люблю функцию «HideMyEmail», которая создаёт вам алиас при регистрации на сайтах, чтобы не делиться настоящей почтой.

Больше всего в iCloud+ я люблю функцию «HideMyEmail», которая создаёт вам алиас при регистрации на сайтах, чтобы не делиться настоящей почтой.

Здорово, но знаете, что было бы ещё лучше? Возможность быстро использовать эту функцию, чтобы сгенерировать список алиасов, ведущих на мою почту iCloud — чтобы не покупать базы email или catchall-адреса во время розыгрышей, массового создания аккаунтов или просто иметь под рукой свежие одноразовые адреса, когда они понадобятся.
Так давайте это сделаем!
Другие open source-решения
Эта идея родилась, когда мне понадобилось быстро и легко создать несколько алиасов. Я вспомнил про подход с HideMyEmail, нашёл в сети пару проектов, но главной проблемой у всех был вход в аккаунт.
Совершенно не поддерживается. Приходилось извлекать cookie из сессии браузера, чтобы хоть какой-то скрипт заработал. То есть по сути вокруг крутится несколько vibe-coded-модулей, которые просто повторяют один и тот же запрос X раз с теми cookie, что вы им подсунете.
А если учесть, что iCloud позволяет генерировать примерно по 5 адресов каждые 30/40 минут… в итоге делать это вручную было бы даже проще, чем воевать с протухшими сессиями.
Мы можем сделать гораздо лучше. (спойлер: загляните в github-репозиторий этого проекта)
Разбираемся с процессом
Чтобы построить что-то действительно работающее, мне нужно было понять, что происходит при входе в iCloud. Поэтому я запустил браузер, открыл HTTP-прокси и записал всю сессию — от входа до генерации почты.
Очевидно, Apple не делает это простым. Их аутентификация использует собственную реализацию протокола Secure Remote Password (SRP) с рядом специфичных для Apple модификаций, на разбор которых у меня ушло слишком много времени.
Давайте пройдёмся по этому вместе.
Процесс аутентификации
**Шаг 1: инициализация SRP
**Сначала мы отправляем запрос на /appleauth/auth/signin/init с именем аккаунта:
{
"a": "<base64_encoded_A_value>",
"accountName": "[email protected]",
"protocols": ["s2k", "s2k_fo"]
}
Значение a — это наше публичное эфемерное значение SRP. Apple отвечает своими значениями, среди которых:
- b — публичное эфемерное значение сервера
- salt — для деривации пароля
- iteration — число итераций PBKDF2
- protocol — какой вариант использовать (обычно s2k)
**Шаг 2: протокол s2k
**И вот здесь Apple решила побыть Apple. Стандартный SRP вычисляет x = H(s || H(I:p)), где I — имя пользователя, а p — пароль.
Но нет, протокол s2k от Apple делает иначе:
x = H(s || p)
Где p — не сырой пароль, а:
password_hash = SHA256(password)
derived_key = PBKDF2(password_hash, salt, iterations, 32, SHA256)
Я потратил часы на отладку ошибок «Invalid credentials», прежде чем это обнаружил. Огромная благодарность проекту icloudpy за помощь в проверке логики — их реализация сэкономила мне время.
Шаг 3: завершение аутентификации
Вычислив корректное SRP-доказательство, мы отправляем его на /appleauth/auth/signin/complete:
{
"accountName": "[email protected]",
"m1": "<base64_srp_proof>",
"m2": "<base64_server_proof>",
"rememberMe": true
}
Шаг 4: двухфакторная аутентификация
Если включена 2FA (а честно говоря, она должна быть на каждом аккаунте), Apple возвращает статус 409 с запросом подтверждения. Вы получите код на своих доверенных устройствах — iPhone, iPad, Mac, что у вас есть.
Мы отправляем этот код на /appleauth/auth/verify/trusteddevice/securitycode:
{
"securityCode": {
"code": "123456"
}
}
Затем мы делаем сессию доверенной через /appleauth/auth/2sv/trust, чтобы не проходить 2FA каждый раз.
Шаг 5: вход в аккаунт
Наконец, мы обращаемся к /setup/ws/1/accountLogin, чтобы получить полную сессию со всеми нужными нам URL веб-сервисов, включая эндпоинт HideMyEmail, ради которого всё и затевалось.
На этом этапе у нас есть полностью аутентифицированная сессия. Самое сложное позади!
API HideMyEmail
Теперь самое интересное. После аутентификации работа с HideMyEmail оказывается на удивление простой по сравнению с тем кошмаром аутентификации, через который мы только что прошли. (вероятно, поэтому у всех open source-проектов была реализована именно эта часть)
Генерация адреса
POST /v1/hme/reserve
{
"hme": "[email protected]",
"label": "My Shopping Account",
"note": "Used for online shopping"
}
После резервирования адрес навсегда привязывается к вашему аккаунту и будет пересылать сообщения в ваш почтовый ящик вечно (или пока вы его не удалите).
Получение списка всех адресов
GET /v2/hme/list
Возвращает все ваши адреса HideMyEmail с метаданными: дата создания, метка (label) и активен ли адрес. Удобно для экспорта всего, что вы создали.
Ограничения по частоте (rate limits)
Разумеется, Apple не даст нам разгуляться. Вот что я выяснил в ходе… обширного тестирования:
- За 30 минут: ~5 адресов × число членов семьи
- Всего на аккаунт: ~700 адресов
Множитель «члены семьи» любопытен: если у вас настроен Apple Family Sharing на 5 человек, теоретически вы получаете примерно 25 адресов за 30 минут. Неплохо для функции, которую Apple, вероятно, не задумывала использовать таким образом.
Когда вы достигаете лимита, Apple возвращает:
{
"success": false,
"error": {
"errorMessage": "You have reached the limit...",
...
}
}
Создание CLI
Со всеми этими знаниями я собрал icloud-hme — полноценный CLI-инструмент, который берёт всё на себя:
- Настоящая SRP-аутентификация — больше никакого кошмара с копированием cookie
- Поддержка 2FA — работает с вашими доверенными устройствами
- Мультиаккаунт — переключение между несколькими аккаунтами iCloud
- Красивый вывод — на базе Rich, ведь почему CLI должен быть уродливым?
- Экспорт — CSV или JSON с опциями фильтрации
Смотрим в действии
Сначала аутентифицируемся в аккаунте iCloud:
$ icloud-hme auth
◆ iCloud HME ─────────────────────────────────────────────────────
? iCloud email: your@icloud.com
? Password: ********
● Two-factor authentication required
? Enter 6-digit code: 123456
✓ Authenticated as Your Name
Затем генерируем сколько угодно адресов:
$ icloud-hme generate -n 5
Generating 5 email(s) • PERMANENT
──────────────────────────────────────────────────────────────────
✓ punk_51_estofamos@icloud.com
✓ bicep_angora.32@icloud.com
✓ extinct.daze_7p@icloud.com
✓ minimos_orzo.06@icloud.com
✓ flak-din-1q@icloud.com
──────────────────────────────────────────────────────────────────
✓ Generated 5/5 permanent email(s)
Нужно всё экспортировать? Легко:
$ icloud-hme export --format csv
✓ Found 29 emails to export
? Save to (without extension): my_emails
✓ Exported to my_emails.csv
Установить модуль можно через
pip install icloud-hme
или из исходного кода — обязательно загляните в github-репозиторий
Связаться со мной
Если статья вам понравилась, подписывайтесь на меня на GitHub и Medium, чтобы получать уведомления каждый раз, когда я что-то публикую или выкладываю в open source.
Пропустите реверс-инжиниринг.
Takion возвращает свежие cookie, заголовки и токены для любой крупной антибот-стены. Один POST, без браузера, первый вызов в течение часа.