2009-05-24 22 views
8

Sto provando a inserire il codice antipirateria nella mia app. La precedente risposta a questo (che non posso collegare a causa del mio stato membro - fa schifo) può essere facilmente neutralizzata, poiché la stringa "SignerIdentity" può essere cercata e sostituita nel binario usando un editor esadecimale.Ottieni dimensione file di info.plist per prevenire la pirateria

Invece, controllare il file Size del file info.plist e confrontarlo con un valore di riferimento sembra più solido (dal momento che info.plist viene modificato qua e là quando si rompe l'app). Come potrei farlo? Ho provato quanto segue ma i registri 0.

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

risposta

7

si potrebbe evitare che i cracker noobish di trovare riferimenti a "SignerIdentity" nel codice applicando ROT13 o un algoritmo di oscuramento semplice simile http://en.wikipedia.org/wiki/ROT13

Dopo aver applicato ROT13 "SignerIdentity" diventerebbe "FvtareVqragvgl".

In ogni caso, la risposta alla tua domanda (come si ottiene la dimensione del file 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]); 
    }   
} 

Si tenga anche presente che la dimensione (in byte) del Info.plist nel progetto Xcode la directory e Info.plist all'interno del pacchetto potrebbero essere diverse. Probabilmente vorrai costruire il gioco una volta, poi guardare le dimensioni di <your app bundle.app>/Info.plist e quindi aggiornare il tuo codice antipirateria.

+0

Il problema è che il pirata potrebbe modificare quella stringa "FvtareVqragvgl" in qualcos'altro e che controllerebbe un'altra chiave nel file info.plist .. che probabilmente sarà null. L'attributo filesize è paragonato a un int quindi non c'è davvero un modo semplice per cercarlo nel binario. – samvermette

+0

Grazie per la risposta! Aggiornamento – samvermette

+0

: now // \t NSDictionary * fileAttributes = [fileManager fileAttributesAtPath: pathP traverseLink: YES]; è deprecato ... utilizzare: -> ... \t NSDictionary * fileAttributes = [fileManager attributesOfItemAtPath: pathP errore: NULL]; ... invece – meronix

5

Non ho mai programmato per l'iPhone, ma non potevi semplicemente prendere un hash di quel file e confrontarlo con un riferimento, magari salendo il valore hash per impedire che qualcuno cambiasse l'hash di riferimento in quello nuovo?

2

che il codice ha ancora molti omaggi:

l'Info.plist stringa è facile da trovare. NSFileSize è anche molto sospettoso ....

2

Come detto qui Determining if an iPhone is Jail broken Programmatically sembra che alcune delle app crackizzate più recenti installate tramite install0us non abbiano modificato il loro info.plist. (almeno info.plist non contiene alcuna chiave firmatario). Come possiamo rilevare il crack in questo caso?

+0

hai provato a confrontare le 2 dimensioni del file info.plist? – samvermette

+0

No, ma posso fare qualche ipotesi sulla dimensione di info.plist una volta scaricato dall'appstore da un utente iPhone? Sarebbe lo stesso di quello in cui lo ho caricato su appStore (tramite iTunes Connect)? Il fatto che questo file sia a volte in xml, a volte come un file binario non mi dà un'immagine chiara dell'intero flusso per questo file:/ – yonel

+0

Il file dovrebbe essere quello nel tuo pacchetto .app della build di distribuzione. Non sono sicuro che Apple cambi qualcosa nel file info.plist dopo aver inviato la tua app ... – samvermette