Ofuscación (software)
En el desarrollo de software, la ofuscación es el acto de crear un código fuente o de máquina que es difícil de entender para los humanos o las computadoras. Al igual que la ofuscación en el lenguaje natural, puede usar expresiones innecesariamente indirectas 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 crear un rompecabezas o un desafío recreativo para alguien que lea el código fuente. código. Esto se puede hacer manualmente o utilizando una herramienta automatizada, siendo esta última la técnica preferida en la industria.
Resumen
La arquitectura y las características de algunos lenguajes pueden hacerlos más fáciles de ofuscar que otros. C, C++ y el lenguaje de programación Perl son algunos ejemplos de lenguajes fáciles de ofuscar. Haskell también es bastante confuso a pesar de tener una estructura bastante diferente.
Las propiedades que hacen que un lenguaje sea confuso no son inmediatamente obvias.
Ofuscación recreativa
Escribir y leer código fuente ofuscado puede ser un desafío para la mente. Varios concursos de programación premian el código ofuscado con mayor creatividad, como el Concurso internacional de código C ofuscado y el Concurso Perl ofuscado.
Los tipos de ofuscaciones incluyen sustitución simple de palabras clave, 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:
- nombrando la obfuscación, que incluye el nombre de variables de una manera sin sentido o engañosa;
- data/code/comment confusion, which includes making some actual code look like comments or confusing syntax with data;
- doble codificación, que puede estar mostrando código en forma de poesía o formas interesantes.
Los programas Perl ofuscados cortos se pueden usar en las firmas de los programadores de Perl. Estos son JAPH ("Solo otro hacker de Perl").
Ejemplos
- Algunos ejemplos Python se pueden encontrar en la programación oficial Python FAQ y otros lugares.
- El movfuscator C compilador para el x86_32 ISA utiliza sólo la instrucción mov con el fin de confundir
Desventajas de la ofuscación
- Si bien la obfuscación puede hacer que la lectura, la escritura y la ingeniería inversa un programa sea difícil y consumido, no necesariamente hará imposible.
- Añade tiempo y complejidad al proceso de construcción para los desarrolladores.
- Puede hacer problemas de depuración después de que el software ha sido obfuscado extremadamente difícil.
- Una vez que el código se convierte en abandono y ya no se mantiene, los hobbyistas pueden querer mantener el programa, añadir mods, o entenderlo mejor. La obfuscación hace difícil que los usuarios finales hagan cosas útiles con el código.
- Ciertos tipos de obfuscación (es decir, código que no es sólo un binario local y descarga mini binarios de un servidor web según sea necesario) puede degradar el rendimiento y/o requerir Internet.
Descompiladores
Un descompilador puede aplicar ingeniería inversa al código fuente de un ejecutable o una biblioteca. La descompilación a veces se denomina ataque man-at-the-end, basado en el ataque criptográfico tradicional conocido como "man-in-the-middle". 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 use una lógica diferente a la del código fuente original (debido a las optimizaciones del compilador).
Ofuscación criptográfica
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 de 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 demostró imposible en 2001 cuando los investigadores construyeron programas que no pueden ofuscarse en esta noción).
Notificar a los usuarios sobre código ofuscado
Algunos software antivirus, como AVG AntiVirus, también alertarán a sus usuarios cuando lleguen a un sitio web con código ofuscado manualmente, ya que uno de los propósitos de la ofuscación puede ser ocultar 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 promedio no espere que su software antivirus proporcione alertas sobre un fragmento de código que de otro modo sería inofensivo, especialmente de corporaciones confiables, por lo que tal característica puede disuadir a los usuarios de usar software legítimo.
Mozilla y Google no permiten extensiones de navegador que contengan código ofuscado en su tienda de complementos.
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 se usa en Java y.NET, también hay algunas que funcionan directamente en archivos binarios compilados.
Licencias de ofuscación y copyleft
Ha habido un debate sobre si es ilegal eludir las licencias de software copyleft al publicar 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 de GNU al exigir el "formulario preferido para realizar modificaciones" estar disponible. El sitio web de GNU indica "El 'código fuente' ofuscado no es código fuente real y no cuenta como código fuente."
Contenido relacionado
DDR SDRAM
Airbus a340
Poliestireno