writeup

apple bloqueó altserver dos veces en una semana. propuse el arreglo.

kisnner obando · octubre de 2026 · altserver · macos 27.2 · ipados 27.2 · altstore#1834 · estado: propuesto, sin fusionar

altserver en macos 27 mostrando el error: los datos no están en el formato correcto

continuación de altstore no podía iniciar sesión. apple devolvía una página html. en octubre de 2026 altserver en macos 27 volvió a dejar de iniciar sesión, primero con -80045 y, dos días después, con una página html que altserver intentaba leer como plist. así rastreé los dos fallos, qué medí en el borde de apple sin credenciales y el arreglo que propuse. la versión larga, con diagramas, está en el informe de campo (en inglés).

resumen

la regla que explica los dos bloqueos

los datos de anisette y la cabecera X-MMe-Client-Info tienen que describir el mismo dispositivo. altserver pedía anisette local (coreadi de android) y luego se declaraba mac. esa diferencia es el primer bloqueo. el segundo es el borde de apple rechazando android por completo.

sondear el borde sin credenciales

para separar "el servidor rechaza esta identidad" de "mi inicio de sesión está mal", mandé peticiones sin credenciales a GsService2 con un cuerpo plist vacío y cambiando solo la información de cliente. muestran cómo enruta el borde una petición, no si un inicio de sesión funcionaría.

información de clienterespuestalectura
<Pixel 7> <Android;14;…>503 html, 6 de 6bloqueado en el borde
variantes de pixel 5 y pixel 8503 html, 6 de 6igual
<MacBookPro…> <macOS;27.2;…> akd404 / 429llega al servicio (mi ip ya estaba limitada)
<PC> <Windows;6.2(0,0);9200> itunes404llega al servicio

la única receta confirmada después del 503 fue la que traían iloader 2.3.8 e isideload 0.4.6: anisette de windows desde un servidor de anisette v3.

un crash que no era el error

llevar el arreglo a altserver implicó compilarlo con xcode 27. la primera build que llegó a apple se cayó sola: la llamada que fallaba era alt_ccsrp_gp_rfc5054_2048, un símbolo que altsign enlaza por el espacio de nombres plano, y no estaba definido en ningún framework. el producto AltSign-Dynamic de swiftpm salía vacío con xcode 27.

$ nm -arch arm64 AltSign.framework/Versions/A/AltSign | grep rfc5054
                 U _alt_ccsrp_gp_rfc5054_2048

reconstruir solo ese dylib desde libcorecrypto_static.a con -force_load eliminó el crash. es un problema de compilación, así que a propósito no forma parte del pull request.

el arreglo

seis commits, tres en altstore y tres en altsign. se apoyan en el arreglo de 2fa de altsign#59 y reutilizan el cliente de anisette remota de altstore#1806.

antesdespués
anisettecoreadi de android, local (anisettekit)adi de windows, servidor de anisette v3
user-agentcadena fija de authkit con xcode 26el user_agent del servidor
errores httperror de lectura de plist 3840código http legible

tu contraseña y tu código 2fa van directos a apple. el servidor de anisette solo ve la identidad de un dispositivo.

evidencia

instalar altstore desde la build descargada funcionó en un ipad pro y en un iphone 15 pro max, y refrescar altstore desde la app también: 26 peticiones durante una instalación y 6 durante un refresco, todas http 200, de vuelta a 7 días restantes, con un app id usado. el código 2fa vino de un dispositivo de confianza, porque el sms falla ahora mismo por parte de apple.

altstore en un iphone después del refresco, 7 días restantes

qué prueba esto y qué no

errores que cometí en el camino

lo que me llevo

enlaces