Sujeción de cadena en APK

Estoy desarrollando una aplicación para Android usando Mono para Android de Xamarin. Actualmente estoy trabajando para agregar la capacidad de compra en la aplicación mediante la API de Google Play. Para hacerlo, necesito enviar a Google la clave de licencia pública desde mi aplicación. Respecto a este tema, Google recomienda lo siguiente:

Recomendación de seguridad: se recomienda encarecidamente que no codifique el valor exacto de la cadena de clave de licencia pública tal como lo proporciona Google Play. En su lugar, puede construir toda la cadena de clave de licencia pública en tiempo de ejecución a partir de subcadenas, o recuperarla de un almacén cifrado, antes de pasarla al constructor. Este enfoque hace que sea más difícil para terceros maliciosos modificar la cadena de clave de licencia pública en su archivo APK.

Nunca he tratado con el cifrado, la piratería o el cracking ni ninguna otra faceta de la seguridad del software, por lo que no estoy seguro de cómo implementar los consejos de Google. Mi pregunta es ¿cómo se puede asegurar adecuadamente una cadena en un APK de Android creado con Mono para Android sin tener que ser un experto en seguridad?

No parece demasiado audaz, pero creo que puedes ignorar su sugerencia. Los beneficios de seguridad de lo que sugieren son mínimos en el mejor de los casos.

Para una discusión más detallada, lea esto: Cómo proteger la clave pública de Google Play al realizar la facturación de InApp

La verdad es que ninguno de los métodos descritos allí son perfectamente seguros. Si alguien está decidido a descifrar su clave pública, lo hará. No importa lo que hagas, la clave pública terminará pasando al ctor, por lo que un usuario malintencionado siempre podría examinarla en este momento. Todos los “juegos” que están sugiriendo están haciendo esto un poco más difícil, pero definitivamente no es imposible.

Creo que lo mejor es aceptar esto por lo que realmente es. Esta clave es pública por una razón y necesita vivir con el hecho de que podría comprometerse fácilmente. Como todos los demás duermen bien por la noche sabiendo esto, no veo ninguna razón por la que no debas hacerlo también 🙂

Si realmente no puede dormir por la noche y quiere hacer algo … Coloque su llave en su código con los dos primeros caracteres cambiados. Luego, durante el tiempo de ejecución, vuelva a cambiar los dos caracteres antes de usar la tecla. Esto debería ser suficiente para protegerse contra ataques automáticos de fuerza bruta. Ataques inteligentes sobre los que no puede hacer nada.

Editar:

Si está buscando una forma estándar de la industria para proteger su código, use un ofuscador comercial. Estas herramientas están diseñadas para este propósito. Algunos ejemplos son Mono para Android, ofuscación de código . Asegúrese de usar versiones comerciales con todas las funciones que incluyan el cifrado de cadenas.