2010-10-12 16 views
13

Stavo discutendo di questo con alcuni amici e abbiamo iniziato a chiederci questo. Qualcuno potrebbe ottenere l'accesso a URL o altri valori contenuti nel codice effettivo dell'obiettivo-c dopo aver acquistato la tua app?Quanto sono sicure le informazioni contenute nel codice compilato dall'app iPhone?

La nostra sensazione iniziale era no, ma mi chiedevo se qualcuno là fuori avesse una conoscenza definitiva in un modo o nell'altro?

So che i file .plist sono prontamente disponibili.

Esempi possono essere le cose come:

valori -url tenuti in una stringa

chiave e

-API valori segreti

+9

Le persone DRM hanno cercato di risolvere questo problema da anni, ma quello che si riduce è "Voglio solo che il dispositivo sia in grado di leggerlo ma non le persone a leggerlo", che è lo stesso di "Voglio le persone sono in grado di leggerlo, semplicemente non voglio che siano in grado di leggerlo ". L'unica cosa che puoi veramente fare è offuscare le stringhe "rimescolandole" con una sorta di algoritmo come rot13, o forse qualcosa di più avanzato, ma se usi la crittografia devi immagazzinare la chiave da qualche parte nell'eseguibile. – Nimrod

risposta

22

Sì, corde e le informazioni sono facilmente estraibili da applicazioni compilate utilizzando lo strumento strings (see here), ed è addirittura abbastanza semplice estrarre informazioni sulla classe usando class-dump-x (check here).

Solo qualche spunto di riflessione.

Modifica: un modo facile, anche se insicuro, di tenere nascoste le informazioni segrete o di ridurle in piccoli pezzi.

Il seguente codice:

NSString *string = @"Hello, World!"; 

produrrà "Ciao, mondo!" usando lo strumento strings. Scrivere il codice come questo:

NSString *string = @"H"; 
string = [stringByAppendingString:@"el"]; 
string = [stringByAppendingString:@"lo"]; 
... 

mostrerà i caratteri digitati, ma non necessariamente in ordine.

Ancora: facile da fare, ma non molto sicuro.

+1

grazie per le informazioni +1 – dredful

+5

anche solo suggerendo la sicurezza anche se l'oscurità dovrebbe farti avere un -1. Dovresti dire alla gente che quello che stanno cercando di realizzare è una vulnerabilità. Le false speranze portano le persone a violare. – rook

+0

@Rook: a volte l'oscurità è appropriata, ad es. se stai nascondendo i codici cheat in un gioco, qualcosa di più sicuro sarebbe eccessivo. ANCHE: Se è così che ti senti, come mai non l'hai svalutato? – benzado

12

Quando si acquista un'app, questa viene salvata sul disco rigido come "FooBar.ipa"; quel file è in realtà in formato Zip. È possibile decomprimerlo e ispezionare il contenuto, inclusa la ricerca di stringhe nell'eseguibile. Provalo! I valori costanti nel codice non sono compressi, crittografati o codificati in alcun modo.

+0

grazie per le informazioni +1 – dredful

1

So che questo è già stato risposto, ma voglio dare il mio suggerimento anche.

Ancora una volta, ricorda che tutte le tecniche di offuscamento non sono mai al 100% sicure, e quindi non sono le migliori, ma spesso sono "abbastanza buone" (a seconda di cosa vuoi offuscare). Ciò significa che un cracker determinato sarà comunque in grado di leggere le tue stringhe, ma queste tecniche potrebbero fermare il "casual cracker".

Il mio altro suggerimento è quello di "criptare" le stringhe con un semplice XOR. Questo è incredibilmente veloce e non richiede alcuna autorizzazione se si sta vendendo l'app attraverso l'App Store (non rientra nelle categorie di algoritmi che richiedono l'autorizzazione per l'esportazione).

Ci sono molti frammenti in giro per fare un XOR in Cocoa, vedi ad esempio: http://iphonedevsdk.com/forum/iphone-sdk-development/11352-doing-an-xor-on-a-string.html

La chiave si utilizza potrebbe essere qualsiasi stringa, che si tratti di una sequenza senza senso di caratteri/byte o qualcosa di significativo per confondere i lettori (per esempiousa il nome di metodi, come "stringWithContentsOfFile: usedEncoding: error:").

Problemi correlati