2009-05-16 19 views
9

¿Alguna vez ha ofuscado su código? ¿Hay alguna vez razones legítimas para hacerlo?¿Por qué oscurece su código?

+0

No puedo evitar darme cuenta de que hay dos formas de interpretar esto: 1) mano ofuscada y 2) máquina ofuscada. Tal como está redactado, la pregunta es alentar respuestas basadas en ambas suposiciones. –

Respuesta

18

He ofuscado mi JavaScript. Lo hizo más pequeño, reduciendo así los tiempos de descarga. Además, dado que el código se entrega al cliente, mi empresa no quería que lo pudieran leer.

+1

¿Y no le dijiste a tus jefes que la ofuscación es reversible? Si tiene Javascript en el navegador, cualquiera que tenga acceso a la página puede obtener el script. La ofuscación es solo un pequeño obstáculo. – Mnementh

+4

Les digo, compro que obtienen lo que quieren. El código no vale la pena robar de todos modos. – geowa4

+3

este 20% de obstáculo probablemente sea suficiente para el 80% de los ladrones. – lImbus

13

Sí, para que sea más difícil realizar ingeniería inversa.

+1

Sí. Más difícil, pero no imposible. :-) –

+14

Sí, todos sabemos que es imposible hacer que algo sea imposible de descartar. Al igual que es imposible que un edificio sea 100% seguro, todavía intentamos todo lo que podemos. – Unknown

+0

@Unkown - +1 para su respuesta corta y al punto –

-1

Se suele hacer cuando necesita para proporcionar algo en la fuente (generalmente debido al entorno en el que se está creando, como sistemas sin bibliotecas compartidas, especialmente si usted como vendedor no tiene el sistema exacto compilar para), pero no desea que la persona a la que le está entregando pueda modificarlo o ampliarlo significativamente (o no lo haga).

Esto solía ser mucho más común que hoy. También condujo al (desaparecido?) Concurso C ofuscado.

Un uso legal (aunque puede decirse que no es "legítimo") podría ser liberar la "fuente" de una aplicación que estás enlazando con el código GPL de manera ofuscada. Es fuente, es puede modificarse, es simplemente muy difícil. Esa sería una versión más extrema de liberarla sin comentarios, o liberarla con todos los espacios en blanco recortados, o (y esto podría estar empujando los motivos legales probablemente) liberando la fuente de ensamblador generada desde C (y quizás ajustada a mano para que pueda decir que no es solo código intermedio).

+0

enh. Si eso era cierto, entonces, ¿qué impide que lo liberes como ensamblaje? –

+3

La fuente ofuscada no cumple con los requisitos de GPL. GPL-2 y GPL-3 dicen "El código fuente de un trabajo es la forma preferida del trabajo para modificarlo". Claramente, esa no es la versión ofuscada. Y definitivamente no es la salida de ensamblaje. – derobert

+0

No había verificado si había tal lenguaje; Ciertamente, tal lanzamiento viola la intención de la GPL. Sospecho que hay una considerable área legal gris allí (¿eliminando comentarios? ¿No se incluye la documentación externa?), Pero la ofuscación verdadera parecería violar esa cláusula. – jesup

6

No creo que hacer una ingeniería inversa sea más difícil es una razón válida.

Una buena razón para ofuscar su código es reducir la huella compilada. Por ejemplo, las aplicaciones J2ME deben ser lo más pequeñas posible. Si ejecuta su aplicación a través de un ofuscador (y optimizador), entonces puede reducir el contenedor de un par de Mb a unos cientos de Kb.

El otro punto, anidado anteriormente, es que la mayoría de los ofuscadores también son optimizadores que pueden mejorar el rendimiento de su aplicación.

+0

La razón por la que no creo que hacer la ingeniería inversa sea más difícil es una razón legítima porque hacer algo difícil no impide que suceda. –

+0

Eso se llama optimización del compilador. El hecho de que se ofusque es un efecto secundario, no el principal. – Unknown

+5

Las cerraduras no detienen el robo de automóviles, pero sí lo hacen más difícil. Alguien tiene que querer realmente el auto en lugar de solo un Joe promedio que quiere un paseo de alegría. La ofuscación hace que sea más difícil robar el código. Alguien que realmente lo quiera lo seguirá haciendo, pero detendrá tu script-kiddie promedio. (-1) – bsneeze

0

Recuerdo haber creado una aplicación de servicio de Windows para copia de seguridad en línea que se creó en .NET. Podría usar fácilmente Visual Studio o herramientas como .NET Reflector para ver las clases y el código fuente dentro de él.

Creé una nueva aplicación de prueba de Visual Studio y agregué la referencia de servicio de Windows a la misma. Hice doble clic en la referencia y puedo ver todas las clases, todos los espacios de nombres (aunque no el código fuente). Cualquiera puede descubrir el funcionamiento interno de sus módulos mirando los nombres de las clases. En mi caso, una de esas clases fue FTPHandler que indica claramente hacia dónde van las copias de seguridad.

.NET Reflector va más allá al mostrar el código real. Incluso tiene la opción de Exportar todo el proyecto para que pueda obtener un proyecto de VS con todas las clases y el código fuente similares a los que tenía el desarrollador.

Creo que tiene sentido ofuscar, para que al menos sea más difícil o imposible de desmontar. También creo que tiene sentido para los productos que involucran una gran base de clientes donde no desea que sus competidores sepan mucho sobre sus productos.

0

Si estoy entregando aplicaciones Java Swing a clientes, siempre ofusco los archivos de clase antes de la distribución.

Nunca se debe tener mucho cuidado: una vez señalé un decompilador de Java decente (utilicé el Decompiler JD Java - http://www.djjavadecompiler.com/) en mis archivos de clase y obtuve una reproducción casi perfecta del código original. Eso fue bastante desconcertante, así que comencé a ofuscar mi código de producción desde entonces. Yo uso Klassmaster yo mismo (http://www.zelix.com/klassmaster/)

+0

La pregunta es, ¿crees que perderías negocios debido a la descompilación? Los piratas lo copiarán de todos modos, independientemente de la ofuscación. A los clientes comerciales legítimos no les importará de ninguna manera. – PowerApp101

+0

Tenemos personas a las que les gustaría realizar una ingeniería inversa de nuestro código y sacar un producto de la competencia. -R – Huntrods

7

Para asegurar un trabajo de por vida, por supuesto (bromeo).

Esto es bastante gracioso y educativo: How to Write Unmaintanable Code.

+0

https://github.com/Droogans/unmaintainable-code –

1

Creo que todos los decodificadores de TV tendrán el código java ofuscado. Esto hace que las cosas sean más difíciles de hackear, y como los decodificadores de cable estarán en su hogar, teóricamente son pirateables.

No estoy seguro de cuánto importe ya que la tarjeta de cable controlará el cifrado de señal y obtiene su autorización directamente de la fuente de video en lugar de la guía de Java o las aplicaciones Java, pero están muy dedicadas al concepto .

Por cierto, ¡no es fácil rastrear excepciones arrojadas desde una pila ofuscada! De hecho, memoricé en un momento que aH significaba "Excepción del puntero nulo" para una compilación en particular.

2

¿No es esto también usado como seguridad a través de la oscuridad? Cuando su código fuente está disponible públicamente (javascript, etc.), es posible que al menos sea un poco más difícil entender lo que realmente ocurre en el lado del cliente.

La seguridad siempre está llena de compromisos. pero creo que la seguridad por oscuridad es uno de los métodos menos efectivos.

0

Al mirar parte del código que escribí para el proyecto de mi controlador de disco, me hace cuestionar lo que significa ofuscarse.

((int8_t (*)(int32_t, void *)) hdd->_ctrl)(DISK_CMD_REQUEST, (void *) dr); 

¿O es solo la programación del sistema en C? ¿O debería esa línea escribirse de manera diferente? Preguntas ...

+0

Eso no es tan malo ... Sin embargo, podrían haber usado un typedef en el tipo de función. Para otros, hdd -> _ ctrl es una función que toma (int32_t, void *) y devuelve un int8_t. Le pasamos los parámetros reales DISK_CMD_REQUEST y dr. –

7

Se llama "Seguridad laboral". Esta es también la razón para usar Perl: no es necesario ofuscarse como una tarea separada, por lo tanto, una mayor productividad, sin pérdida de la seguridad laboral.

Llámelo "seguridad a través de obstrucciones" si lo desea.

+0

Espero que estés siendo gracioso: P – shylent

+0

¿cómo lo adivinaste? :) (sí, soy lo suficientemente vanidoso como para pensar que no necesito recurrir a tales trucos) – StaxMan

0

Sí y no, no he entregado aplicaciones con una herramienta que sea fácil de descompilar.

Funcioné algo así como ofuscadores para los viejos intérpretes Basic y UCSD Pascal, pero eso fue por una razón diferente, optimizando el tiempo de ejecución.

Cuestiones relacionadas