¿Qué es la ofuscación del código?

Las leyes de patentes, las leyes de derechos de autor, los piratas informáticos y los plagios hacen que sea muy difícil para los programadores ejercer sus derechos de propiedad intelectual sobre el código que han creado. De ahí la necesidad de ofuscación. Algunos códigos son más fáciles de ofuscar que otros. En este documento, se describen y revisan varias técnicas para la protección técnica de los secretos del software. Además, en este documento, la ofuscación de datos, se discute la clase de técnicas de ofuscación que se concentran en las estructuras de datos en el software. Este documento finalmente discute algunas posibles técnicas de desobfuscación (como el corte del programa).

Cuando un programador pasa horas escribiendo código, es lógico que dicho código sea patentado. Pero las leyes de derechos de autor y las leyes de patentes (USPTO.gov), no satisfacen todas las necesidades de un programador. Una forma de prevenir el plagio y la piratería es emplear la ofuscación del código.

Definición de la ofuscación
Aquí hay una definición: el código offusionado (Wikipedia, es que es (quizás intencionalmente) muy difícil de leer y Comprender. Algunos idiomas son más propensos a la ofuscación que otros. Se citan con mayor frecuencia con la mayor parte de los idiomas “ofuscables”. /p>

Ofuscación del código: algunos métodos descritos
Los métodos de ofuscación se clasifican en función de la información en la que se centran en los básicos están dirigidos a la estructura léxica del código. Otros, como se mencionó anteriormente, se concentran en los datos estructuras. El flujo de control también es un área de enfoque importante. Los métodos de ofuscación se clasifican aún más en función del tipo de operación que realizan en la información específica. Los diferentes métodos de ofuscación (Collberg et al) son:

Ofuscación de diseño: tiene como objetivo el diseño de la aplicación, como el formato del formato del código fuente, los nombres de los nombres de las variables y finalmente los comentarios.

Ofuscación de datos: un método ampliamente utilizado, se pone en cero en En las estructuras de datos utilizadas por el código.

Codificación de la ofuscación: cambia la forma en que la máquina interpreta los datos almacenados, por ejemplo, considere el reemplazo de una variable “I” por un valor derivado C1*I +C2 . Ofusión de agregación: altera los grupos de datos traídos creados por el código. Aquí, considere un ejemplo de división de una matriz en varias subrainaciones. También, para el caso, una variable que no está orientada a manejar una matriz está hecha para parecer que es una matriz. Este ficticio arroja esfuerzos de ingeniería inversa fuera de la pista. Ofusión de pedido: cambia el orden de los datos. Por ejemplo, reordenar el orden de los elementos de la matriz y colocar el elemento “i” en una nueva ubicación determinada por una función f (i) es una forma de ofuscación.

Ofuscación de flujo de control: mientras que algunos métodos de La ofuscación altera la agregación del control o los datos, otros influyen en el orden. Este tipo de ofuscación tiene como objetivo interferir con el desentrañamiento del código a través de la manipulación del flujo de control del código. Ofusión de agregación: altera cómo las declaraciones se agrupan. Un ejemplo está en línea, lo que significa que reemplazar una llamada de función por el cuerpo de la función.

READ  Una guía para mejorar su antiguo telescopio de 60 mm.

Los cambios en el orden en que se ejecutan las declaraciones es otra forma de ofuscación. Un ejemplo es configurar un bucle de tal manera que se atribuya al revés con éxito la piratería, el plagio, etc. (S. Chow et al., Pero no es fijo, ya que es muy fácil de revertir. Ofuscación computacional: el flujo de control en un código está alterado , por ejemplo, al insertar código de nivel de objeto que no tiene un código fuente equivalente (trozos de código bajo y sin sentido insertados estratégicamente triunfan en confundir a los posibles plagiarios.)

Transformación preventiva: este método de ofuscación disuade al plagador o al plagio o al plagador hacker haciendo que el código sea muy difícil de romper con un des-obfuscator. El objetivo principal de este método no es oscurecer el código, sino hacer que sea más difícil romper los obfuscadores (Chang, dirigido: intenta hacer que Automatic DE -Las técnicas de obfuscación más difíciles.
inherentes: hasta ahora, los meothods revisados ​​apuntaban a equiparar el código en sí de tal manera que sea difícil de entender o eliminar. Programas

Una lista de tipos de ofuscación.
ofuscación inherente.
DESCUMBA DE LACOUT
OBFUSCACIÓN DE DATOS
Control de la ofuscación
Transformación preventiva
Ofuscación de orden
Obuscación de almacenamiento
Obsuscación de agregación
Ofuscación de cálculo
Enfusión de codificación

Parámetros para evaluar la calidad de un método de ofuscación
El objeto de la ofuscación es desalentar la piratería del código. Por lo tanto, la efectividad de una estrategia de ofuscación es “directamente proporcional” a la complejidad del código post-obfuscado. Para estudiar los métodos de ofuscación en detalle, es necesaria una evaluación de la calidad de la transformación. La eficacia del método de ofuscación empleado está determinada por una combinación de su poder o potencia, resistencia, sigilo y costo. Estos son los elementos del marco necesarios para la evaluación de la calidad de un método de ofuscación.

¿Cuál es la potencia?
La potencia define hasta qué punto el código transformado es más oscuro en comparación con el código original . Las métricas de complejidad de código o software definen varias medidas de complejidad para el software, algunas métricas son: el número de predicados contenidos, la profundidad de su árbol de herencia, niveles de anidación, etc. El objetivo aquí es maximizar la complejidad.

Resiliencia: La resiliencia es la fuerza de un método de transformación. Es una medida de qué tan bien puede un código con los métodos de desobfuscación automatizados después de la transformación. Es un Alamgam del esfuerzo del programador para crear un deshonjador y el tiempo y el espacio tomado por el Deobfuscator. La máxima resiliencia se ve en el caso de una transformación unidireccional que un deobfuscador no puede deshacer. Unireccionalidad confiere irreversibilidad (?) Cuando el método de ofuscación elimina la información como el formato del código, para considerar un ejemplo.

READ  La historia de volverse verde

se dice que una transformación es poderosa y potente si puede tirar un lector de pista, mientras que él es resistente si un procesado automatizado de máquina (como una herramienta Deobfuscator) no puede deshacer la ofuscación. Así es como la potencia difiere de la resiliencia, en lo que respecta a la ofuscación.

Después de un procedimiento de ofuscación, los requisitos de tiempo y espacio de un software o un código pueden cambiar. El tiempo de ejecución y los requisitos de espacio después de la transformación son los costos asociados con la ofuscación. Costos de cambios con el contexto. Esta transformación es muy poderosa ya que aumenta la complejidad, pero no tiene resiliencia, ya que puede deshacerse fácilmente por un des-obfuscator automatizado.

sigiloso: cuando los ingenieros inversos se encuentran con porciones de código que se destacan Entonces, es fácil para ellos usar métodos de des-obfuscación y centrarse en secciones que requieren trabajo. Sin embargo, si las áreas que han sido ofuscadas se mezclan con el resto del código, es difícil para los ingenieros inversos emplear métodos de obfuscación Los obfuscadores automatizados, por supuesto, fallarán. Esta capacidad de mezclar sin problemas con el resto del código y ser indetectable se conoce como “sigilo”.

Hay un grupo de técnicas de ofuscación que se dirigen a las diferentes partes de un programa, es decir, estructuras de datos como matrices , clases o variables. Es importante enumerar los diferentes métodos de ofuscación con ejemplos y analizar su calidad en función de las restricciones/límites mencionados anteriormente. Estos parámetros, como se mencionó anteriormente, son a) potencia b) resiliencia y c) costo (ver Tabla.1 Para una evaluación de estos métodos).

DESCUSCACIÓN
Un ingeniero inverso puede usar conocimiento de las estrategias empleadas por los ofuscadores conocidos para identificar predicados opacos o mediante la coincidencia de patrones. Para frustrar los intentos de coincidir con el obfuscador debe evitar el uso de construcciones opacas enlatadas (Collberg et al., ACM también es importante elegir construcciones opacas que sean sintácticamente similares a las construcciones utilizadas en la aplicación real.

Tabla1 .
Evaluación de la identificación de técnicas de ofuscación por corte del programa. La premisa básica de este documento es que un programador encontrará la versión ofuscada de un programa más oscura y, por lo tanto, más difícil de desobfuscar que la original.
La principal Las razones son que en el programa ofuscado
a) El código real en vivo se intercalará con un código falso muerto y
b) se habrá separado y dispersado lógicamente. > Las herramientas de corte del programa pueden ser utilizadas por un ingeniero inverso para contrarrestar estas ofuscaciones. Dichas herramientas pueden ayudar interactivamente al ingeniero a descomponer un programa en fragmentos manejables llamados “cortes”. Una porción de un programa P con respecto a un punto “P” y una variable “V” consiste en todas las declaraciones de “P” que podrían haber contribuido al valor de “V” en p. Por lo tanto, un programa de programas podría extraer del programa ofuscado las declaraciones del algoritmo que calcula una variable opaca “V” incluso si el ofuscador ha disperso estas declaraciones en todo el programa. Desventajas discutidas.
Seguridad monocapa (a diferencia de la capa múltiple)
Uno debe entender que los ofuscadores no vienen con ninguna garantía. No proporcionan ninguna garantía sobre el nivel de dificultad enfrentado cuando la ingeniería inversa ofuscó el código. La ofuscación no siempre proporciona soluciones sofisticadas como el cifrado actual. esquemas. Por lo tanto, uno no debe depender solo de la ofuscación, si la seguridad es una gran preocupación.
.
Depuración del código, mantenimiento.
Las expectativas y los requisitos de salida de un código pueden cambiar con el tiempo. Todo el código, en un momento u otro, requiere depuración. De cualquier manera, la ofuscación dificulta cambiar cualquier parte del código. Después de la ofuscación, el flujo de control, la estructura, los nombres variables y finalmente incluso el código de byte (transformación de código) cambia más allá del reconocimiento. Enfrentados con esto, los desarrolladores generalmente reservan el código no observado para su propio uso. El código ofuscado se publica al público. Este método de tener dos compilaciones separadas asegura que la depuración y el mantenimiento sigan siendo posibles. Por supuesto, la salida de ambos códigos debe ser idéntica. Java, ser y lenguaje intermedio, funciona desde el ensamblaje compilado, y no del código fuente. Por lo tanto, los programadores de Java no enfrentan esta limitación durante la ofuscación.

READ  Las mejores cámaras digitales impermeables

Conclusión
Si bien hay formas de código de ingeniería inversa, tales métodos no son rentables. Esto hace que la ofuscación del código sea una herramienta muy efectiva contra la piratería y el plagio.

Referencias
H. Chang y M. Atallah. Protección del código de software por parte de los guardias. En Sander [San02], páginas C. Collberg, C. Thomborson y D. Low. Taxonomía de las transformaciones ofuscantes. Informe técnico Departamento de Ciencias de la Computación, Universidad de Auckland, Nueva Zelanda, Julio S. Chow, Y. Gu, H. Johnson y V. Zakharov. Un enfoque de la ofuscación del flujo de control de los programas de computadora secuenciales. En G. Davida e Y. Frankel, editores, Seguridad de la información Volumen de ISC de Notas de conferencias en Ciencias de la Computación (LNC), páginas Springer-Verlag, Douglas Bajo Código de Java de protección a través de la ofuscación del código,
Departamento de Ciencias de la Computación, Universidad de Auckland . ACM Crossroads, problema de primavera.
C. Collberg, C. Thomborson y D. Low. Romper la abstracción y las estructuras de datos no estructurantes. En la Conferencia Internacional IEEE sobre lenguas informáticas (ICCL C. Collberg, C. Thomborson y D. Low, “Fabricación de construcciones opacas baratas, resistentes y sigilosas,” Simposio ACM Sigplan-Sigact sobre los principios de la programación, San Diego, CA, CA, CA, CA, CA, CA, Uspto website http://us.f603.mail.yahoo.com/ym/ShowLetter?box=Sent&MsgId;=4383_0_154814_642_33921_0_32369_113891_353197913_oSObkYn4Ur5HQV3r2mDutECd4kCHd7eCv.2aPlHy00mGxnNP2JZQLA357IiM5g2H6TINsViPjlrI0q.mZqJ2cLfHI2qbbiWnZdiUcl56N37s5UUKMV4regd.eoZ7HUoDoBwRz4bxLfiVcwvALfc http://us.f603.mail.yahoo.com/ym/ShowLetter? box = enviado y msgid; = 4383_0_154814_642_33921_0_32369_113891_353197913_OSOBKYN4UR5HQV3R2MDUTECD4KCHD7ECV.2APLHY00MGXNNP2JZA357IIM5G2HINSVIPIPIPIPIPIPIPIPIM QJ2CLFHI2QBBIWNZDIUCL56N37S5UUKMV4REGD.EOZ7HUODOBWRZ4BXLFIVCWVALFC

referencia: