¿Cuáles son las ventajas de ofuscar el código de lanzamiento?

12

El ejemplo específico que tengo en mente involucra al actual juego alfa Minecraft, pero esta es una pregunta general que creo que merece alguna conversación.

Minecraft está escrito en Java, y los rastros de la pila generalmente se ven así (ejemplo real):

java.lang.NullPointerException
    at d.a(SourceFile:247)
    at gi.b(SourceFile:92)
    at bd.a(SourceFile:33)
    at bn.a(SourceFile:69)
    at bn.e(SourceFile:115)
    at bn.d(SourceFile:103)
    at net.minecraft.client.Minecraft.i(SourceFile:1007)
    at net.minecraft.client.Minecraft.run(SourceFile:596)
    at java.lang.Thread.run(Unknown Source)

Obviamente, estos no son los nombres reales de paquetes y métodos que utiliza el desarrollador cuando escribe. Dado que se encuentra en una etapa alfa, parece que al desarrollador le gustaría poder dar sentido a sus rastros de pila, especialmente si alguien puede proporcionar uno para un informe de error. Tal como está, en su mayoría no tiene sentido.

¿Qué ventaja se podría esperar al ofuscar su código como este que supera los inconvenientes de la identificación de errores más difícil?

StrixVaria
fuente
1
En pocas palabras, la ofuscación cambia la economía de la ingeniería inversa de su código, nada más.
Mark Booth

Respuestas:

22

También ofuscamos nuestro código Java ...

La ventaja es que dificulta la ingeniería inversa (si le preocupa que alguien robe su base de código y la use como base para crear un producto similar de la competencia, por ejemplo, etc.).

Puede recuperar el seguimiento de la pila original: existen herramientas de ofuscación que crean archivos de referencia especiales que puede utilizar para ejecutar los seguimientos de la pila ofuscada, y sale con el seguimiento de la pila de origen original. Estos son generados por el proceso de ofuscación en sí mismo, por lo que no puede recuperar el seguimiento de la pila original a menos que tenga en sus manos el archivo de referencia que utilizó para ofuscar el código en primer lugar.

Esto no tiene desventajas realmente. :)

Mesas Bobby
fuente
3
Interesante, nunca supe que venían con una "ofuscación de seguimiento de la pila" (nunca había usado un ofuscador) ... qué buena idea :-)
Dean Harding
1
El único inconveniente con el que me he encontrado es ocasionalmente un ofuscador (uno .NET en este caso) lo ofuscó hasta el punto en que el jitter ni siquiera podía leerlo (instrucciones ilegales). Fracaso masivo.
vcsjones el
@vcsjones: Eso no es realmente ofuscación entonces ...
configurador
3
  • protegiendo su propiedad intelectual

La mayoría de los ofuscadores también optimizan su código , eliminan metadatos inútiles o códigos no utilizados, compresión, eliminación de código muerto o eliminación de duplicados.


fuente
Si uno tiene que usar un ofuscador para tales optimizaciones, el compilador en uso debe ser un software realmente flojo.
phresnel
@phresnel: Sí, ofuscador puede hacer un buen trabajo
@phresnel: incompleto, probablemente, pero horrible ...
Tienes razón. Déjame volver a publicar.
phresnel
1
No es que no te crea; ¡Hago! Pero todas esas optimizaciones suelen ser ejercidas también por los compiladores modernos. Al menos sé que gcc los tiene a todos. Entonces, mi opinión es: si un ofuscador realmente le da una aceleración significativa, entonces el compilador [proveedor] no lo intentó lo suficiente o no se le dieron los indicadores de optimización adecuados.
phresnel