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
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
- Cydia está instalado
- Verificar algunas de las rutas del sistema
- Puede realizar un control de integridad de sandbox
- Realizar la verificación de enlace simbólico
- 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
}