Nuestro equipo está tratando de asegurar una aplicación móvil nativa para Android.
Entre otras cosas, estamos utilizando Dexguard para algunas comprobaciones como tamper , root y detector de emuladores .
Larga historia corta: algunas de estas comprobaciones fallan en nuestras versiones de depuración, principalmente porque queremos mantener los tiempos de construcción cortos para los desarrolladores, y necesitamos alguna forma de omitirlas [1].
La sugerencia del soporte oficial de Dexguard fue usar algo como esto:
if(!BuildConfig.DEBUG){
// do actual check if app has been tampered with
}
Ahora me preocupo:
¿Este condicional no hace que los controles de manipulación sean muy fáciles de eludir para un atacante?
Mi temor es que si un atacante intenta manipular la aplicación, puede hacerlo fácilmente si también es capaz de hacer que piense que se trata de una versión DEBUG. Así, con poco esfuerzo, todos los (costosos) controles de manipulación de Dexguard son eludidos ...
¿Están justificadas mis preocupaciones? ¿Incluir un condicional como el de arriba hace que la manipulación de la aplicación sea más fácil para los atacantes?
[1]: El fondo aquí es: Dexguard hace que las construcciones tomen mucho tiempo. Por ejemplo, 50 segundos en lugar de 5 segundos para volver a ejecutar una prueba unitaria simple. Debido a esto, inhabilitamos Dexguard para nuestra compilación de depuración, que a su vez hace que algunas de las comprobaciones (como la detección de sabotaje) fallen, ya que dependen de que el Dexguard procesa la APK.