Il nostro team sta cercando di proteggere un'app mobile Android nativa.
Tra le altre cose stiamo usando Dexguard per alcuni controlli come manomissione , root e rilevamento emulatore .
Per farla breve: alcuni di questi controlli falliscono nei nostri build di debug, principalmente perché vogliamo mantenere i tempi di compilazione brevi per gli sviluppatori e abbiamo bisogno di un modo per ignorarli [1].
Il suggerimento del supporto ufficiale di Dexguard era di usare qualcosa del genere:
if(!BuildConfig.DEBUG){
// do actual check if app has been tampered with
}
Ora mi preoccupo:
Non è così condizionale che i controlli di manomissione siano molto facili da aggirare per un utente malintenzionato?
La mia paura è che se un utente malintenzionato tenta di manomettere l'app, può farlo facilmente se è anche in grado di pensare che si tratti di una build DEBUG. Quindi con un piccolo sforzo tutti i (costosi) controlli antimanomissione di Dexguard vengono elusi ...
Le mie preoccupazioni sono giustificate? Includere un condizionale come sopra rende più facile la manomissione dell'app per gli aggressori?
[1]: Lo sfondo qui è: Dexguard rende le build impiegate da tempo. Come 50 secondi invece di 5 secondi per un nuovo test di unità di prova. Per questo motivo disabilitiamo Dexguard per la nostra build di debug, che a sua volta rende certi controlli (come il rilevamento di manomissioni) non riusciti, poiché si basano sull'APK che viene elaborato da Dexguard.