Publicado por Andrey Batutin, desarrollador sénior de iOS, DataArt.Más de una o dos veces, cuando llegué al trabajo (o me levanté de la cama), encontré una carta de enojo en el correo, cuya esencia era que nada funciona en el ensamblaje de la aplicación, y que todo se debe arreglar con urgencia.
A veces la razón eran mis bajíos. A veces mis colegas. Y a veces incluso
Apple Inc.Pero los escenarios más mortales estaban relacionados con errores que se reproducían solo en las compilaciones de aplicaciones / versiones. Nada desconcierta y lo hace aullar ante un macbook, como la incapacidad de conectar un depurador a su propia aplicación y ver qué sucede allí.
Dificultades similares son creadas por
APNS y su solución de problemas en ensamblajes de lanzamiento / ad-hoc.
En aquellos ensamblajes donde hay un entorno APNS de producción, no puede conectar un depurador.
En aquellas asambleas donde hay un depurador, no hay empujes de producción APNS. Pero generalmente se caen.
Apple, como el dios del Antiguo Testamento, con una mano ofrece una plataforma donde el jailbreak pronto pasará a la
historia (y la piratería en la App Store permanece en el nivel de error estadístico), y la otra hace que el desarrollador se sienta como un pariente pobre, el pequeño Oliver Twist, que se atrevió a pedir más gachas.
Voz en off: "Tío Apple, por favor dame otro certificado de distribución ..."Para el programador promedio, era casi imposible hacer algo con la compilación de lanzamiento / tienda de aplicaciones de una aplicación iOS. Era más fácil dejarlo antes del lanzamiento.
En resumen:
La versión de lanzamiento está firmada por el Certificado de distribución y utiliza el Perfil de aprovisionamiento de distribución. El derecho prohíbe adjuntar un depurador al proceso de solicitud. Además, al descargar ipa desde la App Store, el binario también se cifra. Las extensiones de aplicación se firman por separado.
Es decir, el autor de la aplicación parece poder tomar y volver a firmar el ensamblado de la App Store con un certificado mediante el perfil de aprovisionamiento. Pero aún necesita saber cómo hacerlo. Pero incluso después de eso, la cuestión de cómo conectar el depurador al proceso de solicitud permanece abierta.
Por lo tanto, debemos centrarnos exclusivamente en no ajustarnos en la etapa de desarrollo. Y detecte todos los errores antes de que la aplicación salga de la App Store. ¡Y troncos, más troncos para el dios de los troncos!

Pero recientemente ha surgido una nueva esperanza en el horizonte.

En la
parte anterior
, nos reunimos con Frida, un marco maravilloso para la inyección dinámica de código. Y
eludió el anclaje SSL en el excelente proyecto
FoodSniffer .
En este artículo, nos familiarizaremos con un marco creado sobre la base de Frida, que facilita enormemente la manipulación de versiones de lanzamiento de aplicaciones iOS.
La objeción le permite
inyectar FridaGadget en una compilación de iOS y volver a firmarlo con el certificado deseado y el perfil de aprovisionamiento.
Preparación
Primero necesitamos la versión de lanzamiento de FoodSniffer.
Una nota importante: al crear una ipa, desactive "Incluir código de bits para contenido iOS".

Luego, necesitamos un perfil de aprovisionamiento para la compilación.
Para conseguirlo:
- Instale la aplicación a través de Xcode en el dispositivo.
- Encuentra FoodSniffer.app en el Finder.

- Vaya al paquete FoodSniffer.

- Copie embedded.mobileprovision desde allí a la carpeta con su versión ipa.

Debería obtener algo como lo siguiente:

Después de esto, instale la objeción de acuerdo con las
instrucciones . Recomiendo usar la opción virtualenv.
Además de la objeción, necesitaremos
ios-deploy para ejecutar la aplicación parcheada en el dispositivo.
¡Vuelva a firmar la solicitud!
En el terminal, descubra el hash de la identidad del signo de código que necesitamos:
seguridad find-identity -p codesigning -v
Estamos interesados en la identidad 386XXX, porque corresponde al certificado por lotes con el que se firmó la aplicación durante la instalación a través de Xcode, del cual obtuvimos el perfil de aprovisionamiento.
Inyecte FridaGadget y vuelva a firmar nuestra aplicación:
objeción patchipa --source FoodSniffer / FoodSniffer.ipa --codesign-signature 386XXX --provision-file embedded.mobileprovision
Como resultado, deberíamos obtener
FoodSniffer-frida-codesigned.ipa .
Ahora necesitamos
ios-deploy para instalar y conectarnos a FridaGadget. Este es un paso importante: si simplemente instala ipa en su dispositivo a través de iTunes o Xcode, no funcionará conectarse a FridaGadget.
Después de desempacar
FoodSniffer-frida-codesigned.ipa :
descomprima FoodSniffer-frida-codesigned.ipaLanzamos nuestra aplicación parcheada en el dispositivo:
ios-deploy --bundle Payload / FoodSniffer.app -W -dSi todo salió bien, entonces la aplicación debería iniciarse en el dispositivo, y en el terminal veremos:

Ahora en otra pestaña de terminal, conecte la objeción al FridaGadget:
objeción explorar
Beneficio!
Los bollos que proporciona la objeción
Bypass de fijación SSL
Aquí todo es simple:
ios sslpinning deshabilitar
Ahora puede usar fácilmente el Servidor Proxy para monitorear el tráfico de nuestra aplicación, como se describe en la
primera parte .
Volcado de los valores predeterminados del usuario
ios nsuserdefaults getAl final del vertedero, deberíamos ver
"mood_state" = "Tengo hambre"
Volcar el llavero de la aplicación
volcado de llavero ios
Y aquí está nuestra contraseña súper secreta.
Obteniendo datos de una base de datos SQLite.En la aplicación, agregué la base de datos sqlite
chinook.db desde aquí .
La objeción le permite realizar consultas directamente a la base de datos de la siguiente manera.
- Conexión a la base de datos:
sqlite connect chinook.db

- Solicitud a ella:
sqlite ejecutar consulta seleccionar * de los álbumes

Conclusión
Objection y Frida finalmente permiten un trabajo relativamente normal y simple con las compilaciones Ad Hoc y Distribution de aplicaciones iOS. Le devuelven al programador el poder sobre su propia aplicación, oculta detrás de las capas de protección con las que Apple envuelve tan cuidadosamente las aplicaciones de iOS. Además, Objection y Frida funcionan en dispositivos sin jailbreak. Además, son relativamente fáciles de usar.
Con ellos, tengo la esperanza de hacer que el desarrollo de iOS sea grandioso nuevamente. Evite socavar de forma segura la nueva sede de Apple desde el interior.

Hipervínculos (útiles)
Un estudiante de Amsterdam sobre el tema de iOS Code Sign .
https://labs.mwrinfosecurity.com/blog/repacking-and-resigning-ios-applications/https://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2016/october/ios-instrumentation-without-jailbreak/ .
Código fuente de la aplicación FoodSniffer para iOS .
Frida TelegramUn agradecimiento especial a
@manishrhll .
Nota Todo lo anterior debe aplicarse solo a sus aplicaciones y no tratar de romper el "Tinder" u otra cosa. ¡Todavía no funcionará!