2011-01-18 10 views
12

Estoy creando un servicio de listas negras para aplicaciones de iPhone crackeadas y tengo curiosidad si me olvidé de un método para detectar aplicaciones crackeadas.Cómo detectar una aplicación de iPhone agrietada y un dispositivo liberado (diferentes métodos)

En el momento siguientes métodos de detección aplicación de crack están disponibles para el servicio:

  1. comprobando el tamaño plist
  2. comprobar la identidad firmante
  3. comprobar si binario es Crypted (no estoy seguro si esto funciona correctamente ya que ninguna aplicación rajada se detectó de esta manera)
  4. marcando fecha de modificación de info.plist contra la fecha de modificación del paquete (no estoy seguro si esto está trabajando - código utilizado como: http://snippie.net/snip/f7530ff2 para hacer eso)

también me pregunto si es posible comprobar si el dispositivo es jailbreak ? Esto ayudaría, también, porque el servicio funcionará de manera muy parecida a una lista negra de spam y el jailbreak podría usarse para aumentar el puntaje.

También he incluido un honeypot, que me muestra que las herramientas utilizadas por los crackers eliminan algunas de las comprobaciones que hago. Por ejemplo, el control plist para el tamaño o la identidad del firmante.

Mi pregunta es ahora:

  • ¿Hay más controles "buenas" que debo usar?

y

  • ¿Hay una manera de detectar Jailbreak?

¡Gracias por la ayuda!

+2

Muchas técnicas se discuten en esta cuestión para detectar aplicaciones agrietados: [La reducción de la piratería de aplicaciones para el iPhone] (http://stackoverflow.com/questions/846309/ reducción-piratería-de-aplicaciones-iphone). En lo que respecta a la detección de jailbreak, consulte aquí: [¿Cómo puedo detectar que se está ejecutando una aplicación SDK en un teléfono con jailbreak?] (Http: // stackoverflow.com/questions/413242/how-do-i-detect-that-an-sdk-app-is-running-on-a-jailbroken-phone) –

+0

Gracias Brad, estos son buenos recursos. – Robse

Respuesta

18

NUNCA intentes y bloquees los dispositivos liberados de jailbreak de tu aplicación, solo agrietados. Si bloquea los dispositivos con jailbreak, se verá obligado a utilizar una versión parchada con todas las comprobaciones eliminadas.
También TODOS mis dispositivos tienen jailbreak así que si un desarrollador bloquea dispositivos jailbreak, tendría que ignorar sus aplicaciones. Más del 10% de todos los iDevices tienen jailbreak así que esta es una muy mala idea.

EDIT: Como estoy obteniendo muchos votos negativos para esto, publicaré algunos métodos para detectar un jailbreak.

- (BOOL)fileExistsAtPath:(NSString *)path{ 
    NSLog(@"Check if file '%@' exists", path); 

    struct stat buffer; 
    return stat([path UTF8String], &buffer) == 0; 
} 

- (BOOL)jailbroken{ 
    return ([self fileExistsAtPath:@"/Applications/Cydia.app"]); 
} 
+3

O se verán obligados a eliminar el jailbreak, deshabilitar la red y dejar de usar aplicaciones de la App Store. El 9% de este 10% se jailbroken debido a la piratería ... – Robse

+6

No entiendo a los que te votan. Yo mismo, jailbroke para probar mi aplicación para la protección contra la piratería. ¿Van a enviarme esos tipos a votar ahora a Guantánamo? –

+6

Conozco a muchas personas que hacen Jailbreak solo para agregar ajustes y aplicaciones específicas que no están permitidas en la App Store. Estas personas aún optan por comprar aplicaciones de la App Store. – MattyG

7
-(IBAction)rootCheck:(id)sender { 

    NSArray *jailbrokenPath = [NSArray arrayWithObjects: 
           @"/Applications/Cydia.app", 
           @"/Applications/RockApp.app", 
           @"/Applications/Icy.app", 
           @"/usr/sbin/sshd", 
           @"/usr/bin/sshd", 
           @"/usr/libexec/sftp-server", 
           @"/Applications/WinterBoard.app", 
           @"/Applications/SBSettings.app", 
           @"/Applications/MxTube.app", 
           @"/Applications/IntelliScreen.app", 
           @"/Library/MobileSubstrate/DynamicLibraries/Veency.plist", 
           @"/Applications/FakeCarrier.app", 
           @"/Library/MobileSubstrate/DynamicLibraries/LiveClock.plist", 
           @"/private/var/lib/apt", 
           @"/Applications/blackra1n.app", 
           @"/private/var/stash", 
           @"/private/var/mobile/Library/SBSettings/Themes", 
           @"/System/Library/LaunchDaemons/com.ikey.bbot.plist", 
           @"/System/Library/LaunchDaemons/com.saurik.Cydia.Startup.plist", 
           @"/private/var/tmp/cydia.log", 
           @"/private/var/lib/cydia", nil]; 

    NSString *rooted; 
    for(NSString *string in jailbrokenPath) 
     if ([[NSFileManager defaultManager] fileExistsAtPath:string]) 
      [email protected]"y"; 
     else 
      [email protected]"n"; 

    NSLog(@"%@", rooted); 
} 

código de ejemplo: http://www.evernote.com/shard/s13/sh/e45f27ee-3dd5-4eb1-9f56-1981cdd3286b/bc156eb773315647c13c2c7ee4191866

+2

Agradable. Pero vaya, ese debe ser el código antiguo. RockApp fue comprado por Cydia hace más de un año y hechizo ha sido abandonado por mucho más tiempo (+ blackra1n fue el jailbreak para 3.1). –

+1

Además, cuando se imprime 'rooteado', solo verá el resultado de' [[NSFileManager defaultManager] fileExistsAtPath: @ "/ private/var/lib/cydia"]? @ "y": @ "n"; ', es decir, el último elemento de la matriz. Todos los demás resultados son ignorados/sobrescritos/descartados por este código. – Sam

Cuestiones relacionadas