2011-01-18 14 views
12

Sto costruendo un servizio di blacklist per app di iPhone incrinate e sono curioso di sapere se ho perso un metodo per rilevare app incrinate.Come rilevare un'app per iPhone incrinata e un dispositivo jailbroken (metodi diversi)

Nel momento seguente i metodi di rilevazione app crepa sono disponibili per il servizio:

  1. controllando dimensioni plist
  2. controllo firmatario identità
  3. controllando se binario è criptate (non è sicuro se funziona correttamente poiché non è stata rilevata alcuna applicazione in questo modo)
  4. controllo modificato la data di info.plist contro data di modifica del pacchetto (non so se questo sta lavorando - codice utilizzato come: http://snippie.net/snip/f7530ff2 per farlo)

mi chiedo anche se è possibile controllare se il dispositivo è jailbroken ? Ciò aiuterebbe anche, perché il servizio funzionerà molto come una lista nera di spam e il jailbreak potrebbe essere usato per aumentare il punteggio.

Ho anche incluso un honeypot, che mi mostra che gli strumenti utilizzati dai cracker eliminano alcuni dei controlli che faccio. Ad esempio il plist verifica la dimensione o l'identità del firmatario.

La mia domanda è ora:

  • Ci sono più controlli "buoni" devo usare?

e

  • C'è un modo per rilevare Jailbreak?

Grazie per qualsiasi aiuto!

+2

Molte tecniche sono discussi in questa domanda per rilevare le applicazioni incrinate: [Ridurre la pirateria di applicazioni per iPhone] (http://stackoverflow.com/questions/846309/ riducendo-pirateria-di-iphone-applicazioni). Per quanto riguarda il rilevamento del jailbreak, vedere qui: [Come si rileva che un'app SDK è in esecuzione su un telefono jailbroken?] (Http: // StackOverflow.it/questions/413242/how-do-i-detect-che-an-sdk-app-è-running-on-a-jailbroken-phone) –

+0

Grazie Brad, queste sono buone risorse. – Robse

risposta

18

MAI provare a bloccare i dispositivi jailbroken dall'utilizzo della tua app, solo quelli incrinati. Se blocchi i dispositivi jailbroken, saranno costretti a utilizzare una versione con patch con tutti i controlli rimossi.
Anche TUTTI i miei dispositivi sono jailbroken, quindi se uno sviluppatore blocca i dispositivi jailbroken dovrei ignorare le loro app. Oltre il 10% di tutti gli iDevice sono jailbroken quindi questa è una pessima idea.

EDIT: Dato che sto ottenendo un sacco di voti bassi, pubblicherò alcuni metodi per rilevare 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

Oppure saranno costretti a rimuovere il jailbreak, disabilitare la rete e smettere di usare app da App Store. Il 9% di questo 10% è jailbroken a causa della pirateria ... – Robse

+6

Non capisco quelli giù votandoti. Io stesso, ho effettuato il jailbreak per testare la mia app per la protezione dalla pirateria. Quelli che votano giù mi manderanno a Guantanamo adesso? –

+6

Conosco molte persone che effettuano il jailbreak solo per aggiungere tweaks e app specifiche non consentite nell'App Store. Queste persone scelgono ancora di acquistare app dall'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); 
} 

codice di esempio: http://www.evernote.com/shard/s13/sh/e45f27ee-3dd5-4eb1-9f56-1981cdd3286b/bc156eb773315647c13c2c7ee4191866

+2

Bello. Ma wow che deve essere un vecchio codice! RockApp è stato acquistato da Cydia più di un anno fa e il ghiaccio è stato abbandonato per molto più tempo (+ blackra1n è stato il jailbreak per 3.1). –

+1

Inoltre, quando viene stampato 'rooted', si vedrà solo il risultato di' [[NSFileManager defaultManager] fileExistsAtPath: @ "/ private/var/lib/cydia"]? @ "y": @ "n"; ', cioè l'ultimo elemento dell'array. Tutti gli altri risultati vengono ignorati/sovrascritti/scartati da questo codice. – Sam

Problemi correlati