Protege tu APK: Introducción


No es muy difícil conseguir el código de una app en Android y los datos que el usuario haya guardado (usuario, passwords...), si dispones de un teléfono rooteado.

Si eres un desarrollador medianamente responsable querrás proteger la información de tus usuarios. En especial si guardas usuarios y contraseñas en tu app que puede que tu usuario use también en otros sitios más críticos.


 En cuanto tienes algo de experiencia descubres que no existe la defensa absoluta, cualquier sistema es susceptible de ser hackeado si se dispone de los recursos necesarios. Y puede ser frustrante saber que cualquier software que desarrolles, una vez esté en dominio público es susceptible de ser hackeado.

Pero con el tiempo y con algo más de experiencia, descubres que lo verdaderamente importante no es crear el sistema perfecto, si no que en la mayoría de los casos es suficiente con unas pequeñas medidas de seguridad para hacer desistir al >90% de los hackers (o skiddies, alias gente que búsca en Google: "como crackear ..." o "bajar crack para ..."), que son los que realmente buscan hacer daño. Contra los hackers experimentados no hay defensa, y en gran parte de los casos no nos preocupan porque valoran demasiado el software como para destruir el trabajo de otros desarrolladores y tampoco tienen tiempo.

Así que como en otras muchas cuestiones, aquí aplica una de las reglas de oro de la ingeniería (en la vida real): "una solución es válida si funciona para el 90% de los casos, el 10% restante es despreciable a menos que se demuestre lo contrario". Según la rama de la ingeniería pueden cambiar los porcentajes, pero el concepto es simple: la ingeniería busca soluciones prácticas a problemas reales, para ciencias exactas las matemáticas.

En conclusión, a menos que desarrolles software de encriptación o que necesite medidas especiales, protege tu software pero no te obsesiones con ello. Evita que tu vecino adolescente sea capaz de hackear tu app, pero no lo compliques demasiado. Habrás perdido tiempo en algo no productivo (no es una funcionalidad para el usuario) y puede que tu app deje de funcionar según que dispositivos o S.O..