2009-05-24 14 views
8

Estoy tratando de poner código antipiratería en mi aplicación. La respuesta anterior a esto (a la que no puedo vincular debido a mi estado de miembro - apesta) se puede contrarrestar fácilmente, ya que la cadena "SignerIdentity" se puede buscar y reemplazar en el binario usando un editor hexadecimal.Obtener fileSize de info.plist para evitar la piratería

En su lugar, comprobar el archivo Tamaño del archivo info.plist y compararlo con un valor de referencia suena más sólido (ya que el info.plist se está modificando aquí y allá al descifrar la aplicación). ¿Como podría hacerlo? He intentado lo siguiente, pero los registros de 0.

NSBundle *bundle = [NSBundle mainBundle]; 
NSDictionary *mainDictionary = [bundle infoDictionary]; 
NSLog(@"%d", [mainDictionary fileSize]); 

Respuesta

7

podría prevenir que las galletas noobish de encontrar referencias a "SignerIdentity" en su código mediante la aplicación de un algoritmo ROT13 o oscurecimiento sencilla similares http://en.wikipedia.org/wiki/ROT13

Después de aplicar ROT13 , "SignerIdentity" se convertiría en "FvtareVqragvgl".

De todos modos, la respuesta a su pregunta (¿cómo se obtiene el tamaño del archivo Info.plist):

NSBundle *bundle = [NSBundle mainBundle]; 
NSString* bundlePath = [bundle bundlePath]; 

NSFileManager *fileManager = [NSFileManager defaultManager]; 

NSString* path = [NSString stringWithFormat:@"%@/Info.plist", bundlePath ]; 

NSDictionary *fileAttributes = [fileManager attributesOfItemAtPath:path 
                  error:NULL]; 

if (fileAttributes != nil) { 
    NSNumber *fileSize; 

    if (fileSize = [fileAttributes objectForKey:NSFileSize]) { 
     NSLog(@"File size: %qi\n", [fileSize unsignedLongLongValue]); 
    }   
} 

También hay que tener en cuenta que el tamaño (en bytes) de la Info.plist en su proyecto Xcode directorio y el Info.plist dentro del paquete pueden diferir. Probablemente quiera construir el juego una vez, luego mire el tamaño de <your app bundle.app>/Info.plist y luego actualice su código antipiratería.

+0

La cosa es que el pirata podría cambiar esa cadena "FvtareVqragvgl" por otra cosa y eso verificaría otra clave en el info.plist ... que probablemente sea nula. El atributo de tamaño de archivo se compara con un int, por lo que realmente no hay una manera fácil de buscarlo en el binario. – samvermette

+0

¡Gracias por la respuesta! – samvermette

+0

actualización: ahora // \t NSDictionary * fileAttributes = [fileManager fileAttributesAtPath: pathP traverseLink: YES]; está en desuso ... use: -> ... \t NSDictionary * fileAttributes = [fileManager attributesOfItemAtPath: pathP error: NULL]; ... en su lugar – meronix

5

Nunca he programado para el iPhone, pero ¿no podría simplemente tomar un hash de ese archivo y compararlo con una referencia, posiblemente salando el valor hash para evitar que alguien simplemente cambie el hash de referencia por el nuevo?

2

que el código tiene todavía muchos regalos:

la Info.plist cadena es fácil de encontrar. NSFileSize también es muy sospechoso ....

2

Como dije aquí Determining if an iPhone is Jail broken Programmatically parece que algunas de las aplicaciones rajadas más recientes instaladas a través de install0us no tienen su info.plist modificado. (al menos el info.plist no contiene ninguna clave de signeridentity). ¿Cómo podríamos detectar la grieta en un caso así?

+0

¿trataste de comparar los 2 tamaños de archivo info.plist? – samvermette

+0

No, pero ¿puedo hacer alguna suposición sobre el tamaño de info.plist una vez descargado de la tienda de aplicaciones por un usuario de iPhone? ¿Sería el mismo que cuando lo cargué en la tienda de aplicaciones (a través de iTunes Connect)? El hecho de que este archivo algunas veces esté en xml, a veces como un binario no me da una imagen clara del flujo total de este archivo:/ – yonel

+0

El tamaño del archivo sería el que está en su paquete .app de su compilación de distribución. No estoy seguro de si Apple cambia algo en el archivo info.plist después de enviar su aplicación ... – samvermette

Cuestiones relacionadas