En el desarrollo de software , la ofuscación es el acto deliberado de crear código fuente o de máquina que es difícil de entender para los humanos. Al igual que la ofuscación en el lenguaje natural , puede utilizar expresiones indirectas innecesariamente para componer declaraciones. Los programadores pueden ofuscar deliberadamente el código para ocultar su propósito ( seguridad a través de la oscuridad ) o su lógica o valores implícitos incrustados en él, principalmente, para evitar la manipulación, disuadir la ingeniería inversa o incluso para crear un rompecabezas.o desafío recreativo para alguien que lee el código fuente. Esto se puede hacer manualmente o utilizando una herramienta automatizada, siendo esta última la técnica preferida en la industria. [1]
Descripción general
La arquitectura y las características de algunos lenguajes pueden hacerlos más fáciles de ofuscar que otros. [2] [3] C , [4] C ++ , [5] [6] y el lenguaje de programación Perl [7] son algunos ejemplos de lenguajes fáciles de ofuscar. Haskell (lenguaje de programación) también es bastante confuso [8] a pesar de ser bastante diferente en estructura.
Las propiedades que hacen que un lenguaje sea confuso no son inmediatamente obvias.
Ofuscación recreativa
Escribir y leer código fuente confuso puede ser un desafío para la mente . Varios concursos de programación premian el código más ofuscado de forma creativa, como el Concurso Internacional de Código C ofuscado y el Concurso de Perl ofuscado .
Los tipos de ofuscaciones incluyen la sustitución simple de palabras clave, el uso o no uso de espacios en blanco para crear efectos artísticos y programas autogenerados o muy comprimidos.
Según Nick Montfort , las técnicas pueden incluir:
- la ofuscación de nombres, que incluye nombrar variables de una manera engañosa o sin sentido;
- confusión de datos / código / comentario, que incluye hacer que algunos códigos reales parezcan comentarios o confundir la sintaxis con los datos;
- codificación doble, que puede mostrar código en forma de poesía o formas interesantes. [9]
Los programas de Perl breves y ofuscados se pueden utilizar en las firmas de los programadores de Perl. Estos son JAPH (" Sólo otro hacker de Perl "). [10]
Ejemplos de
Esta es una obra ganadora del Concurso Internacional de Código C ofuscado escrito por Ian Phillipps en 1988 [11] y posteriormente diseñado por ingeniería inversa por Thomas Ball. [12]
/ * CON MENOS PROBABILIDADES DE COMPILAR CON ÉXITO: Ian Phillipps, Cambridge Consultants Ltd., Cambridge, Inglaterra * /#include main ( t , _ , a ) char * a ; { volver !0 < t ? t < 3 ?principal ( -79 , -13 , a + principal ( -87 , 1 - _ , principal ( -86 , 0 , a + 1 )+ a )) :1 , t < _ ? principal ( t + 1 , _ , a ) : 3 ,principal ( -94 , -27 + t , a ) && t == 2 ? _ < 13 ?principal ( 2 , _ + 1 , "% s% d% d \ n " ): 9 : 16 : t < 0 ? t < -72 ? main ( _ , t , "@n '+, #' / * {} w + / w # cdnr / +, {} r / * de} +, / * {* +, / w {% +, / w # q # n +, / # {l, +, / n {n +, / + # n +, / #; \ # q # n +, / + k #; * +, / 'r:' d * '3,} { w + K w'K: '+} e #'; dq # 'lq #' + d'K #! / + k #; \ q # 'r} eKK #} w'r} eKK {nl]' / # ; # q # n ') {) #} w') {) {nl] '/ + # n'; d} rw 'i; #) {nl]! / n {n #'; \ r {#w 'r nc {nl]' / # {l, + 'K {rw' iK {; [{nl] '/ w # q # \ \ n'wk nw' iwk {KK {nl]! / w {% ' l ## w # 'i;: {nl]' / * {q # 'ld; r'} {nlwb! / * de} 'c ;; \ {nl' - {} rw] '/ +,} # # '*} # nc,', # nw] '/ + kd' + e} +; \ # 'rdq # w! nr' / ')} +} {rl #' {n '') #} '+ } ## (!! / " ) : t < -50 ? _ == * a ? putchar ( 31 [ a ]) :principal ( -65 , _ , a + 1 ) : principal (( * a == '/' ) + t , _ , a + 1 ) :0 < t ?principal ( 2 , 2 , "% s" ) : * a == '/' ||principal ( 0 ,main ( -61 , * a , "! ek; dc i @ bK '(q) - [w] *% n + r3 # l, {}: \ n uwloca-O; m .vpbks, fxntdCeghiry" ), a + 1 );}
Es un programa en C que cuando se compila y ejecuta generará los 12 versos de Los 12 días de Navidad . Contiene todas las cadenas necesarias para el poema en una forma codificada dentro del código.
Una entrada no ganadora del mismo año, este siguiente ejemplo ilustra el uso creativo de espacios en blanco; genera laberintos de longitud arbitraria: [13]
char * M , A , Z , E = 40 , J [ 40 ], T [ 40 ]; main ( C ) { para ( * J = A = scanf ( M = "% d" , & C ); - E ; J [ E ] = T [ E ] = E ) printf ( "._" ); para (; ( A - = Z =! Z ) || ( printf ( " \ n |" ) , A = 39 , C - ) ; Z || printf ( M )) M [ Z ] = Z [ A - ( E = A [ J - Z ]) &&! C & A == T [ A ] | 6 << 27 < rand () ||! C &! Z ? J [ T [ E ] = T [ A ]] = E , J [ T [ A ] = A - Z ] = A , "_". : "|" ];}
Los compiladores de C que cumplen con ANSI no permiten que se sobrescriban cadenas constantes, lo que puede evitarse cambiando "* M" a "M [3]" y omitiendo "M =".
El siguiente ejemplo de Óscar Toledo Gutiérrez, entrada de Best of Show en el XIX IOCCC , implementa un emulador 8080 completo con terminal y controlador de disco, capaz de arrancar CP / M-80 y ejecutar aplicaciones CP / M: [14]
#include #define n (o, p, e) = y = (z = a (e)% 16 px% 16 po, a (e) pxpo), h ( #define s 6 [o] #define pz = l [d (9)] | l [d (9) +1] << 8,1 <(9 [o] + = 2) || ++ 8 [o] #define Q a (7) #define w 254> ( 9 [o] - = 2) || --8 [o], l [d (9)] = z, l [1 + d (9)] = z >> 8 #define O)): (( # definir b (y & 1? ~ s: s) >> "\ 6 \ 0 \ 2 \ 7" [y / 2] & 1? 0 :( #define S)? (z- = #define a (f) * (( 7 & f) -6? & O [f & 7]: & l [d (5)]) #define CS 5 S 3 #define D (E) x / 8! = 16 + E & 198 + E * 8! = X? #Define B ( C) fclose ((C)) #define q (c + = 2,0 [c-2] | 1 [c-2] << 8) #define mx = 64 & x? * C ++: a (x), #define A (F) = fopen ((F), "rb +") unsigned char o [ 10 ], l [ 78114 ], * c = l , * k = l #define d (e) o [e] + 256 * o [ e-1] #define h (l) s = l >> 8 & 1 | 128 & y |! (y & 255) * 64 | 16 & z | 2, y ^ = y >> 4, y ^ = y << 2, y ^ = ~ y >> 1, s | = y & 4 + 64506 ; e , V , v , u , x , y , z , Z ; principal ( r , U ) Char ** U ; { { { { } } } { { { } } } { { { } } } { { { } } } { { { } } } { { { } } } { { { } } } { { { } } } { { { } } } { { { } } } { { { } } } { { { } } } { { { } } } { { { } } } { { { } } } { { { } } } { { { } } } { { { } } } { { { } } } { { { } } } { { { } } } { { { } } } { { { } } } { { { } } } { { ; } } { { { } } } { { ; } } { { { } } } { { { } } } { { { } } } { { { } } } { { { } } } { { { } } } { { { } } } { { { } } } { { { } } } { { { } } } { { { } } } { { { } } } { { { } } } { { { } } } { { { } } } { { { } } } { { { } } } { { { } } } { { { } } } { { { } } } { { { } } } { { { } } } { { { } } } { { { } } } { { { } } } para ( v A (( u A (( e A (( r -2 ? 0 : ( V A ( 1 [ U ])), "C" ) ), system ( "stty raw -echo min 0" ), fread ( l , 78114 , 1 , e ), B ( e ), "B" )), "A" )); 118 - ( x = * c ++ ); ( y = x / 8 % 8 , z = ( x y 199 ) -4 S 1 S 1 S 186 S 2 S 2 S 3 S 0 , r = ( y > 5 ) * 2 + y , z = ( x y 207 ) -1 S 2 S 6 S 2 S 182 S 4 ) ? D ( 0 ) D ( 1 ) D ( 2 ) D ( 3 ) D ( 4 ) D ( 5 ) D ( 6 ) D ( 7 ) ( z = x -2 C C C C C C C C + 129 S 6 S 4 S 6 S 8 S 8 S 6 S 2 S 2 S 12 ) ? X / 64-1 ? (( 0 O a ( y ) = a ( x ) O 9 [ o ] = a ( 5 ), 8 [ O ] = una ( 4 ) O 237 == * c ++? (( int ( * ) ()) ( 2 - * c ++? fwrite : fread )) ( l + * k + 1 [ k ] * 256 , 128 , 1 , ( fseek ( y = 5 [ k ] -1 ? u : v , (( 3 [ k ] | 4 [ k ] << 8 ) << 7 | 2 [ k ]) < < 7 , Q = 0 ), y )) : 0 O y = a ( 5 ), z = a ( 4 ), a ( 5 ) = a ( 3 ), a ( 4 ) = a ( 2 ), a ( 3 ) = y , a ( 2 ) = z O c = l + d ( 5 ) O y = l [ x = d ( 9 )], z = l [ ++ x ] , x [ l ] = a ( 4 ), l [ - x ] = a ( 5 ), a ( 5 ) = y , a ( 4 ) = z O 2 - * c ? Z || leer ( 0 , & Z , 1 ), 1 & * c ++? Q = Z , Z = 0 : ( Q = !! Z ) : ( c ++ , Q = r = V ? Fgetc ( V ) : -1 , s = s & ~ 1 | r < 0 ) O ++ c , escribe ( 1 , & 7 [ o ], 1 ) O z = c + 2 - l , w , c = l + q O p , c = l + z O c = l + q O s ^ = 1 O Q = q [ l ] O s | = 1 O q [ l ] = Q O Q = ~ Q O a ( 5 ) = l [ x = q ] , a ( 4 ) = l [ ++ x ] O s | = s & 16 | 9 < Q % 16 ? Q + = 6 , 16 : 0 , z = s | = 1 & s | Q > 159 ? Q + = 96 , 1 : 0 , y = Q , h ( s << 8 ) O l [ x = q ] = a ( 5 ), l [ ++ x ] = a ( 4 ) O x = Q % 2 , Q = Q / 2 + s % 2 * 128 , s = s & ~ 1 | x O Q = l [ d ( 3 )] O x = Q / 128 , Q = Q * 2 + s % 2 , s = s & ~ 1 | x O l [ d ( 3 )] = Q O s = s & ~ 1 | 1 & Q , Q = Q / 2 | Q << 7 O Q = l [ d ( 1 )] O s = ~ 1 & s | Q >> 7 , Q = Q * 2 | Q >> 7 O l [ d ( 1 )] = Q O m y n ( 0 , - , 7 ) y ) O m z = 0 , y = Q | = x , h ( y ) O m z = 0 , y = Q ^ = x , h ( y ) O m z = Q * 2 | 2 * x , y = Q & = x , h ( y ) O m Q n ( s % 2 , - , 7 ) y ) O m Q n ( 0 , - , 7 ) y ) O m Q n ( s % 2 , + , 7 ) y ) O m Q n ( 0 , + , 7 ) y ) O z = r -8 ? d ( r + 1 ) : s | Q << 8 , w O p , r -8 ? o [ r + 1 ] = z , r [ o ] = z >> 8 : ( s = ~ 40 & z | 2 , Q = z >> 8 ) O r [ o ] - || - o [ r -1 ] O a ( 5 ) = z = a ( 5 ) + r [ o ], a ( 4 ) = z = a ( 4 ) + o [ r -1 ] + z / 256 , s = ~ 1 & s | z >> 8 O ++ o [ r + 1 ] || r [ o ] ++ O o [ r + 1 ] = * c ++ , r [ o ] = * c ++ O z = c - l , w , c = y * 8 + l O x = q , b z = c - l , w , c = l + x ) O x = q , segundo c = l + x ) O b p , c = l + z ) O a ( y ) = * c ++ O r = y , x = 0 , a ( r ) n ( 1 , - , y ) s << 8 ) O r = y , x = 0 , a ( r ) n ( 1 , + , y ) s << 8 ))) ); sistema ( "eco cocido stty" ); B (( B (( V ? B ( V ) : 0 , u )), v )); }
Un ejemplo de JAPH :
@P = split // , ".URRUU \ c8R" ; @d = split // , "\ nrekcah xinU / lreP rehtona tsuJ" ; sub p { @p { "r $ p" , "u $ p" } = ( P , P ); tubería "r $ p" , "u $ p" ; ++ $ p ; ( $ q * = 2 ) + = $ f =! tenedor ; mapa { $ P = $ P [ $ f ^ ord ( $ p { $ _ }) & 6 ]; $ p { $ _ } = / ^ $ P / ix ? $ P: cerrar $ _ } teclas % p } p ; p ; p ; p ; p ; mapa { $ p { $ _ } = ~ /^[P.]/ && close $ _ } % p ; esperar hasta $? ; mapa { / ^ r / && <$ _> } % p ; $ _ = $ d [ $ q ]; dormir rand ( 2 ) si / \ S / ; impresión
Esto muestra lentamente el texto "Sólo otro hacker de Perl / Unix", varios caracteres a la vez, con retrasos. Puede encontrar una explicación aquí. [15]
Algunos ejemplos de Python se pueden encontrar en las preguntas frecuentes oficiales de programación de Python y en otros lugares. [16] [17] [18]
Ventajas de la ofuscación
Tiempo de carga más rápido
Los scripts utilizados por las páginas web deben enviarse a través de la red al agente de usuario que los ejecutará. Cuanto más pequeños sean, más rápida será la descarga. En tales casos de uso, la minificación (una forma relativamente trivial de ofuscación) puede producir ventajas reales.
Uso de memoria reducido
En los lenguajes interpretados en tiempo de ejecución antiguos (más comúnmente conocidos como script ), como las versiones anteriores de BASIC, los programas se ejecutaban más rápido y tomaban menos RAM si usaban nombres de variables de una sola letra, evitaban comentarios y solo contenían los caracteres en blanco necesarios (en resumen, los más cortos El mas rápido).
Protección de secretos comerciales
Cuando el código fuente de un programa debe enviarse al usuario, por ejemplo, JavaScript en una página web, el usuario puede acceder a cualquier secreto comercial, mecanismo de licencia u otra propiedad intelectual contenida en el programa. La ofuscación dificulta la comprensión del código y la modificación.
Los programas de escritorio a veces incluyen características que ayudan a ofuscar su código. Es posible que algunos programas no almacenen todo su código en el disco y pueden extraer una parte de su código binario a través de la web en tiempo de ejecución. También pueden usar compresión y / o encriptación, agregando pasos adicionales al proceso de desmontaje.
Prevención de la elusión
En tales casos, ofuscar el programa puede dificultar que los usuarios eludan los mecanismos de licencia u obtengan información que el proveedor del programa deseaba ocultar. También se puede utilizar para dificultar la piratería de juegos multijugador.
Prevención de la detección de virus
Los programas maliciosos pueden utilizar la ofuscación para disfrazar lo que realmente están haciendo. La mayoría de los usuarios ni siquiera leen este tipo de programas; y aquellos que normalmente tienen acceso a herramientas de software que pueden ayudarlos a deshacer la confusión, por lo que esta estrategia tiene una eficacia limitada.
Desventajas de la ofuscación
- Si bien la ofuscación puede hacer que la lectura, la escritura y la ingeniería inversa sean un programa difícil y que requiera mucho tiempo, no necesariamente lo hará imposible. [19]
- Agrega tiempo y complejidad al proceso de construcción para los desarrolladores.
- Puede hacer que los problemas de depuración después de que el software se haya ofuscado sean extremadamente difíciles.
- Una vez que el código se convierte en abandonware y ya no se mantiene, los aficionados pueden querer mantener el programa, agregar modificaciones o comprenderlo mejor. La ofuscación dificulta a los usuarios finales hacer cosas útiles con el código.
- Ciertos tipos de ofuscación (es decir, código que no es solo un binario local y descarga mini binarios de un servidor web según sea necesario) pueden degradar el rendimiento y / o requerir Internet.
Descompiladores
Un descompilador puede aplicar ingeniería inversa al código fuente de un ejecutable o biblioteca. La descompilación a veces se denomina ataque de hombre al final, basado en el ataque criptográfico tradicional conocido como " hombre en el medio ". Pone el código fuente en manos del usuario, aunque este código fuente suele ser difícil de leer. Es probable que el código fuente tenga funciones y nombres de variables aleatorios, tipos de variables incorrectos y utilice una lógica diferente a la del código fuente original (debido a las optimizaciones del compilador).
Ofuscación criptográfica
Recientemente, los criptógrafos han explorado la idea de ofuscar el código para que la ingeniería inversa del código sea criptográficamente difícil. Esto se formaliza en las muchas propuestas para la ofuscación de indistinguibilidad , una primitiva criptográfica que, si es posible construir de forma segura, permitiría construir muchos otros tipos de criptografía, incluidos tipos completamente nuevos que nadie sabe cómo hacer. (Una noción más fuerte, la ofuscación de caja negra , se mostró imposible en 2001 cuando los investigadores construyeron programas que no pueden ofuscarse en esta noción). [20] [21]
Notificación a los usuarios de código ofuscado
Algunos software antivirus, como AVG AntiVirus , [ cita requerida ] también alertarán a sus usuarios cuando accedan a un sitio web con un código que se ofusque manualmente, ya que uno de los propósitos de la ofuscación puede ser ocultar el código malicioso. Sin embargo, algunos desarrolladores pueden emplear la ofuscación de código con el fin de reducir el tamaño del archivo o aumentar la seguridad. Es posible que el usuario medio no espere que su software antivirus proporcione alertas sobre un código que de otro modo sería inofensivo, especialmente de empresas de confianza, por lo que esta característica puede disuadir a los usuarios de utilizar software legítimo.
Algunos navegadores importantes, como Firefox y Chrome, tampoco permiten extensiones de navegador que contengan código ofuscado. [22] [23]
Software de ofuscación
Existe una variedad de herramientas para realizar o ayudar con la ofuscación de código. Estos incluyen herramientas de investigación experimental creadas por académicos, herramientas para aficionados, productos comerciales escritos por profesionales y software de código abierto . También existen herramientas de desofuscación que intentan realizar la transformación inversa.
Aunque la mayoría de las soluciones comerciales de ofuscación funcionan transformando el código fuente del programa o el código de bytes independiente de la plataforma como lo utilizan Java y .NET, también hay algunas que funcionan directamente en binarios compilados.
Licencias de ofuscación y copyleft
Se ha debatido si es ilegal eludir las licencias de software copyleft liberando el código fuente en forma ofuscada, como en los casos en los que el autor está menos dispuesto a hacer que el código fuente esté disponible. El problema se aborda en la Licencia Pública General GNU al requerir que esté disponible el "formulario preferido para realizar modificaciones". [24] El sitio web de GNU dice "El 'código fuente' ofuscado no es código fuente real y no cuenta como código fuente". [25]
Ver también
- Código AARD
- Código de espagueti
- Idioma de solo escritura
- Descompilacion
- Lenguaje de programación esotérico
- Quine
- Código polimórfico
- Ofuscación de hardware
- Concurso C encubierto
- Compilador de fuente a fuente
- ProGuard (Obfuscador de Java)
- Dotfuscator (.Net Ofuscator)
- Gestión de derechos digitales
- Ofuscación de indistinguibilidad
- Embellecimiento del código fuente
Notas
- ^ [[tres nano dependencias para formar una de un conjunto de tres dependencias para reunir en, en y desde nodos triangulares en Nurbs de coordenadas cartesianas del espacio 3D como sinapsis de usuarios web, páginas y chips de temporizador de dispositivos. Toda la información violada sería preestablecida por la empresa como pines Cat6 a un meraki. De todas las personas, como sea que las llames, elegiste la mejor que haya existido para poner el nivel en la ventana de acceso a tus propias bases de datos. UNICORE / Raytheon está dispuesto a responder cualquier otra pregunta que pueda necesitar en Tucson al siguiente en la fila detrás de este Pythagoræntheorum, alrededor del 1200 a. C. India / Vedas hindúes: arabescos, grotescos y moriscos. ]] Identificar a los ladrones: miles de años. Todo lo cual fue pensado por unos pocos excavando para recolectar elementos. Muy interesante]] "¿Qué es la ofuscación (obfu)? - Definición de WhatIs.com" . SearchSoftwareQuality . Consultado el 1 de febrero de 2019 .
- ^ Binstock, Andrew (6 de marzo de 2003). "Ofuscación: encubrir su código de ojos curiosos" . Archivado desde el original el 20 de abril de 2008 . Consultado el 25 de noviembre de 2013 .
- ^ Atwood, Jeff (15 de mayo de 2005). "Jeff Atwood, 15 de mayo de 2005" . Codinghorror.com . Consultado el 25 de noviembre de 2013 .
- ^ "Ofuscación" . Kenter.demon.nl. Archivado desde el original el 4 de marzo de 2016 . Consultado el 25 de noviembre de 2013 .
- ^ "Tutoriales de C ++ - Código ofuscado - Una introducción simple" . DreamInCode.net . Consultado el 25 de noviembre de 2013 .
- ^ "Tutoriales de C - Código ofuscado en C" . 7 de julio de 2011 . Consultado el 25 de noviembre de 2013 .
- ^ Desde el 25-11-2013 a las 18:22 GMT. "Pe (a) rls en ruido de línea" . Perlmonks.org . Consultado el 25 de noviembre de 2013 .
- ^ "Ofuscación - Haskell Wiki" . 16 de febrero de 2006. Archivado desde el original el 30 de agosto de 2017 . Consultado el 3 de marzo de 2020 .
- ^ Montfort, Nick. "Código ofuscado" (PDF) . Archivado desde el original (PDF) el 24 de abril de 2019 . Consultado el 24 de noviembre de 2017 .
- ^ "JAPH - Sólo otro Hacker de Perl" . pm.org . Perl Mongers. Archivado desde el original el 16 de mayo de 2013 . Consultado el 27 de febrero de 2015 .
- ^ "Ganadores del código C ofuscado internacional 1988 - Es menos probable que se compile correctamente" . Ioccc.org. Archivado desde el original el 9 de abril de 2009 . Consultado el 25 de noviembre de 2013 .
- ^ " " Ingeniería inversa los doce días de Navidad "por Thomas Ball" . Research.microsoft.com. Archivado desde el original el 13 de diciembre de 2007 . Consultado el 25 de noviembre de 2013 .
- ^ Don Libes, C ofuscada y otros misterios , John Wiley & Sons, 1993, págs.425. ISBN 0-471-57805-3
- ^ Óscar Toledo Gutiérrez: emulador Intel 8080. 19 ° IOCCC. Lo mejor del espectáculo.
- ^ "Programa Perl ofuscado" . Perl.plover.com . Consultado el 25 de noviembre de 2013 .
- ^ "Ofuscar" ¡Hola mundo! "- Ben Kurtovic" . benkurtovic.com .
- ^ http://wiki.c2.com/?ObfuscatedPython
- ^ https://code.activestate.com/lists/python-list/16171/ "El primer contenido anual ofuscado de Python"
- ^ " " ¿Podemos ofuscar programas? "Por Boaz Barak" . Math.ias.edu. Archivado desde el original el 23 de marzo de 2016 . Consultado el 25 de noviembre de 2013 .
- ^ "El avance de la criptografía podría hacer que el software sea imposible de piratear" . Cableado . ISSN 1059-1028 . Consultado el 14 de marzo de 2021 .
- ^ Jain, Aayush; Lin, Huijia; Sahai, Amit (2020). "Ofuscación de indistinguibilidad de supuestos bien fundamentados" . Cite journal requiere
|journal=
( ayuda ) - ^ a las 05:01, Thomas Claburn en San Francisco el 2 de octubre de 2018. "Google toma medidas contra el código disfrazado en Chrome Web Store" . www.theregister.co.uk . Consultado el 12 de noviembre de 2019 .
- ^ Cimpanu, Catalin. "Mozilla anuncia la prohibición de las extensiones de Firefox que contienen código ofuscado" . ZDNet . Consultado el 12 de noviembre de 2019 .
- ^ "Razonamiento detrás de la" forma preferida del trabajo para realizar modificaciones en el "lenguaje de la GPL" . Lwn.net . Consultado el 25 de noviembre de 2013 .
- ^ "¿Qué es el software libre?" . gnu.org . Consultado el 18 de diciembre de 2014 .
Referencias
- Seyyedhamzeh, Javad, ABCME: A Novel Metamorphic Engine , 17th National Computer Conference, Sharif University of Technology, Teherán, Irán, 2012.
- B. Barak, O. Goldreich, R. Impagliazzo, S. Rudich, A. Sahai, S. Vadhan y K. Yang. "Sobre la (im) posibilidad de ofuscar programas" . 21ª Conferencia Anual Internacional de Criptología , Santa Bárbara, California, EE. UU. Springer Verlag LNCS Volumen 2139, 2001.
- Mateas, Michael; Nick Montfort. "Una caja, oscuramente: ofuscación, lenguajes extraños y estética del código" (PDF) . Actas de la 6ª Conferencia de Arte y Cultura Digital, Universidad de Tecnología de la Información de Copenhague, 1-3 de diciembre de 2005 . págs. 144-153.
enlaces externos
- Un ofuscador gratuito y eficaz para JavaScript
- Ofuscador de JavaScript de código abierto para secuencias de comandos por lotes
- El concurso internacional de código C ofuscado
- Biblioteca de ofuscación C / C ++ antispy para todas las plataformas
- Protección del código Java a través de la ofuscación de código , ACM Crossroads, edición de primavera de 1998
- Proteja su código Java: a través de ofuscadores y más allá , abril de 2009
- Dotfuscator en : documentación de Visual Studio para la ofuscación de .NET incorporada
- Herramientas de ofuscación para .NET, en MSDN : recursos de ofuscación para .NET, en Microsoft Developer Center.
- ¿Podemos ofuscar programas?
- Yury Lifshits. Notas de la conferencia sobre la ofuscación del programa (primavera de 2005)
- Ofuscadores de Java en Curlie
- Análisis del programa de 12 días
- Análisis del programa de generación de laberintos ofuscados
- Programa Perl ofuscado con explicación
- Análisis de la ofuscación del código javascript
- c2: BlackBoxComputation