Exploración móvil iOS en tiempo de ejecución con objeción, o piratear nuestra propia aplicación



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.

Objeción


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:

  1. Instale la aplicación a través de Xcode en el dispositivo.
  2. Encuentra FoodSniffer.app en el Finder.

  3. Vaya al paquete FoodSniffer.

  4. 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.ipa

Lanzamos nuestra aplicación parcheada en el dispositivo:

ios-deploy --bundle Payload / FoodSniffer.app -W -d

Si 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 get

Al 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.

  1. Conexión a la base de datos:

    sqlite connect chinook.db

  2. 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 Telegram

Un 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á!

Source: https://habr.com/ru/post/es429196/


All Articles