Lenguaje de programación personalizado y traductor que lo traduce a Java para que sea más difícil obtener el código fuente.

1

Quiero que mi juego sea extremadamente difícil de descompilar. Así que se me ocurrió la idea de un programa que contenga el código de mi juego, codificado en un lenguaje personalizado, y que traduzca ese código en código Java durante el tiempo de ejecución. (Así que es como si una máquina virtual se estuviera ejecutando sobre la máquina virtual de Java, o al menos como lo veo).

Para modificar el código de mi juego, el pirata informático tendría que aprender mi lenguaje personalizado y crear su propio descompilador personalizado que llevaría algo de tiempo. Al menos como me imagino.

¿Hay algún nombre para este tipo de enfoque? ¿Se ha hecho antes? ¿Hay algún defecto que no esté viendo?

    
pregunta Adé 27.07.2013 - 15:08
fuente

5 respuestas

6
  

¿Hay algún defecto que no esté viendo?

Tienes que crear tu propio lenguaje personalizado. No tendrá acceso a herramientas como IDE y depuradores que facilitan la escritura de código en ese idioma. Debe escribir un traductor para traducir su lenguaje personalizado al código de bytes de Java. No tendrá acceso a bibliotecas confeccionadas para una gran cantidad de funciones, por lo que tendrá que escribir las suyas propias o encontrar la manera de incrustar el código existente en su propio idioma. Esto no es fácil, así que sí, hay una falla importante que no está viendo.

    
respondido por el Ayrx 27.07.2013 - 15:35
fuente
7

Yo diría que la falla en su razonamiento es que usted asume que cualquier aspirante a ingeniero inverso estaría interesado en el código fuente de su . De hecho, para la ingeniería inversa, los atacantes están interesados en una forma de "código fuente" que permite cualquier objetivo que persiga el atacante, generalmente entendiendo una pequeña parte del algoritmo. El formato para el bytecode de Java es lo suficientemente regular y simple para que pueda administrarse directamente para ese tipo de trabajo.

Así que un atacante podría simplemente ejecutar un desensamblador (como este ) y posiblemente un ensamblador correspondiente (como that ) para probar sus modificaciones o insertar llamadas de depuración adicionales. Él puede hacer eso en los archivos compilados .class , independientemente del lenguaje de programación que hayas usado en tu lado.

Esto no es nuevo. Las personas han estado aplicando ingeniería inversa en C o C ++ durante décadas, mirando el ensamblaje.

    
respondido por el Thomas Pornin 29.07.2013 - 14:32
fuente
2
  

Para modificar el código de mi juego, el pirata informático tendría que aprender mi lenguaje personalizado y crear su propio descompilador personalizado que llevaría algo de tiempo. Al menos como me imagino.

Un hacker no necesita descompilar todo el camino a tu idioma personalizado. El pirata informático solo tendría que encontrar y reconocer el lugar en el código de byte donde el código disminuye la cantidad de vidas que quedan y cambiarlo en un incremento. No hay necesidad de una descompilación completa.

    
respondido por el Jeff 27.07.2013 - 19:35
fuente
2

Si entendí correctamente, estás haciendo las siguientes traducciones:

Custom language > Java > Java bytecode

Mientras tanto, el pirata informático puede usar directamente el código de bytes de Java para aprender cómo funciona tu juego

No te recomendaré de esa forma, te agrega la complejidad de codificar un traductor que no te dará ninguna protección, pero te dará más dolores de cabeza ya que no podrás usar ningún IDE ni usar bibliotecas. directamente

Lo que puede hacer para dificultar en el mismo nivel la tarea de ingeniería inversa es usar un ofuscador de código. Le brindará todas las ventajas de usar Java estándar (incluyendo IDE y bibliotecas) y no necesita un traductor y lenguaje personalizados.

    
respondido por el Mr. E 21.12.2016 - 22:02
fuente
1

Recomendaría utilizar una herramienta de ofuscación ya disponible. DexGuard es uno de esos ofuscadores de código que ofrece cierto nivel de protección para las aplicaciones de Android. Supongo que sería mejor utilizar el producto de un desarrollador cuyo único objetivo es la ofuscación en lugar de escribir el suyo propio y, por lo tanto, tener más tiempo para centrarse en el desarrollo de su juego.

Al igual que con todos los tipos de empaquetado de código, esto simplemente aumenta la complejidad de la inversión y un atacante determinado siempre puede encontrar un camino.

    
respondido por el a713n 27.07.2013 - 21:34
fuente

Lea otras preguntas en las etiquetas