El juego de Android sigue siendo hackeado

Así que hemos pasado por esto varias veces, lanzamos un juego (por barato) y alguien lo hackea y lo pone en un espejo. Instalamos Alertas de Google para todas nuestras aplicaciones, así que nos dijeron diariamente quién está haciendo la piratería. Hasta ahora, hemos implementado el servicio de licencias como Google ha sugerido, nuestra sal se hace aleatoriamente cada vez que la licencia se inicia con el ID único dispositivo. Ejecutamos el servicio de cheques una vez, cuando se inicia la aplicación por primera vez. A continuación, generamos un hash de 512 caracteres para la clave y el valor almacenado que se compara en SharedPreferences desde allí en out.

Ahora, sé que la comprobación una vez es probablemente donde la aplicación está siendo bloqueada. Nuestro bytecode ha sido probablemente visto y recompilado sin la línea que inicia el cheque.

A partir de aquí, no quiero ofuscar nuestro código como lo he visto roto antes. Quiero algo un poco más sólido, y también quiero aprender a hacer esto correctamente. Estoy más interesado en aprender que ganar dinero en este punto ya que sólo el 2% de la gente alguna vez buscará una versión hackeada.

Hasta ahora, por mi cuenta, he llegado con un generador de números aleatorios que se coloca en varias áreas de inicio del juego. Cuando se inicia (por ejemplo, 1 de cada 50 veces) se comprueba la licencia. Sé que esto haría más difícil hackear porque el cracker tendría que eliminar cada caso, compilar, eliminar, compilar. Este método sin embargo, todavía es crackable … así que qué usted los individuos sugieren? Una vez más, estoy realmente interesado en este proceso de seguridad, así que por favor educar, no convierta esto en una discusión sobre la ofuscación o la comprobación periódicamente basada en una marca de tiempo.

Gracias

Mi idea no es una prueba de hackers, pero podría eliminar parte del interés por hackear el juego.

Modelo Freemium

1) Haga los primeros 5-10 niveles libres así que la gente puede aprender el juego y divertirse sin pagar. Menos querrán cortar el primer nivel y el juego se extenderá aún más por el modelo Freemium.

Shareware / clusterpacks nivelados

2) Que parte de los niveles del juego o la lógica permanecer en línea. P.ej. Al alcanzar el nivel 5 o 10 o 15, a continuación, descargar piezas pequeñas para el juego, y cada vez presentar el log de progreso del juego y validar esto en contra de posibles valores + hashcodes. Esto posiblemente podría hacer posible cerrar automáticamente las cuentas hackeadas.

Protección del tramposo de la cautela

3) Usted también podría contar "pequeñas banderas de advertencia" que coloque en el juego. No sólo comprobar la "validación" en el principio, no construir estos indicadores en la lógica del juego en sí. No lo hacen romper el juego, porque entonces nadie lo buscará. Entonces cuando el usuario alcanzó el monstruo del extremo del nivel, compruebe si había cualquier indicador de advertencia registrado. Estos no se mostrarán dentro del juego, por lo que el usuario desconocido con una edición hackeada podría estar jugando durante horas / días y repentinamente se dio cuenta de que no podía terminar el juego o avanzar al siguiente nivel, porque el juego tenía un "error". Lo que el usuario no sabía era que este error sólo ocurría en clientes hackeados.

Conclusión

Sea más listo que las galletas. Engañarlos para que pensaran que el trabajo estaba hecho. Hacer una copyprotection y saber que las galletas más avanzadas serán capaces de eliminarlo. Pero probablemente no quieren jugar 50 niveles para comprobar si el crack también funciona todo el camino.

Una vez que se dan cuenta de este problema, que podría empezar a agrietarse demasiado. Pero si rompes el juego en paquetes de nivel, puedes validar entre cada paquete de descarga. Tan una vez que usted recibe datos hackeados del hash del cliente, después apenas ejecuta un exeception y choca el juego en el cliente. Vaya, el juego se estrelló. No cuente su porque es hackeado. Un error de programa puede ocurrir. Todos los derechos reservados

Una vez más, no es prueba de hackers. Pero podría molestarles lo suficiente para pasar al siguiente juego. Por último, también podría poner actualizaciones periódicas para el juego y sólo la última versión debería ser capaz de "publicar los registros", etc por lo que los usuarios activos tendría que actualizar para mantener en el bucle.

He estado haciendo algunos apk decompiling y hacking por un tiempo (no warez, pero mods y hacks principalmente a las aplicaciones de google y el marco de android, siempre respetando las políticas xda-desarrolladores).

Una vez que aprendes a leer smali, es casi como leer el código java original (pero con mucho más LOC). Por lo tanto, cualquier código que agregue para comprobar las claves se puede encontrar y eliminar o reemplazar. Ni siquiera es necesario recompilar cada vez para eliminar más de una (algunas búsquedas hacen milagros para encontrar fragmentos similares de código) y, aunque se necesiten ciclos de compilación / recompilación para encontrarlos, es sólo cuestión de uno o dos minutos Para descompilar: todo es automatizado por apktool y aún más por apkmanager.

Dicho esto, mi sugerencia es implementar algún tipo de tabla de puntuación en línea o similar, y cuando el usuario mira la tabla de puntuación en línea, puede comprobar el código hash implementado y compararlo con la cuenta de gmail asociada. De esa manera puedes reportar el hack a google y enviar un desagradable mensaje al usuario del warez, explicando por qué eso es ilegal.

Por supuesto, un nuevo hack podría implementarse para eliminar la tabla de puntuación, pero eso reduciría el interés por el warez.

Buena suerte.


Actualizar

Después de investigar para responder a esta pregunta: Inyección de código en APK (realmente sobre el mecanismo de Amazon DRM), puedo decir un poco sobre cómo Amazon está protegiendo las aplicaciones: incluye métodos para comprobar la validez de la instalación en todas partes (se puede ver un ejemplo De cómo lo hacen en mi respuesta a esa pregunta). Esto hará que cualquier intento de hackear una aplicación no es muy difícil, pero extremadamente tedioso. Creo que es un punto fuerte: los hackers no quieren pasar tanto tiempo haciendo tantas tareas repetitivas: no es desafiante y es aburrido . El principal defecto que veo en ese enfoque es la posibilidad de hackear la propia aplicación de Amazon para siempre devolver una respuesta válida, por supuesto. Pero, si mezclas tus cheques de hash actuales con algún tipo de cheque en línea disperso entre tus métodos, creo que las posibilidades de que sea hackeado se pueden reducir drásticamente.

Tomado de mi solución de este post Evite apk cracked

Implementar su propia biblioteca de licencias

También me referiría a ver esto de Google I / O 2011 YouTube grabación:

Evadir Piratas y Detener Vampiros

EDITAR:

Las notas de presentación de Evading Pirates y Stopping Vampires

Algunos puntos clave básicos

  • Modificar la LVL
  • Implementar la resistencia a la manipulación de LVL
  • Utilizar ofuscación
  • Añadir reflexión

Sé que usted no está realmente en la ofuscación, pero realmente necesito reaccionar a esto:

A partir de aquí, no quiero ofuscar nuestro código como lo he visto roto antes. Quiero algo un poco más sólido, y también quiero aprender a hacer esto correctamente.

ProGuard es muy fiable en mi experiencia, y esto aunque yo uso un par de características avanzadas como AIDL y algún código nativo que llama a Java método .. Se necesita un poco de trabajo para leer la documentación y hacer las cosas correctamente, pero una vez que esté Allí ProGuard es extremadamente confiable y también optimiza su app.

Seguridad personalizada / trucos criptográficos son buenos, pero sin ofuscación es como tirar una piedra en el agua en mi humilde opinión.

He utilizado ProGuard en la producción durante muchos meses, y simplemente funciona perfectamente.

Si está interesado en el aprendizaje, lea el manual de ProGuard con cuidado, experimente con él e inspeccione sus registros de salida.

Chance, que hay programadores más talentosos entonces USTED (se aplica para todos los programadores), es 100%. Y si eso es cierto, no se puede arreglar hacking. Pero usted puede pasar tanto tiempo y esfuerzo en ello para ir a la quiebra.

Si usted quiere hacer un poco de dinero serio que necesita para hacer algunas investigaciones sobre su grupo de usuarios de destino, y la ciencia del comportamiento. Usted necesita hacer que los usuarios que juegan que traen dinero nuevo, y eso es todo.

Además, lo tienes todo mal. Los hackers son los miembros más activos de tu base de usuarios, tu comportamiento justo de una manera que no tenías la intención de hacerlo.

Tome los juegos de Zynga en Facebook, por ejemplo, ¿cree que se te hackeó? – Claro, y alrededor de +100000 jugadores sólo juegan, porque thy puede usar bots, que automatizan todo.

Teniendo enorme base de usuarios activa botnet de la gente real, hace que los jugadores tipo archiver quieren jugar el juego – y si tu juego, y se ve bien, entonces Avarage Joe también querrá jugar. Si Avarage Joe juega, entonces sus amigos tal vez quieran jugar, y probablemente no le importará nada más, entonces ser mejor que su amigo, matar el tiempo o tener algo para charlar. Avarage amigos Joe muy probablemente estará dispuesto a pagar para ser mejor que Joe, pero más bien te gustaría invertir en algo que los hace capaces de ser mejores.

Además, si el valor real es jugar el juego de forma gratuita, entonces los usuarios que utilizan la versión hackeada libre, lo más probable es que nunca habría pagado por ello. Pero tus amigos son amigos y sus amigos. Así que esto es como el comercial más barato que puede tener. Si quieres ganar dinero con tu gran base de usuarios, entonces haz nuevas versiones del juego con pequeños cambios en los niveles y gráficos.

La piratería siempre será un problema. En grandes galletas es mejor jugar a este juego de seguridad aunque Obscurity que los desarrolladores.

Qué pregunta interesante y preocupante. 🙂 Como ejercicio, puedes intentar liberar una aplicación a través de Amazon; Tienen su propio mecanismo de DRM; Me pregunto si funciona mejor que ProGuard …

Uno de los elementos clave en mi opinión es difundir el código por lo que no es todo en un solo lugar. Si tiene una función llamada LicenseChecker.checkLicense () que recupera la licencia y la comprueba, puede estar seguro de que se desactivará rápidamente.

La ventaja que uno tiene es que las galletas no pueden ver los comentarios de su código (y, si ofusca, nombre de método / variable), así que venga con algo extraño. En el onCreate () de una actividad, obtiene el ID de licencia. En onResume (), obtiene otro valor para comprobarlo. Tal vez crear un hilo y hacer algunos controles allí. Y entonces, alguna otra pieza irrelevante de código (tal vez el control del jugador) podría recoger el valor y compararlo y almacenar el resultado en alguna parte. Luego, otras tres piezas irrelevantes de código comprobarán de forma independiente ese valor y desactivarán su aplicación si no coincide.

Ahora debo decir por adelantado que esto puede causar dolor de cabeza para usted – obviamente, desordenado, desagradable código es más difícil de depurar y propenso a causar errores. En el peor de los casos, crea falsos positivos en aplicaciones legítimamente compradas.

Y, por supuesto, todo puede ser ingeniería inversa – una vez que las galletas encontrar el lugar donde la aplicación está desactivada, rastrear el valor que se está leyendo. Podrían entonces rastrear donde está siendo almacenado, y rastrear que volver … o, mucho más fácil, que sólo puede desactivar el cheque final (que es la razón por la que se recomienda 3 lugares diferentes, todos los desencadenantes retrasado). La seguridad es tan buena como el eslabón más débil.

Usted no será capaz de detener la piratería. Su mejor apuesta es retrasar la propagación de una copia pirata hasta que el bombo inicial sobre su aplicación se haya calmado.

En primer lugar, no me considero un profesional en el campo de la seguridad SW, pero:

Creo que una cosa importante es dejar que la aplicación sea dependiente en alguna parte (s) en el cheque de la firma. No dejes que afecte de inmediato, pero deja que establezca algunas banderas o cambie algunos valores. Más adelante, usar esas banderas, comprobarlas, dejar que la ausencia / incorrección de ellas cause una excepción de algún tipo que terminará la aplicación quizás. Mientras que la comprobación de la firma sólo es relevante en este momento, es fácil evitarlo, para eliminar la línea, una vez que toque más áreas en el código, su aplicación se vuelve más difícil (o menos fácil …) para hackear. Además, como yo lo veo, no todos los cheques deben llamar a la misma rutina para la sanción, porque esto también hará que sea fácil encontrar el mecanismo de protección y terminarlo.

Por supuesto, la sanción a tomar en casos de SW ilegal puede variar, es posible que desee bloquear la aplicación cuando se utiliza ilegalmente, pero es posible que también desea mantenerlo en funcionamiento, y sólo enviar mensaje que pide al usuario a comprar una copia legal de la aplicación.

Si esto es justo lo que no quería oír, entonces lo siento por su tiempo 🙂

Los usuarios de Android sólo van a tener que aceptar el dolor de teléfono constante-hogares. La única aplicación segura para Android es una aplicación Android siempre conectada.

Esto es, en gran parte, debido a la negativa de Google a bloquear la instalación, como lo ha hecho Apple. En IOS tienes que jailbreak el teléfono. En Android puede cargar cualquier APK en una acción, instalación de fábrica.

Mantenga algunos / más / todo su contenido en el servidor; Entregarlo en trozos; Validar la licencia / sesión en cada llamada.

Será increíblemente difícil inhibir este tipo de comportamiento. Todo lo que se maneja en el lado del cliente es hackable mediante la descompilación APK y modding, edición de memoria con software como Game Guardian ect.

La única manera que puedo ver cómo parcialmente conseguir alrededor de ella, sería hacer un juego en línea en su lugar. O tiene ciertas funciones manejadas en línea. O si el cifrado anti-manipulación como denuvo siempre está disponible para Android / iOS.

  • Seguridad de enviar extras de intenciones sensibles dentro de mi propia aplicación?
  • Evitar la descompilación de android apk
  • De android - CHANGE_COMPONENT_ENABLED_STATE
  • ¿Cuánto esfuerzo debo poner en mi seguridad para Android en la facturación de aplicaciones?
  • Características de seguridad en Android
  • ¿Cómo almacenar de forma segura las credenciales (contraseña) en la aplicación de Android?
  • Facturación en la aplicación de Android: Security.java dice "Error en la verificación de la firma"
  • Cómo habilitar la opción AutoStart para mi aplicación en Xiaomi phone Security App programmatically en android
  • ¿Dónde debo almacenar números de tarjeta de crédito en Android?
  • Cómo agregar PBKDF2WithHmacSHA1 para android api 8 (Froyo)
  • ¿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.