2009-05-10 12 views
62

Quali sono i metodi accettati per ridurre la pirateria dell'applicazione iPhone, che non violano il processo di valutazione di Apple?Riduzione della pirateria delle applicazioni iPhone

Se la mia applicazione "telefona a casa" per fornire l'ID univoco del dispositivo su cui viene eseguito, quali altre informazioni dovrei raccogliere (ad esempio, l'ID Apple utilizzato per acquistare l'applicazione) per creare un token di registrazione valido che autorizza uso dell'applicazione? Allo stesso modo, quale codice utilizzerei per accedere a quei dati extra?

Quali sembrano essere i migliori approcci tecnici disponibili per questo problema, al momento attuale?

(Si prega di non non-programmazione risposte su come la pirateria è inevitabile, ecc so che la pirateria è inevitabile. Sono interessato a risposte a base di programmazione- che discutere di come ridurre esso. Grazie in anticipo per la vostra comprensione.)

+36

Amo le domande che specificano in anticipo quale risposta vogliono sentire. È così che ottieni le risposte migliori. ;) – jalf

+2

Solo cercando di tagliare deragliamenti filosofici all'inizio. Le risposte tecniche sono ovviamente preferibili. –

+0

@Alex è più facile evitare le risposte "non puoi farlo" se non usi una terminologia come "sconfiggere" invece di "mitigare" –

risposta

48

UPDATE

prega visit and read

Grazie alla chpwn nei commenti.

Il codice è troppo vecchio! - 11 maggio 2009

Per ora c'è un modo più semplice per rilevare se l'applicazione iPhone è stata decifrata per l'uso della pirateria. Ciò non comporta il controllo degli ID univoci di iPhone rispetto a un elenco di ID accettati.

Attualmente non ci sono tre cose cracker fanno:

  1. modificare il file Info.plist
  2. decodificare l'Info.plist da binario a UTF-8 o ASCII
  3. Aggiungere una coppia di chiavi per Info.plist {SignerIdentity, di Apple iPhone OS Firma Applicazione}

L'ultimo è più facile da controllare con questo codice:

NSBundle *bundle = [NSBundle mainBundle]; 
NSDictionary *info = [bundle infoDictionary]; 
if ([info objectForKey: @"SignerIdentity"] != nil) 
{ /* do something */ } 

Generalmente non hanno SignerIdentity in una qualsiasi delle applicazioni di App Store che costruiamo in modo controllo per nil quindi eseguire le istruzioni set dovrebbero rendere più difficile per i cracker e pirati.

Non posso prendermi il merito di questo quindi per favore visita How to Thwart iPhone IPA Crackers. Ci sono un sacco di informazioni sulla pirateria su iPhone e su come frenarlo.

+0

Grazie per aver risposto alla domanda che ho posto. –

+3

@David Domanda veloce che nessuno può avere la risposta a: Se questa è una correzione facile (potenzialmente di 5 righe), perché non è stata implementata più spesso? C'è uno svantaggio di cui sei a conoscenza? La maggioranza VAST delle app nell'app store è stata danneggiata e disponibile per il download. – mmc

+7

È molto semplice per il cracker controllare la stringa letterale di SignerIdentity o la chiamata del selettore di InfoDictionary. Probabilmente vuoi oscurarli. Anche la parte "fai qualcosa" è complicata: non puoi fallire subito, poiché ciò metterebbe in allarme il cracker.Quindi devi fallire con un grande ritardo (magari dare loro una prova di 30 giorni, e poi chiedere di comprare una copia legittima). Vedi, rendere questo utile non è più così semplice. –

5

Come indicato da Andrey Tarantsov nei commenti, cercando la stringa "SignerIdentity" nel file binario (utilizzando un'app come HexEdit) e sostituirla è piuttosto semplice.

Puoi codificare quella stringa, ma poi tutto quello che devi fare è cambiarne uno e l'app non cercherà più la chiave "SignerIdentity" ma per qualche altra chiave che probabilmente non esiste (quindi è nullo). Essendo nullo questa chiave, l'app pensa che non sia incrinata (dal momento che SignerIdentity dovrebbe essere nullo se l'app non è incrinata).

Invece, preferirei controllare la dimensione di info.plist e confrontarla con un valore di riferimento.Ho notato che le build di Simulator e Devices non hanno la stessa dimensione del file info.plist. Lo stesso vale per le build di Debug, Release e Distribution. Pertanto, assicurati di impostare il valore di riferimento utilizzando la dimensione del file info.plist per Device Distribution Build.

Come cercare il filesize at launch:

-1

Controllare iTunesMetadata.plist per la data di Purchace come a volte, quando un app è incrinato, tale data è cambiato a qualcosa di scandaloso.

Verificare inoltre se esiste il campo del nome di acquisitore. Nella mia esperienza con le app di cracking per uso personale, di solito viene rimosso. Se qualcuno sa come funziona la protezione anti-dump di Temple Run, è possibile utilizzarla insieme a una protezione che PoedCrackMod non è in grado di ottenere (google poedCrackMod creare account hackulo.us, andare su dev center cercare poedCrackMod, installarlo su iDevice) .

Frizione che non crepa le cose con Temple Run come protezione, ha una funzione chiamata OverDrive destinata a silenziare il rilevamento delle incrinature di un'app. poedCrackMod ha LamestPatch, che non è buono. Anche poedCrackMod è uno script di bash open source che può essere decodificato. Per ricapitolare, hai un'app con protezione dalla copia che non può essere aggirata con la frizione/overdrive ma che può essere rotta con poedCrackMod. Tuttavia, poedCrackMod non può eludere i controlli di pirateria in app dell'app. È difficile correggere manualmente i controlli di integrità nel file eseguibile dell'app. Quindi la tua app è difficile da decifrare.

0

Sembra salvare il checksum MD5 di Plist e controllare che CryptID funzioni bene fino a qualche tempo.

Problemi correlati