2009-07-16 8 views
78

¿Cómo se determina (mediante programación) si un iPhone/iPod es:La determinación de si un iPhone es la cárcel roto mediante programación

  1. cárcel roto
  2. Ejecución de una copia agrietada de su software

Pinch Media puede detectar si un teléfono está roto o si el software que se está ejecutando está roto, ¿alguien sabe cómo lo hacen? ¿Hay alguna biblioteca?

+1

Apple sabe cómo determinar que: p – JoshJordan

+2

Vea también: http://stackoverflow.com/questions/413242/how-do-i-detect-that-an-sdk-app-is-running-on-a -jailbroken-phone –

+2

Si está interesado en esta pregunta, ¿por qué no admite la propuesta del Área 51 para un sitio de Intercambio de Apéndices (http://area51.stackexchange.com/proposals/18154/ios-jailbreaking-development?referrer)? = EuWVi6IpN0_KzzEhC7I-Qw2) – rjstelling

Respuesta

38

Here es una de las maneras de detectar si su aplicación está rajada.

En resumen: las grietas generalmente requieren cambiar Info.plist. Como es un archivo común al que tiene acceso, es bastante fácil determinar dichos cambios.

+1

Desafortunadamente, hay una solución que rompe este mecanismo de detección. Una vez que la aplicación está instalada, la clave SignerIdentity ya no es necesaria, por lo que el cracker puede simplemente ingresar a su teléfono desbloqueado y editar el plist para eliminarlo. –

+0

@KevinBallard ¿tiene alguna recomendación para detectar los jailbreaks comunes en 2017? –

+0

@ Cœur Nope, no he investigado esto desde que escribí ese comentario. –

25

La detección de un teléfono con jailbreak es tan fácil como verificar la presencia de la carpeta /private/var/lib/apt/. Aunque esto no detecta usuarios instaladores, ahora la mayoría tiene instalado Cydia, Icy o RockYourPhone (todos usan apt)

Para detectar usuarios pirateados, la forma más fácil es verificar la presencia de un SignerIdentity clave en la aplicación Info.plist. Dado que los crackers avanzados pueden encontrar fácilmente las comprobaciones estándar de [[[NSBundle mainBundle] infoDictionary] objectForKey: @"SignerIdentity"], lo mejor es ocultar estas llamadas utilizando el tiempo de ejecución de Objective C disponible a través del #import <objc/runtime.h> o utilizar equivalentes alternativos.

10

Sólo para ampliar la respuesta del zakovyrya, podría utilizar el siguiente código:

if ([[[NSBundle mainBundle] infoDictionary] objectForKey: @"SignerIdentity"] != nil) { 
    // Jailbroken 
} 

Sin embargo, la persona jailbreaking su aplicación puede HexEdit su programa y, como tal, se podría editar la cadena @ "SignerIdentity" a lee @ "siNGeridentity" u otra cosa que devuelva nil, y así pase.

lo tanto, si se utiliza este (o cualquiera de las otras sugerencias de http://thwart-ipa-cracks.blogspot.com/2008/11/detection.html):

  • No hay que esperar que funcione siempre
  • No utilice esta información para romper/obstaculizar su aplicación en de cualquier forma (de lo contrario, tendrán una causa para hexeditarlo, por lo que su aplicación no sabrá que está jailbroken)
  • Probablemente sea una buena idea ofuscar este fragmento del código. Por ejemplo, puede poner la cadena invertida codificada en base64 en su código y luego decodificarla en la aplicación invirtiendo el proceso.
  • Validar su posterior validación en el código (por ejemplo, cuando dije SignerIdentity, lo hizo realmente decir SignerIdentity o siNGeridentity?)
  • No le diga a la gente en un sitio web público, como stackoverflow cómo lo hace
  • que tener en cuenta es solo una guía y no es infalible (¡ni a prueba de craqueo!): con gran poder viene una gran responsabilidad.
+0

Esto verifica SignerIdentity en el paquete de la aplicación, pero ¿qué pasa con el caso de que la aplicación no esté pirateada o algo así, pero el dispositivo es JailBroken, cómo lo detectaría? –

+0

Hazlo como una pregunta en SO y alguien responderá :) – Benjie

5

Para ampliar Yonel y los comentarios de Benjie anteriores:

1) Landon Fuller's method depender de verificación de cifrado, vinculado anteriormente por yonel, parece ser el único que aún no derrotado por herramientas de cracking automatizados. No estaría demasiado preocupado porque Apple cambie el estado del encabezado LC_ENCRYPTION_INFO pronto.Parece tener algunos efectos impredecibles en los iPhones con jailbreak (incluso cuando el usuario ha comprado una copia ...)

En cualquier caso, no tomaría ninguna acción precipitada contra un usuario en función de ese código ...

2) Para complementar el comentario de Benjie. ofuscación (una necesidad absoluta cuando se trata de cualquier valor de cadena en su código antipiratería): una forma similar pero quizás incluso más fácil es consultar siempre salificadahash versión del valor que está buscando. Por ejemplo (aunque esa comprobación ya no sea eficiente), debería verificar el nombre de clave de cada MainBundle como md5 (keyName + "alguna sal secreta") contra la constante apropiada ... Bastante básico, pero seguro para vencer cualquier intento de localizar el cuerda.

Por supuesto, esto requiere que pueda consultar indirectamente el valor que desea comparar (por ejemplo, al recorrer una matriz que lo contiene). Pero esto es más a menudo el caso.

+0

¿El método de Landon Fuller todavía es viable hoy en día, con iOS 7? –

Cuestiones relacionadas