style bar apple app ios iphone ipad jailbreak

ios - apple-mobile-web-app-status-bar-style



¿Cómo detectar que la aplicación se está ejecutando en un dispositivo liberado? (11)

Basado en la respuesta de @karim, hay una versión rápida ligeramente modificada:

func hasJailbreak() -> Bool { #if arch(i386) || arch(x86_64) println("Simulator") return false #else var fileManager = NSFileManager.defaultManager() if(fileManager.fileExistsAtPath("/private/var/lib/apt")) { println("Jailbroken Device") return true } else { println("Clean Device") return false } #endif }

Acabo de lanzar mi aplicación para iOS, pero no estoy seguro de cómo hacer que mi aplicación no sea utilizada por jailbrakers.

¿Puedo hacer algo para evitar que mi aplicación funcione en dispositivos con jailbreak?


Compruebe estos caminos

+ (BOOL)isJailBroken { #ifdef TARGET_IPHONE_SIMULATOR return NO; #endif NSArray *paths = @[@"/bin/bash", @"/usr/sbin/sshd", @"/etc/apt", @"/private/var/lib/apt/", @"/Applications/Cydia.app", ]; for (NSString *path in paths) { if ([self fileExistsAtPath:path]) { return YES; } } return NO; } + (BOOL)fileExistsAtPath:(NSString *)path { FILE *pFile; pFile = fopen([path cStringUsingEncoding:[NSString defaultCStringEncoding]], "r"); if (pFile == NULL) { return NO; } else fclose(pFile); return YES; }

Además, puede consultar https://github.com/OneSignal/OneSignal-iOS-SDK/blob/master/iOS_SDK/OneSignalJailbreakDettection/OneSignalJailbreakDetection.m


Hay muchas formas de encontrar los dispositivos jailbreak. chequear la técnica de Cydia no funcionará si un hacker habilidoso cambia la ruta de la aplicación.

Una buena manera de verificarlo sería ver si podemos modificar un archivo en alguna otra ubicación fuera del paquete de la aplicación.

NSError *error; NSString *stringToBeWritten = @"This is a test."; [stringToBeWritten writeToFile:@"/private/jailbreak.txt" atomically:YES encoding:NSUTF8StringEncoding error:&error]; if(error==nil){ //Device is jailbroken return YES; } else { //Device is not jailbroken [[NSFileManager defaultManager] removeItemAtPath:@"/private/jailbreak.txt" error:nil]; }

Encuentre más técnicas en la siguiente URL

http://highaltitudehacks.com/2013/12/17/ios-application-security-part-24-jailbreak-detection-and-evasion/


Incluso si su dispositivo tiene jailbreak, las aplicaciones ipa solo pueden tener acceso a sus propios cuadros de arena, por lo que si el dispositivo tiene jailbreak o no, su método devolverá NO :) Busque otra manera También si intenta acceder a alguna parte, pero su aplicación sandbox publishing Appstore puede encabezar problemas


Intenta encontrar un archivo creado por cydia o por jailbreak. O intente escribir en un archivo fuera de la caja negra de la aplicación. Si logras hacer eso, el dispositivo está en peligro / jailbroken :)

- (BOOL)jailbroken { NSFileManager * fileManager = [NSFileManager defaultManager]; return [fileManager fileExistsAtPath:@"/private/var/lib/apt/"]; }


No hay forma de detectar si el dispositivo tiene jailbreak.

Considere que incluso si lo hubiera, el dispositivo ya ha sido liberado, lo que significa que es posible la ejecución de código arbitrario, y el jailbreaker simplemente modificará cualquier método de detección que usaría para indicar que el dispositivo no ha sido liberado.

referencia: https://forums.developer.apple.com/thread/43073

los créditos van al personal de Apple que respondió esta misma pregunta


Puede detectar a través del código que si la aplicación se está ejecutando en un dispositivo roto de cárcel o no. De esta forma, puede mostrar una alerta y cerrar la aplicación. Puedes hacer lo que quieras hacer. Aquí hay un tutorial para ello:

http://thwart-ipa-cracks.blogspot.com/2008/11/detection.html

y aquí hay una publicación de :

¿Cómo puedo detectar que una aplicación de iOS se esté ejecutando en un teléfono liberado?

Además, si desea una solución completa, puede ver en el código de Tapjoy SDK. Están detectando iPhone liberado. Aquí está la URL de Tapjoy https://www.tapjoy.com/


Puede detectar si un dispositivo es jailBroken o no, verificando lo siguiente

  1. Cydia está instalado
  2. Verificar algunas de las rutas del sistema
  3. Puede realizar un control de integridad de sandbox
  4. Realizar la verificación de enlace simbólico
  5. Verifique si crea y escribe archivos fuera de su Sandbox

Hay una biblioteca de código abierto que he creado a partir de varios artículos y libros, pruébelo.


SWIFT 3:

func hasJailbreak() -> Bool { #if arch(i386) || arch(x86_64) print("Simulator") return false #else return FileManager.default.fileExistsAtPath("/private/var/lib/apt") #endif }


-(BOOL) isJailbroken { #if TARGET_IPHONE_SIMULATOR return NO; #else FILE *f = fopen("/bin/bash", "r"); if (errno == ENOENT) { // device is NOT jailbroken fclose(f); NSLog(@"no"); return NO; } else { // device IS jailbroken fclose(f); NSLog(@"yes"); return YES; } #endif }


/** Detect that the app is running on a jailbroken device or not - returns: bool value for jailbroken device or not */ public class func isDeviceJailbroken() -> Bool { #if arch(i386) || arch(x86_64) return false #else let fileManager = FileManager.default if (fileManager.fileExists(atPath: "/bin/bash") || fileManager.fileExists(atPath: "/usr/sbin/sshd") || fileManager.fileExists(atPath: "/etc/apt")) || fileManager.fileExists(atPath: "/private/var/lib/apt/") || fileManager.fileExists(atPath: "/Applications/Cydia.app") || fileManager.fileExists(atPath: "/Library/MobileSubstrate/MobileSubstrate.dylib") { return true } else { return false } #endif }