stringtranslate.com

Ofuscación (software)

En el desarrollo de software , la ofuscación es el acto de crear 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 utilizar expresiones innecesariamente indirectas para redactar 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 incorporados en él, principalmente, para evitar la manipulación, impedir la ingeniería inversa o incluso crear un rompecabezas o un desafío recreativo para alguien que lea la fuente. código. Esto se puede hacer manualmente o mediante el uso de 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 hacer que sean 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 también es bastante ofuscable [8] a pesar de tener una estructura bastante diferente.

Las propiedades que hacen que un lenguaje sea ofuscable no son inmediatamente obvias.

Técnicas

Los tipos de ofuscaciones incluyen la simple sustitución 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:

  1. ofuscación de nombres, que incluye nombrar variables de manera engañosa o sin sentido;
  2. confusión de datos/código/comentario, que incluye hacer que algún código real parezca comentarios o confundir la sintaxis con los datos;
  3. codificación doble, que puede mostrar código en forma de poesía o formas interesantes. [9]

Herramientas automatizadas

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 de ofuscación comerciales 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 archivos binarios compilados.

Recreativo

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 más creativamente, como el Concurso Internacional de Código C Ofuscado y el Concurso Perl Ofuscado .

Se pueden utilizar programas cortos de Perl ofuscados en las firmas de los programadores de Perl. Estos son JAPH (" Sólo otro hacker de Perl "). [dieciséis]

Criptográfico

Los criptógrafos han explorado la idea de ofuscar el código para que realizar ingeniería inversa en el código sea criptográficamente difícil. Esto se formaliza en las numerosas propuestas de ofuscación de indistinguibilidad , una primitiva criptográfica que, si fuera posible construir de forma segura, permitiría construir muchos otros tipos de criptografía, incluidos tipos completamente novedosos que nadie sabe cómo crear. (Se sabe que una noción más fuerte, la ofuscación de caja negra , es imposible en general). [17] [18]

Desventajas de la ofuscación

Notificar a los usuarios sobre código ofuscado

Algunos software antivirus, como AVG AntiVirus , [20] 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 dicha característica puede en realidad disuadir a los usuarios de utilizar software legítimo.

Mozilla y Google no permiten extensiones de navegador que contengan código ofuscado en su tienda de complementos. [21] [22]

Licencias de ofuscación y copyleft

Ha habido un debate sobre si es ilegal eludir las licencias de software copyleft publicando 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 exigir que esté disponible el "formulario preferido para realizar modificaciones". [23] El sitio web de GNU afirma: "El 'código fuente' ofuscado no es código fuente real y no cuenta como código fuente". [24]

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-in-the-end (mite), 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 nombres aleatorios de funciones y variables, tipos de variables incorrectos y utilice una lógica diferente a la del código fuente original (debido a optimizaciones del compilador).

Ofuscación del modelo

La ofuscación de modelos es una técnica para ocultar la estructura interna de un modelo de aprendizaje automático . [25] La ofuscación convierte un modelo en una caja negra. Es contrario a la IA explicable . Los modelos de ofuscación también se pueden aplicar a los datos de entrenamiento antes de introducirlos en el modelo para agregar ruido aleatorio. Esto oculta información confidencial sobre las propiedades de muestras individuales y de grupos. [26]

Ver también

Referencias

  1. ^ "¿Qué es la ofuscación (obfu)? - Definición de WhatIs.com". BuscarCalidaddelsoftware . Consultado el 1 de febrero de 2019 .
  2. ^ Binstock, Andrew (6 de marzo de 2003). "Ofuscación: ocultar su código de miradas indiscretas". Archivado desde el original el 20 de abril de 2008 . Consultado el 25 de noviembre de 2013 .
  3. ^ Atwood, Jeff (15 de mayo de 2005). "Jeff Atwood, 15 de mayo de 2005". Codificaciónhorror.com . Consultado el 25 de noviembre de 2013 .
  4. ^ "Ofuscación". Kenter.demon.nl. Archivado desde el original el 4 de marzo de 2016 . Consultado el 25 de noviembre de 2013 .
  5. ^ "Tutoriales de C++: código ofuscado: una introducción sencilla". DreamInCode.net . Consultado el 25 de noviembre de 2013 .
  6. ^ "Tutoriales de C: código ofuscado en C". 7 de julio de 2011 . Consultado el 25 de noviembre de 2013 .
  7. ^ A partir del 25 de noviembre de 2013 a las 18:22 GMT. "Per(a)rls en ruido de línea". Perlmonks.org . Consultado el 25 de noviembre de 2013 .{{cite web}}: Mantenimiento CS1: nombres numéricos: lista de autores ( enlace )
  8. ^ "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 .
  9. ^ Montfort, Nick. "Código ofuscado" (PDF) . Archivado desde el original (PDF) el 24 de abril de 2019 . Consultado el 24 de noviembre de 2017 .
  10. ^ Ben Kurtovic. "Ocultando" ¡Hola mundo! benkurtovic.com .
  11. ^ "Python ofuscado". wiki.c2.com .
  12. ^ "El primer contenido anual de Python ofuscado". código.activestate.com .
  13. ^ domas (3 de noviembre de 2022), xoreaxeaxeax/movfuscator , consultado el 5 de noviembre de 2022
  14. ^ Break Me00 The MoVfuscator Convirtiendo mov en una pesadilla RE aplastante Christopher Domas , consultado el 5 de noviembre de 2022
  15. ^ Williams, Al (21 de marzo de 2021). "Una instrucción para gobernarlos a todos: el compilador C sólo emite MOV". La-Tecnologia . Consultado el 23 de octubre de 2023 .
  16. ^ "JAPH: otro hacker de Perl". pm.org . Traficantes de Perl. Archivado desde el original el 16 de mayo de 2013 . Consultado el 27 de febrero de 2015 .
  17. ^ "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 .
  18. ^ Jainista, Aayush; Lin, Huijia; Sahai, Amit (2020). "Ocultación de la indistinguibilidad de suposiciones bien fundadas". Archivo ePrint de criptología . arXiv : 2008.09317 .
  19. ^ ""¿Podemos ofuscar los programas? "Por Boaz Barak". Math.ias.edu. Archivado desde el original el 23 de marzo de 2016 . Consultado el 25 de noviembre de 2013 .
  20. ^ "Bloqueo de sitio web y la única forma de solucionarlo es deshabilitar HTTPS... | AVG". soporte.avg.com . 21 de julio de 2020 . Consultado el 4 de febrero de 2022 .
  21. ^ a las 05:01, Thomas Claburn en San Francisco, 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 .{{cite web}}: Mantenimiento CS1: nombres numéricos: lista de autores ( enlace )
  22. ^ Cimpanu, Catalín. "Mozilla anuncia la prohibición de las extensiones de Firefox que contengan código ofuscado". ZDNet . Consultado el 12 de noviembre de 2019 .
  23. ^ "Razonamiento detrás de la" forma preferida del trabajo para realizar modificaciones en su "lenguaje en la GPL". Lwn.net . Consultado el 25 de noviembre de 2013 .
  24. ^ "¿Qué es el software libre?". gnu.org . Consultado el 18 de diciembre de 2014 .
  25. ^ Zhou, Mingyi; Gao, Xiang; Wu, Jing; Grundy, John C.; Chen, Xiao; Chen, Chunyang; Li, Li (2023). "Modelo de ofuscación para proteger las redes neuronales implementadas". {{cite journal}}: Citar diario requiere |journal=( ayuda )
  26. ^ Zhang, Tianwei; Él, Zecheng; Lee, Ruby B. (12 de julio de 2018). "Aprendizaje automático que preserva la privacidad mediante la ofuscación de datos". arXiv : 1807.01860 [cs.CR].

Otras lecturas

enlaces externos