2015-10-13 14 views
8

Nel mio progetto Android, voglio mantenere il mio indirizzo di servizio web sconosciuto. I memorizzare il collegamento come segue:Esiste un modo più sicuro per archiviare le stringhe sensibili in un progetto Android?

private final String SERVICE_LINK = "mywebservicelink..." 

Ma da quando ho visto che APK del possono essere decompilato, mi chiedo se questo link può essere conosciuto.

Come posso conservarlo in modo sicuro?

Grazie.

+0

Non dare per scontato che tu possa ottenere una soluzione sicura. Tutto può essere recuperato con il reverse engineering. Alcuni approcci potrebbero richiedere più lavoro di altri, ma nulla è veramente sicuro. – Henry

+1

migliore user pro-guard per crittografare il tuo codice sorgente. –

risposta

4

È possibile impostare stringa sensibili nella vostra gradle.properties

https://docs.gradle.org/current/userguide/build_environment.html#sec:gradle_properties_and_system_properties

Ad esempio:

nel gradle.properties (di solito si trova nel progetto di root), è possibile definire:

SERVICE_LINK = "mywebservicelink" 

Quindi nella domanda build.gradle

android { 
    ... 
    defaultConfig { 
     resValue "string", "service_link", SERVICE_LINK 
    } 
    ... 
} 

Quindi, questo collegamento di servizio sarà pronto nella risorsa come R.string.service_link. Cioè, si può semplicemente ottenere il valore facendo:

getString(R.string.service_link); 

EDIT 1:

Se stai chiedendo su come nascondere le stringhe nel APK, quindi è possibile utilizzare ProGuard. Tuttavia, essere informati. Qualunque cosa tu abbia inserito nel tuo codice sorgente, non c'è garanzia al 100% che non possa essere decodificato. ProGuard offuscerà il codice, il che renderà il reverse engineering più difficile.

Per ulteriori informazioni, questa discussione è impressionante: How to avoid reverse engineering of an APK file?

+0

In che modo questo aiuta quando si esamina l'APK? – Henry

+0

Grazie, ma come fa a mantenere la mia stringa irraggiungibile? – Kerem

+0

Ho modificato la mia risposta. – Fadils

1

È possibile assegnare valore della variabile SERVICE_LINK dopo aver fatto alcune operazioni, invece di assegnare direttamente. Ad esempio, utilizzando le operazioni con stringhe con poche stringhe senza senso, ottenendo caratteri o sottostringhe da alcune posizioni specifiche, è possibile ottenere utili caratteri ottenendo codice ASCII ottenuto da alcune operazioni aritmetiche, ecc.

Ciò fornisce una complessità tale che le persone di terze parti non trovano facilmente il valore costante. Potrebbero pensare che sia un valore dinamico che varia in base al tempo di esecuzione o qualcosa di non correlato. Ma se fosse "" direttamente, sarebbe stato trovato facilmente.

0

Come regola generale, nessun indirizzo di rete può essere nascosto.

Chiunque cerchi servizi Web, indirizzi o connessi può monitorare la propria rete e acquisire i pacchetti.

Il dominio o l'IP dell'host saranno sempre in bella vista.