2010-03-16 17 views

Respuesta

1

No. La ofuscación simplemente reemplaza su código de nombre sensato con urneadable. En algunos casos (por ejemplo cuando se utiliza ProGuard, nuestro código puede incluso ser "optimizado", mediante la eliminación de todos los bloques de código inútiles (como if(false) y Imitador declaraciones).

EDITAR (para aclarar las ideas Magesh) .

Al usar un ofuscador (y NO ofuscarlo a mano, lo cual no es una buena idea), cargará sus clases y alineará algunos métodos, o bloques de código (como el antes mencionado si) para simplificar el código para bloques grandes obtenidos de código. Como consecuencia, hay menos llamadas a métodos, que requieren menos uso de pila, y luego se ajusta la aplicación.

La otra cosa es ofuscador generalmente lo hace para cambiar el nombre de todas las variables de mySmartVariable a a$a$a, haciendo imposible la descompilación (ya que un descompilador java considera $ como el símbolo utilizado para identificar las clases internas y anónimas, y no las variables).

+0

pero agregar un método vacío puede hacer que sea lento ¿no? –

+1

@Magesh Elimina, no agrega bloques de código inútiles. –

+1

@James, no siempre, vea mi respuesta. Algunos programas de software agregan flujos de control sin sentido por lo que el código es mucho más difícil de leer, p. ofuscación de flujo. Eso tiene un impacto en el rendimiento, aunque pequeño. – Razzie

6

Definitivamente sí: excepto en el caso más simple donde solo se codifican los nombres de los identificadores, solo se trata de la cantidad de rendimiento que se ve afectado. Más detalles, por ejemplo, here, información general sobre las técnicas de ofuscación está disponible en el artículo de Wikipedia Obfuscated code.

0

Si agrega código redundante que nunca se cruza, no. Si agrega lógica que debe atravesarse en la ejecución normal de su código, sí, afectará el rendimiento. Cuánto depende de qué estructura ilógica haya intentado agregar para confundir piratas de software.

0

A veces, sí. En Java ME (la "versión para teléfono móvil" de Java), la ofuscación funciona en el código de bytes compilado, y (entre otras cosas) reemplaza los nombres con los cortos, generados automáticamente. Esto hace que el código de bytes sea más corto, lo que al menos hace que sea más rápido descargar la aplicación a través de la red.

6

En general, la ofuscación al cambiar el nombre de variables, métodos y nombres de clase a nombres más sin sentido no afecta el rendimiento. Algunos proveedores de software de ofuscación incluso afirman que, aparte de la ofuscación, también hay una ganancia de rendimiento de hasta un 30%. Aunque nunca he probado estas afirmaciones, nunca las he visto probadas, y por lo tanto las encuentro difíciles de creer.

Sin embargo, tenga en cuenta que algunos softwares también permiten la ofuscación del flujo: agregar bucles de control sin sentido a las declaraciones para que el código sea más difícil de seguir. Que tiene tiene un efecto negativo en el rendimiento, aunque pequeño.

+0

Punto interesante (realmente, no es broma aquí), Razzie. Me pregunto cuál es el interés ya que, una vez que involucra ofuscación, considera su código en manos hostiles que pueden usar herramientas de análisis de código para eliminar métodos vacíos y métodos en línea llamados 1 ... – Riduidel

+4

Los buenos ofuscadores pueden producir código totalmente ilegible, usando goto's y otra basura, lo que resulta en un código que es muy difícil de descompilar (bien). Esto viene con una pena de rendimiento sin embargo. Eche un vistazo a http://www.excelsior-usa.com/articles/java-obfuscators.html#performance, lectura interesante. – Razzie

Cuestiones relacionadas