2010-03-14 16 views
5

Sto facendo un'applicazione nel cacao e volevo vedere se alcune stringhe erano facilmente accessibili così ho eseguito OTX su di esso e purtroppo tutto il mio codice è stato trovato. C'è un metodo che posso usare per rendere il mio codice più "sicuro" o almeno criptare/nascondere le stringhe? Il motivo per cui voglio crittografare la stringa è che si tratta di una password per un server. Non ho bisogno che sia davvero sicuro, ma non voglio che la password sia così facile da trovare.Scrivi codice cacao sicuro

Grazie per qualsiasi aiuto

+0

cos'è questa cosa OTX che hai menzionato e come usarla? –

risposta

6

1. Evitare di objC in codice sicuro.

Poiché il sistema di classi di ObjC dipende in gran parte dalla riflessione in fase di esecuzione, l'intera interfaccia deve essere inclusa insieme all'eseguibile. Ciò consente a strumenti come class-dump di ripristinare facilmente l'interfaccia @ source del file binario.

Pertanto, le funzioni di codice protetto devono essere scritte come una funzione C, non un metodo ObjC.

2. Utilizzare strip.

Per impostazione predefinita, il compilatore manterrà tutti i simboli privati ​​(che consente la traccia di stack per essere più leggibile). È possibile utilizzare strip per eliminare tutti questi simboli.

3. Offuscamento.

I passaggi precedenti possono nascondere solo la logica del codice. Ma se la password è una stringa costante, è immediatamente visibile utilizzando l'utilità strings. Si può offuscare questo costruendo la password in runtime (ad esempio, memorizzare la password codificata in ROT-13 nel file.)

4. O semplicemente modificare il progetto.

Non importa quanto sia buono il tuo sistema di protezione, dato che l'hacker ha il controllo totale sulla propria macchina, con un tempo sufficiente, vince sempre. È meglio rivedere il tuo design, ad esempio perché la password deve venire con l'eseguibile? O perché è necessaria anche una password globale?

+0

Grazie per la risposta. Non sono un programmatore molto esperto, ma come lo cambierei in una funzione C? – nosedive25

+1

@happy: come invece di usare '+ (NSString *) getPassword;', si crea 'static NSString * getPassword (void);' al di fuori della classe. – kennytm

8

È necessario mai inserire una password in un file eseguibile.

Questo è come mettere la password su una nota adesiva accanto al monitor. Se un hacker malintenzionato ha la tua applicazione, alla fine possono estrarre la password indipendentemente dalla lingua o dall'API che usi per scriverlo.

Ad esempio, se so che l'applicazione si connette a un server protetto da password ma l'applicazione non richiede mai una password, allora so che hai commesso l'errore di includere la password. Per trovare la password, ho bisogno solo di monitorare il funzionamento del programma per vedere quali aree del codice sono attive nel momento in cui si connette al server. Questo mi dirà dove focalizzare la ricerca della password indipendentemente dalla grandezza della tua applicazione. Quindi è solo questione di tempo prima di rintracciare la password. Crittografare la password non va bene perché l'algoritmo di crittografia deve essere presente nell'app e posso anche sbrogliarlo.

Ricorda che ci sono molte persone là fuori che possono sbrogliare il tuo codice usando solo il codice macchina grezzo. Per quelle persone non importa quale lingua o API usi perché alla fine tutte distillano al codice macchina. Queste persone sono gli dei spaventosi esperti della programmazione e ridono di semplici mortali come te o me.Sfortunatamente, alcuni di loro sono malvagi.

Ho già detto che si dovrebbe mai mettere una password in un file eseguibile? Se non l'ho fatto, permettetemi di ripetere che dovreste mai inserire una password in un file eseguibile.

Nel tuo caso particolare, come programmatore principiante, non hai alcuna speranza di nascondere la password di qualcuno con un po 'più di esperienza. Questo è un altro buon motivo per cui dovresti mai inserire una password in un file eseguibile.

+1

Grazie per la risposta. L'unico motivo per cui esiste una password è solo per pochi amici e non verrà distribuito. – nosedive25

+3

Amici? Allora perché vuoi crittografarlo? :-) –