¿Cómo se determina (mediante programación) si un iPhone / iPod es:
- Cárcel rota
- Ejecutando una copia pirateada 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 bibliotecas?
iphone
objective-c
ios
cocoa-touch
jailbreak
Richard Stelling
fuente
fuente
Respuestas:
Esta es una de las formas de detectar si su aplicación fue descifrada.
En resumen: el craqueo generalmente requiere cambiar el Info.plist. Dado que es un archivo normal al que tiene acceso, es bastante fácil determinar dichos cambios.
fuente
Detectar un teléfono con jailbreak es tan fácil como verificar la presencia de una
/private/var/lib/apt/
carpeta. Aunque esto no detecta a los usuarios de solo instalador, la mayoría ya ha instalado Cydia, Icy o RockYourPhone (todos los cuales usan apt)Para detectar usuarios pirateados, la forma más sencilla es comprobar la presencia de una
SignerIdentity
clave en el archivo de su aplicaciónInfo.plist
. Dado que los crackers avanzados pueden encontrar fácilmente las[[[NSBundle mainBundle] infoDictionary] objectForKey: @"SignerIdentity"]
comprobaciones estándar , es mejor ocultar estas llamadas utilizando el tiempo de ejecución de Objective C disponible a través de#import <objc/runtime.h>
o utilizar equivalentes alternativos.fuente
Solo para ampliar la respuesta de zakovyrya, puede usar el siguiente código:
if ([[[NSBundle mainBundle] infoDictionary] objectForKey: @"SignerIdentity"] != nil) { // Jailbroken }
SIN EMBARGO, la persona que hace jailbreak a su aplicación puede editar su programa en hexadecimal y, como tal, podría editar la cadena @ "SignerIdentity" para que lea @ "siNGeridentity" o cualquier otra cosa que devuelva nil, y así pasar.
Entonces, si usa esto (o cualquiera de las otras sugerencias de http://thwart-ipa-cracks.blogspot.com/2008/11/detection.html ):
fuente
Para ampliar los comentarios de Yonel y Benjie anteriores:
1) El método de Landon Fuller que se basa en la verificación de cifrado, vinculado anteriormente por yonel, parece ser el único que aún no ha sido derrotado por herramientas de craqueo automatizadas. No me preocuparía demasiado que Apple cambie el estado del encabezado LC_ENCRYPTION_INFO en el corto plazo. Parece tener algunos efectos impredecibles en iphones con jailbreak (incluso cuando el usuario ha comprado una copia ...)
En cualquier caso, no tomaría ninguna acción precipitada contra un usuario basado en ese código ...
2) Para complementar el comentario de Benjie re. 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 verificar siempre una versión hash con sal del valor que está buscando. Por ejemplo (aunque esa comprobación ya no sea eficaz), comprobaría el nombre de la clave de cada MainBundle como md5 (keyName + "some secret salt") con la constante apropiada ... Bastante básica, pero seguro que anula cualquier intento de localizar cuerda.
Por supuesto, esto requiere que pueda consultar indirectamente el valor que desea comparar (por ejemplo, revisando una matriz que lo contiene). Pero este es el caso más frecuente.
fuente