Todos os posts
5 min de leituraglizzykingdreko

Usando a assinatura do iCloud+ ao máximo

O recurso que eu mais amo no iCloud+ é o "HideMyEmail", que cria um alias para você durante cadastros em sites para evitar compartilhar o seu e-mail real.

Usando a assinatura do iCloud+ ao máximo

O recurso que eu mais amo no iCloud+ é o "HideMyEmail", que cria um alias para você durante cadastros em sites para evitar compartilhar o seu e-mail real.

Isso é legal, mas sabe o que seria ainda melhor? A possibilidade de usar rapidamente esse recurso para gerar uma lista de aliases apontando para o meu e-mail do iCloud, para evitar comprar listas de e-mail ou catchalls durante rifas, criações de contas em massa, ou simplesmente ter endereços descartáveis novos sempre que eu precisar.

Então vamos fazer isso!

Outras soluções open source

Essa ideia nasceu quando eu precisei criar alguns aliases de forma rápida e fácil. Pensei nessa abordagem do HideMyEmail, achei alguns projetos online, mas o principal problema em todos eles era o login.

Totalmente sem suporte. Tive que extrair os cookies da minha sessão do navegador para fazer qualquer script funcionar. Então basicamente existem só alguns módulos vibe-coded por aí que vão reproduzir uma requisição X vezes com os cookies que você fornece.

E tendo em mente que o iCloud deixa você gerar por volta de 5 e-mails a cada 30/40 minutos… no fim, fazer manualmente seria até mais fácil do que brigar com sessões expiradas.

Dá pra fazer muito melhor. (spoiler: confira o repo do github deste projeto)

Entendendo o processo

Para construir algo que realmente funcione, eu precisava entender o que acontece quando você faz login no iCloud. Então liguei meu navegador, abri um proxy HTTP e gravei a sessão inteira, do login à geração de e-mail.

obv a Apple não facilita isso. A autenticação deles usa uma implementação customizada do protocolo Secure Remote Password (SRP) com algumas modificações específicas da Apple que levaram tempo demais para eu decifrar.

Deixa eu te guiar por ela.

O Fluxo de Autenticação

**Passo 1: Inicialização do SRP
**Primeiro, enviamos uma requisição para /appleauth/auth/signin/init com o nome da conta:

{
  "a": "<base64_encoded_A_value>",
  "accountName": "[email protected]",
  "protocols": ["s2k", "s2k_fo"]
}

O valor a é o nosso valor efêmero público do SRP. A Apple responde com os valores próprios dela, incluindo:

  • b O efêmero público do servidor
  • saltPara a derivação da senha
  • iterationContagem de iterações do PBKDF2
  • protocolQual variante usar (geralmente s2k)

**Passo 2: O Protocolo s2k
**Aqui é onde a Apple decidiu ser Apple. O SRP padrão computa x = H(s || H(I:p)) onde I é o username e p é a senha.

Mas não, o protocolo s2k da Apple faz algo diferente:

x = H(s || p)

Onde p não é a senha bruta, mas:

password_hash = SHA256(password)
derived_key = PBKDF2(password_hash, salt, iterations, 32, SHA256)

Passei horas debugando erros de "Invalid credentials" antes de descobrir isso. Um agradecimento enorme ao projeto icloudpy por me ajudar a validar a lógica; a implementação deles economizou meu tempo.

Passo 3: Concluir a Autenticação

Com a prova SRP correta calculada, enviamos ela para /appleauth/auth/signin/complete:

{
  "accountName": "[email protected]",
  "m1": "<base64_srp_proof>",
  "m2": "<base64_server_proof>",
  "rememberMe": true
}

Passo 4: Autenticação de Dois Fatores

Se o 2FA estiver ativado (e, sinceramente, deveria estar em toda conta), a Apple retorna um status 409 pedindo verificação. Você vai receber um código nos seus dispositivos confiáveis — iPhone, iPad, Mac, o que você tiver.

Enviamos esse código para /appleauth/auth/verify/trusteddevice/securitycode:

{
  "securityCode": {
    "code": "123456"
  }
}

Então marcamos a sessão como confiável via /appleauth/auth/2sv/trust para não termos que passar pelo 2FA toda santa vez.

Passo 5: Login na Conta

Por fim, chamamos /setup/ws/1/accountLogin para obter a sessão completa com todas as URLs de webservice que precisamos, incluindo o endpoint do HideMyEmail que estamos buscando.

Nesse ponto, temos uma sessão totalmente autenticada. A parte difícil está feita!

A API do HideMyEmail

Agora a parte divertida. Uma vez autenticado, interagir com o HideMyEmail é surpreendentemente simples comparado ao pesadelo de autenticação pelo qual acabamos de passar. (por essa razão, provavelmente, todos os projetos open source só tinham essa parte)

Gerando um E-mail

POST /v1/hme/reserve
{
  "hme": "[email protected]",
  "label": "My Shopping Account",
  "note": "Used for online shopping"
}

Uma vez reservado, o e-mail fica permanentemente vinculado à sua conta e vai encaminhar mensagens para a sua caixa de entrada para sempre (ou até você deletá-lo).

Listando Todos os E-mails

GET /v2/hme/list

Retorna todos os seus endereços do HideMyEmail com metadados como data de criação, label e se está ativo. Útil para exportar tudo o que você criou.

Limites de Taxa

Claro, a Apple não ia nos deixar exagerar. Aqui está o que descobri através de… testes extensivos:

  • A cada 30 minutos: ~5 e-mails × membros da família
  • Total por conta: ~700 e-mails

O multiplicador de "membros da família" é interessante — se você tem o Apple Family Sharing com 5 pessoas, teoricamente você consegue por volta de 25 e-mails a cada 30 minutos. Nada mal para um recurso que a Apple provavelmente não pretendia que fosse usado dessa forma.

Quando você atinge o limite, a Apple retorna:

{
  "success": false,
  "error": {
    "errorMessage": "You have reached the limit...",
    ...
  }
}

Construindo a CLI

Com todo esse conhecimento, construí o icloud-hme — uma ferramenta de CLI de verdade que cuida de tudo:

  • Autenticação SRP Real — Chega dos pesadelos de copiar cookies
  • Suporte a 2FA — Funciona com os seus dispositivos confiáveis
  • Multi-Conta — Alterne entre várias contas do iCloud
  • Saída Bonita — Feita com Rich, porque por que CLIs deveriam ser feias?
  • Exportação — CSV ou JSON com opções de filtragem

Veja em Ação

Primeiro, autentique-se com a sua conta do 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

Então gere quantos e-mails quiser:

$ 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)

Precisa exportar tudo? Fácil:

$ icloud-hme export --format csvFound 29 emails to export
  ? Save to (without extension): my_emails

  ✓ Exported to my_emails.csv

Você pode instalar o módulo via

pip install icloud-hme

ou pelo código-fonte, não deixe de conferir o repo do github

Conecte-se comigo

Se você gostou deste artigo, me siga no GitHub e no Medium para receber notificações sempre que eu postar ou abrir o código de algo.

icloudapplepythonhide-my-emailgenerator

Pule a engenharia reversa.

O Takion retorna cookies, headers e tokens novos para cada grande muro antibot. Um POST, sem navegador, primeira chamada em menos de uma hora.