¿Cómo proteger Google In-App Billing v3 contra la piratería de código?

Google proporciona una API conveniente para implementar las funciones de "compra en la aplicación" en una aplicación de Android.

Junto con estos documentos, también hay un capítulo dedicado con respecto al nivel de seguridad de este sistema y las buenas maneras de diseñarlo. La web está llena de artículos sobre este paso, desde la protección de clave pública a la validación de servidor remoto , pero realmente no puedo entender por qué todas estas técnicas deben funcionar cuando el problema principal es, simplemente, el código de hacking .

Tal vez hay un mejor término para explicarlo, pero déjeme hacer un ejemplo rápido. La idea básica de mi aplicación es que, en ciertos puntos, el usuario no puede continuar a menos que haya comprado un artículo.

Algo como:

public void accessTheVeryCoolFeature() { boolean haveIt = checkIfPurchased("verycoolfeature"); if (haveIt) { // YEAH! let's open this very cool feature I paid 200 bucks for } else { // ok... where is my wallet? boolean purchased = startPurchaseFlow("verycoolfeature"); if (purchased) { // my wallet is now empty but happy } } } 

Siguiendo las directrices anteriores, el desarrollador puede proteger su aplicación durante el proceso de compra, dejando que el método startPurchaseFlow a un servidor remoto, de confianza, que valida el recibo. Las compras hechas usando un "mercado falso" deben ser evitadas por esto.

Otro método es proteger el contenido desbloqueado por ofuscar el código. Esto es realmente simple con herramientas como ProGuard y debe hacer la vida de un "hacker" un poco más difícil.

Ahora, traté de actuar como parte de un hacker que quiere leer mi código, especialmente la fase de facturación. Me tomó como un minuto para detectar el código que escribí en el ejemplo anterior. Ahora la mejor parte: ¿qué pasa si edito el código fuente (obfuscated) para hacer esto?

 public void atvf() { boolean hi = cip("verycoolfeature"); hi = true; // <------------------------ AHAH! if (hi) { // YEAH! let's open this very cool feature for free } // ... } 

Todas las buenas palabras sobre la verificación remota y la ofuscación del código han desaparecido totalmente. ¿Por qué gastar horas en intentar implementarlos cuando el primer problema está en un valor booleano ?

¿Me estoy perdiendo de algo?

A menos que su aplicación dependa en gran medida de su funcionalidad en un servidor – como en cada funcionalidad permanece en el servidor y la aplicación es sólo una herramienta de cliente para llamar a las API de servidor, no hay nada que usted puede hacer. Si de hecho es una aplicación basada en servidor, puede comprobar cada solicitud entrante (por ejemplo, la aplicación puede enviar un hash de sesión de una sola vez) si existe una transacción válida para ella y se paga. Si no, negar la solicitud.

El código de la aplicación se está ejecutando en el teléfono del cliente. Si el hacker obtiene acceso a ese código y está libre de modificarlo para anular cualquier validación de facturación, no hay nada que pueda hacer. Debe asegurarse de que no obtiene acceso a ese código fuente en primer lugar.

  • ¿Qué sucede mientras se mueve la aplicación a la tarjeta SD en Android
  • ¿Existe una manera de almacenar de forma segura los datos de usuario en un dispositivo Android?
  • ¿Cómo puedo evitar que alguien se comunique con mi servidor, excepto mi aplicación de Android?
  • Seguridad de activos en Android
  • ¿Cómo puedo diseñar una API / autenticación segura para aplicaciones móviles para acceder a un servicio?
  • La aplicación de Android no debe ejecutarse en dispositivos con raíces
  • ¿Para los juegos, usted aplicaría a la seguridad oa la usabilidad?
  • ¿Dónde almacenar datos de aplicaciones grandes en dispositivos android?
  • ¿Es posible tener un solo ensayo por dispositivo?
  • Evitar que el usuario tome fotos de la pantalla de la aplicación
  • ¿Cómo funciona la verificación de claves API de Google Maps para Android v2?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.