stringtranslate.com

Ingeniería inversa

La ingeniería inversa (también conocida como ingeniería inversa o ingeniería inversa ) es un proceso o método mediante el cual se intenta comprender mediante razonamiento deductivo cómo un dispositivo, proceso, sistema o pieza de software previamente creado realiza una tarea con muy poca (o ninguna) comprensión de cómo lo hace exactamente. Dependiendo del sistema en consideración y las tecnologías empleadas, el conocimiento adquirido durante la ingeniería inversa puede ayudar a reutilizar objetos obsoletos, realizar análisis de seguridad o aprender cómo funciona algo. [1] [2] [3]

Aunque el proceso es específico del objeto en el que se realiza, todos los procesos de ingeniería inversa constan de tres pasos básicos: extracción de información, modelado y revisión. La extracción de información es la práctica de recopilar toda la información relevante para realizar la operación. El modelado es la práctica de combinar la información recopilada en un modelo abstracto, que puede usarse como guía para diseñar el nuevo objeto o sistema. La revisión es la prueba del modelo para garantizar la validez del resumen elegido. [1] La ingeniería inversa es aplicable en los campos de la ingeniería informática , la ingeniería mecánica , el diseño , la ingeniería electrónica , la ingeniería de software , la ingeniería química , [4] y la biología de sistemas . [5]

Descripción general

Existen muchas razones para realizar ingeniería inversa en diversos campos. La ingeniería inversa tiene su origen en el análisis de hardware para obtener ventajas comerciales o militares. [6] : 13  Sin embargo, el proceso de ingeniería inversa no siempre se ocupa de crear una copia o cambiar el artefacto de alguna manera. Puede utilizarse como parte de un análisis para deducir características de diseño de productos con poco o ningún conocimiento adicional sobre los procedimientos involucrados en su producción original. [6] : 15 

En algunos casos, el objetivo del proceso de ingeniería inversa puede ser simplemente una redocumentación de sistemas heredados . [6] : 15  [7] Incluso cuando el producto diseñado mediante ingeniería inversa es el de un competidor, el objetivo puede no ser copiarlo sino realizar un análisis de la competencia . [8] La ingeniería inversa también se puede utilizar para crear productos interoperables y, a pesar de algunas leyes de los Estados Unidos y la Unión Europea estrictamente adaptadas, la legalidad de utilizar técnicas específicas de ingeniería inversa para ese propósito ha sido objeto de acalorados debates en tribunales de todo el mundo durante más de dos décadas. [9]

La ingeniería inversa de software puede ayudar a mejorar la comprensión del código fuente subyacente para el mantenimiento y la mejora del software, se puede extraer información relevante para tomar una decisión sobre el desarrollo de software y las representaciones gráficas del código pueden proporcionar vistas alternativas con respecto al código fuente, lo que puede ayudar a detectar y corregir un error o vulnerabilidad del software. Con frecuencia, a medida que se desarrolla un software, su información de diseño y mejoras suelen perderse con el tiempo, pero esa información perdida generalmente se puede recuperar con ingeniería inversa. El proceso también puede ayudar a reducir el tiempo necesario para comprender el código fuente, lo que reduce el costo general del desarrollo del software. [10] La ingeniería inversa también puede ayudar a detectar y eliminar un código malicioso escrito en el software con mejores detectores de código. La reversión de un código fuente se puede utilizar para encontrar usos alternativos del código fuente, como detectar la replicación no autorizada del código fuente donde no estaba destinado a ser utilizado, o revelar cómo se construyó el producto de un competidor. [11] Ese proceso se utiliza comúnmente para "craquear" software y medios para eliminar su protección de copia , [11] : 7  o para crear una copia posiblemente mejorada o incluso una imitación , que suele ser el objetivo de un competidor o un pirata informático. [11] : 8 

Los desarrolladores de malware a menudo utilizan técnicas de ingeniería inversa para encontrar vulnerabilidades en un sistema operativo y crear un virus informático que pueda explotar las vulnerabilidades del sistema. [11] : 5  La ingeniería inversa también se utiliza en el criptoanálisis para encontrar vulnerabilidades en el cifrado de sustitución , el algoritmo de clave simétrica o la criptografía de clave pública . [11] : 6 

La ingeniería inversa tiene otros usos:

Usos comunes

Maquinas

A medida que el diseño asistido por computadora (CAD) se ha vuelto más popular, la ingeniería inversa se ha convertido en un método viable para crear un modelo virtual 3D de una parte física existente para su uso en CAD 3D , CAM , CAE u otro software . [14] El proceso de ingeniería inversa implica medir un objeto y luego reconstruirlo como un modelo 3D. El objeto físico se puede medir utilizando tecnologías de escaneo 3D como CMM , escáneres láser , digitalizadores de luz estructurada o escaneo CT industrial (tomografía computarizada). Los datos medidos por sí solos, generalmente representados como una nube de puntos , carecen de información topológica e intención de diseño. La primera se puede recuperar convirtiendo la nube de puntos en una malla de caras triangulares . La ingeniería inversa tiene como objetivo ir más allá de la producción de dicha malla y recuperar la intención de diseño en términos de superficies analíticas simples cuando sea apropiado ( planos , cilindros , etc.) así como posiblemente superficies NURBS para producir un modelo CAD de representación de límites . La recuperación de dicho modelo permite modificar un diseño para satisfacer nuevos requisitos, generar un plan de fabricación, etc.

El modelado híbrido es un término que se utiliza con frecuencia cuando se implementan conjuntamente NURBS y modelado paramétrico . El uso de una combinación de superficies geométricas y de forma libre puede proporcionar un método poderoso de modelado 3D . Las áreas de datos de forma libre se pueden combinar con superficies geométricas exactas para crear un modelo híbrido. Un ejemplo típico de esto sería la ingeniería inversa de una culata de cilindro, que incluye características de fundición de forma libre, como camisas de agua y áreas mecanizadas de alta tolerancia. [15]

Las empresas también utilizan la ingeniería inversa para incorporar la geometría física existente a entornos de desarrollo de productos digitales, para realizar un registro digital en 3D de sus propios productos o para evaluar los productos de la competencia. Se utiliza para analizar cómo funciona un producto, qué hace, qué componentes tiene, estimar costos, identificar posibles infracciones de patentes , etc.

La ingeniería de valor , una actividad relacionada que también utilizan las empresas, implica deconstruir y analizar productos. Sin embargo, el objetivo es encontrar oportunidades para reducir costos.

Placas de circuito impreso

La ingeniería inversa de placas de circuitos impresos implica recrear los datos de fabricación de una placa de circuitos en particular. Esto se hace principalmente para identificar un diseño y conocer las características funcionales y estructurales de un diseño. También permite descubrir los principios de diseño detrás de un producto, especialmente si esta información de diseño no está fácilmente disponible.

Las PCB obsoletas suelen ser objeto de ingeniería inversa, especialmente cuando cumplen funciones muy críticas, como alimentar maquinaria u otros componentes electrónicos. La ingeniería inversa de estas piezas antiguas puede permitir la reconstrucción de la PCB si cumple alguna tarea crucial, así como la búsqueda de alternativas que proporcionen la misma función o la actualización de la PCB antigua. [16]

La ingeniería inversa de las PCB sigue en gran medida la misma serie de pasos. Primero, se crean imágenes dibujando, escaneando o tomando fotografías de la PCB. Luego, estas imágenes se transfieren a un software de ingeniería inversa adecuado para crear un diseño rudimentario para la nueva PCB. La calidad de estas imágenes, necesaria para una ingeniería inversa adecuada, es proporcional a la complejidad de la propia PCB. Las PCB más complicadas requieren fotos bien iluminadas sobre fondos oscuros, mientras que las PCB bastante simples se pueden recrear simplemente con un dimensionamiento básico. Cada capa de la PCB se recrea cuidadosamente en el software con la intención de producir un diseño final lo más parecido posible al inicial. Luego, los esquemas del circuito se generan finalmente utilizando una herramienta adecuada. [17]

Software

En 1990, el Instituto de Ingenieros Eléctricos y Electrónicos (IEEE) definió la ingeniería inversa (SRE) (software) como "el proceso de analizar un sistema objeto para identificar los componentes del sistema y sus interrelaciones y crear representaciones del sistema en otra forma o en un nivel más alto de abstracción" en el que el "sistema objeto" es el producto final del desarrollo de software. La ingeniería inversa es un proceso de examen únicamente, y el sistema de software en cuestión no se modifica, lo que de otro modo sería reingeniería o reestructuración. La ingeniería inversa se puede realizar desde cualquier etapa del ciclo del producto, no necesariamente desde el producto final funcional. [10]

La ingeniería inversa tiene dos componentes: la redocumentación y la recuperación del diseño. La redocumentación es la creación de una nueva representación del código informático para que sea más fácil de entender. Por su parte, la recuperación del diseño es el uso de la deducción o el razonamiento a partir del conocimiento general o la experiencia personal del producto para comprender por completo su funcionalidad. [10] También puede considerarse como "retroceder a través del ciclo de desarrollo". [18] En este modelo, el resultado de la fase de implementación (en forma de código fuente) se somete a ingeniería inversa para volver a la fase de análisis, en una inversión del modelo tradicional en cascada . Otro término para esta técnica es comprensión del programa . [7] La ​​Conferencia de trabajo sobre ingeniería inversa (WCRE) se ha celebrado anualmente para explorar y ampliar las técnicas de ingeniería inversa. [11] [19] La ingeniería de software asistida por ordenador (CASE) y la generación automática de código han contribuido en gran medida al campo de la ingeniería inversa. [11]

La tecnología antimanipulación de software, como la ofuscación, se utiliza para impedir tanto la ingeniería inversa como la reingeniería de software propietario y de sistemas basados ​​en software. En la práctica, surgen dos tipos principales de ingeniería inversa. En el primer caso, el código fuente del software ya está disponible, pero se descubren aspectos de nivel superior del programa, que tal vez estén mal documentados o documentados pero ya no sean válidos. En el segundo caso, no hay código fuente disponible para el software y cualquier intento de descubrir un posible código fuente para el software se considera ingeniería inversa. El segundo uso del término es más familiar para la mayoría de las personas. La ingeniería inversa del software puede hacer uso de la técnica de diseño de sala limpia para evitar la infracción de derechos de autor.

En una nota relacionada, las pruebas de caja negra en ingeniería de software tienen mucho en común con la ingeniería inversa. El evaluador normalmente tiene la API , pero su objetivo es encontrar errores y características no documentadas atacando el producto desde afuera. [20]

Otros propósitos de la ingeniería inversa incluyen la auditoría de seguridad, la eliminación de la protección contra copias (" craqueo "), la elusión de restricciones de acceso a menudo presentes en la electrónica de consumo , la personalización de sistemas integrados (como los sistemas de gestión de motores), reparaciones o modernizaciones internas, la habilitación de características adicionales en hardware "limitado" de bajo costo (como algunos conjuntos de chips de tarjetas gráficas) o incluso la mera satisfacción de la curiosidad.

Software binario

La ingeniería inversa binaria se realiza si el código fuente de un software no está disponible. [11] Este proceso a veces se denomina ingeniería de código inverso o RCE. [21] Por ejemplo, la descompilación de binarios para la plataforma Java se puede lograr utilizando Jad. Un caso famoso de ingeniería inversa fue la primera implementación no IBM del BIOS de PC , que lanzó la histórica industria compatible con IBM PC que ha sido la plataforma de hardware de computadora abrumadoramente dominante durante muchos años. La ingeniería inversa de software está protegida en los EE. UU. por la excepción de uso justo en la ley de derechos de autor . [22] El software Samba , que permite que los sistemas que no ejecutan sistemas Microsoft Windows compartan archivos con sistemas que lo ejecutan, es un ejemplo clásico de ingeniería inversa de software [23] ya que el proyecto Samba tuvo que realizar ingeniería inversa de información no publicada sobre cómo funcionaba el intercambio de archivos de Windows para que las computadoras que no eran de Windows pudieran emularlo. El proyecto Wine hace lo mismo para la API de Windows , y OpenOffice.org es una de las partes que lo hace para los formatos de archivo de Microsoft Office . El proyecto ReactOS es aún más ambicioso en sus objetivos al esforzarse por proporcionar compatibilidad binaria (ABI y API) con los sistemas operativos Windows actuales de la rama NT, lo que permite que el software y los controladores escritos para Windows se ejecuten en un software libre ( GPL ) de ingeniería inversa en una sala limpia . WindowsSCOPE permite realizar ingeniería inversa de todo el contenido de la memoria activa de un sistema Windows, incluida una ingeniería inversa gráfica a nivel binario de todos los procesos en ejecución.

Otro ejemplo clásico, aunque no muy conocido, es el de 1987, cuando los Laboratorios Bell realizaron ingeniería inversa del sistema operativo Mac OS 4.1, que originalmente se ejecutaba en el Apple Macintosh SE , para poder ejecutarlo en sus propias máquinas RISC . [24]

Técnicas de software binario

La ingeniería inversa de software se puede realizar mediante varios métodos. Los tres grupos principales de ingeniería inversa de software son:

  1. Análisis a través de la observación del intercambio de información, más frecuente en la ingeniería inversa de protocolos, que implica el uso de analizadores de bus y rastreadores de paquetes , como para acceder a un bus de computadora o una conexión de red de computadoras y revelar los datos de tráfico en el mismo. El comportamiento del bus o la red se puede analizar para producir una implementación independiente que imite ese comportamiento. Esto es especialmente útil para la ingeniería inversa de controladores de dispositivos . A veces, la ingeniería inversa en sistemas integrados se ve muy asistida por herramientas introducidas deliberadamente por el fabricante, como puertos JTAG u otros medios de depuración. En Microsoft Windows , los depuradores de bajo nivel como SoftICE son populares.
  2. Desensamblado mediante un desensamblador , es decir, el lenguaje de máquina en bruto del programa se lee y se entiende en sus propios términos, solo con la ayuda de mnemotecnias de lenguaje de máquina . Funciona en cualquier programa de computadora, pero puede llevar bastante tiempo, especialmente para aquellos que no están acostumbrados al código de máquina. El desensamblador interactivo es una herramienta particularmente popular.
  3. Descompilación mediante un descompilador , un proceso que intenta, con resultados variables, recrear el código fuente en algún lenguaje de alto nivel para un programa sólo disponible en código máquina o bytecode .

Clasificación de software

La clasificación de software es el proceso de identificación de similitudes entre distintos binarios de software (como dos versiones diferentes del mismo binario) que se utiliza para detectar relaciones de código entre muestras de software. La tarea se hacía tradicionalmente de forma manual por varias razones (como el análisis de parches para la detección de vulnerabilidades y la infracción de derechos de autor ), pero ahora se puede realizar de forma algo automática para grandes cantidades de muestras.

Este método se utiliza principalmente para tareas de ingeniería inversa extensas y exhaustivas (análisis completo de un algoritmo complejo o de un software de gran tamaño). En general, la clasificación estadística se considera un problema difícil, lo que también es cierto para la clasificación de software, por lo que existen pocas soluciones o herramientas que se encarguen bien de esta tarea.

Código fuente

Varias herramientas UML denominan "ingeniería inversa" al proceso de importación y análisis de código fuente para generar diagramas UML. Consulte Lista de herramientas UML .

Aunque UML es un enfoque para proporcionar "ingeniería inversa", los avances más recientes en las actividades de estándares internacionales han dado como resultado el desarrollo del Metamodelo de Descubrimiento de Conocimiento (KDM). El estándar proporciona una ontología para la representación intermedia (o abstracta) de las construcciones del lenguaje de programación y sus interrelaciones. Un estándar del Object Management Group (en camino de convertirse también en un estándar ISO), [ cita requerida ] KDM ha comenzado a afianzarse en la industria con el desarrollo de herramientas y entornos de análisis que pueden ofrecer la extracción y el análisis de código fuente, binario y de bytes. Para el análisis del código fuente, la arquitectura de estándares granulares de KDM permite la extracción de flujos del sistema de software (datos, control y mapas de llamadas), arquitecturas y conocimiento de la capa empresarial (reglas, términos y procesos). El estándar permite el uso de un formato de datos común (XMI) que permite la correlación de las diversas capas de conocimiento del sistema para un análisis detallado (como causa raíz, impacto) o análisis derivado (como extracción de procesos empresariales). Aunque los esfuerzos por representar construcciones de lenguaje pueden ser interminables debido a la cantidad de lenguajes, la evolución continua de los lenguajes de software y el desarrollo de nuevos lenguajes, el estándar permite el uso de extensiones para respaldar el amplio conjunto de lenguajes, así como la evolución. KDM es compatible con UML, BPMN, RDF y otros estándares, lo que permite la migración a otros entornos y, por lo tanto, aprovechar el conocimiento del sistema para esfuerzos como la transformación del sistema de software y el análisis de la capa empresarial empresarial.

Protocolos

Los protocolos son conjuntos de reglas que describen los formatos de los mensajes y cómo se intercambian: la máquina de estados del protocolo . En consecuencia, el problema de la ingeniería inversa de protocolos se puede dividir en dos subproblemas: formato de mensajes e ingeniería inversa de la máquina de estados.

Los formatos de los mensajes han sido tradicionalmente diseñados a la inversa mediante un tedioso proceso manual, que implicaba el análisis de cómo las implementaciones de protocolo procesan los mensajes, pero investigaciones recientes propusieron una serie de soluciones automáticas. [25] [26] [27] Normalmente, el grupo de enfoques automáticos observa los mensajes en grupos mediante el uso de varios análisis de agrupamiento , o emula la implementación del protocolo rastreando el procesamiento del mensaje.

Se ha trabajado menos en ingeniería inversa de máquinas de estado de protocolos. En general, las máquinas de estado de protocolo se pueden aprender a través de un proceso de aprendizaje fuera de línea , que observa pasivamente la comunicación e intenta construir la máquina de estado más general que acepte todas las secuencias observadas de mensajes, y aprendizaje en línea , que permite la generación interactiva de secuencias de sondeo de mensajes y la escucha de respuestas a esas secuencias de sondeo. En general, se sabe que el aprendizaje fuera de línea de pequeñas máquinas de estado es NP-completo , [28] pero el aprendizaje en línea se puede realizar en tiempo polinomial. [29] Comparetti et al. [27] han demostrado un enfoque automático fuera de línea y Cho et al. [30] un enfoque en línea.

Otros componentes de los protocolos típicos, como las funciones de cifrado y hash, también pueden ser sometidos a ingeniería inversa de forma automática. Normalmente, los métodos automáticos rastrean la ejecución de las implementaciones de protocolos e intentan detectar los búferes en la memoria que contienen paquetes no cifrados. [31]

Circuitos integrados/tarjetas inteligentes

La ingeniería inversa es una forma invasiva y destructiva de analizar una tarjeta inteligente . El atacante utiliza sustancias químicas para eliminar capa tras capa de la tarjeta inteligente y toma fotografías con un microscopio electrónico de barrido (SEM). Esa técnica puede revelar la parte completa de hardware y software de la tarjeta inteligente. El principal problema para el atacante es poner todo en el orden correcto para averiguar cómo funciona todo. Los fabricantes de la tarjeta intentan ocultar claves y operaciones mezclando posiciones de memoria, como por ejemplo mediante la codificación de bus. [32] [33]

En algunos casos, incluso es posible conectar una sonda para medir voltajes mientras la tarjeta inteligente todavía está operativa. Los fabricantes de la tarjeta emplean sensores para detectar y prevenir ese ataque. [34] Ese ataque no es muy común porque requiere una gran inversión en esfuerzo y equipo especial que generalmente solo está disponible para los grandes fabricantes de chips. Además, la recompensa de este ataque es baja ya que a menudo se utilizan otras técnicas de seguridad como las cuentas ocultas. Todavía no se sabe con certeza si los ataques contra tarjetas con chip y PIN para replicar datos de cifrado y luego descifrar PIN proporcionarían un ataque rentable a la autenticación multifactor.

La ingeniería inversa completa se desarrolla en varios pasos importantes.

El primer paso después de tomar imágenes con un microscopio electrónico de barrido es unirlas, lo cual es necesario porque no es posible capturar cada capa con una sola toma. Un microscopio electrónico de barrido debe recorrer el área del circuito y tomar varios cientos de imágenes para cubrir toda la capa. La unión de imágenes toma como entrada varios cientos de imágenes y genera una única imagen superpuesta correctamente de la capa completa.

A continuación, es necesario alinear las capas unidas, ya que la muestra, después del grabado, no se puede colocar exactamente en la misma posición con respecto al SEM cada vez. Por lo tanto, las versiones unidas no se superpondrán de la manera correcta, como en el circuito real. Por lo general, se seleccionan tres puntos correspondientes y se aplica una transformación en función de eso.

Para extraer la estructura del circuito, las imágenes alineadas y unidas deben segmentarse, lo que resalta los circuitos importantes y los separa del fondo poco interesante y de los materiales aislantes.

Finalmente, se pueden rastrear los cables de una capa a la siguiente y se puede reconstruir la lista de conexiones del circuito, que contiene toda la información del circuito.

Aplicaciones militares

La ingeniería inversa se utiliza a menudo para copiar tecnologías, dispositivos o información de otras naciones que han sido obtenidos por tropas regulares en el campo o en operaciones de inteligencia . Se utilizó a menudo durante la Segunda Guerra Mundial y la Guerra Fría . A continuación se presentan ejemplos conocidos de la Segunda Guerra Mundial y posteriores:

Redes de genes

Los conceptos de ingeniería inversa también se han aplicado a la biología , específicamente a la tarea de comprender la estructura y función de las redes reguladoras de genes . Regulan casi todos los aspectos del comportamiento biológico y permiten que las células lleven a cabo procesos fisiológicos y respuestas a perturbaciones. Por lo tanto, comprender la estructura y el comportamiento dinámico de las redes de genes es uno de los desafíos primordiales de la biología de sistemas, con repercusiones prácticas inmediatas en varias aplicaciones que van más allá de la investigación básica. [42] Existen varios métodos para realizar ingeniería inversa de redes reguladoras de genes mediante el uso de métodos de biología molecular y ciencia de datos. En general, se han dividido en seis clases: [43]

Las seis clases de métodos de inferencia de redes genéticas, según [43]

A menudo, la confiabilidad de las redes genéticas se prueba mediante experimentos de perturbación genética seguidos de un modelado dinámico, basado en el principio de que la eliminación de un nodo de la red tiene efectos predecibles en el funcionamiento de los nodos restantes de la red. [44] Las aplicaciones de la ingeniería inversa de las redes genéticas van desde la comprensión de los mecanismos de la fisiología vegetal [45] hasta la identificación de nuevos objetivos para la terapia contra el cáncer. [46]

Superposición con la legislación sobre patentes

La ingeniería inversa se aplica principalmente a la comprensión de un proceso o artefacto en el cual la forma de su construcción, uso o procesos internos no ha sido explicada por su creador.

Los artículos patentados no tienen por qué ser sometidos a ingeniería inversa para ser estudiados, ya que la esencia de una patente es que los inventores proporcionen una divulgación pública detallada por sí mismos y, a cambio, reciban protección legal de la invención en cuestión. Sin embargo, un artículo producido bajo una o más patentes también podría incluir otra tecnología que no esté patentada ni divulgada. De hecho, una motivación común de la ingeniería inversa es determinar si el producto de un competidor contiene una infracción de patente o de derechos de autor .

Legalidad

Estados Unidos

En los Estados Unidos, incluso si un artefacto o proceso está protegido por secretos comerciales , la ingeniería inversa del artefacto o proceso suele ser legal si se ha obtenido legítimamente. [47]

La ingeniería inversa de software de computadora a menudo cae dentro del ámbito de aplicación tanto del derecho contractual como de cualquier otra ley pertinente. Esto se debe a que la mayoría de los contratos de licencia de usuario final la prohíben específicamente, y los tribunales estadounidenses han dictaminado que si existen tales cláusulas, prevalecen sobre la ley de derechos de autor que la permite expresamente (véase Bowers v. Baystate Technologies [48] [49] ). Según la Sección 103(f) de la Ley de Derechos de Autor del Milenio Digital (17 USC § 1201 (f)), una persona en posesión legal de un programa puede realizar ingeniería inversa y eludir su protección si eso es necesario para lograr la "interoperabilidad", un término que cubre ampliamente otros dispositivos y programas que pueden interactuar con él, hacer uso de él y utilizar y transferir datos hacia y desde él de maneras útiles. Existe una exención limitada que permite que el conocimiento así obtenido se comparta y utilice con fines de interoperabilidad. [a]

unión Europea

La Directiva 2009/24 de la UE sobre la protección jurídica de los programas de ordenador, que sustituyó a una directiva anterior (1991), [50] regula la ingeniería inversa en la Unión Europea . [51] [b]

Véase también

Notas

  1. ^ La sección establece:
    (f) Ingeniería inversa.—
    (1) No obstante lo dispuesto en la subsección (a)(1)(A), una persona que haya obtenido legalmente el derecho a usar una copia de un programa informático puede eludir una medida tecnológica que controle efectivamente el acceso a una parte particular de ese programa con el único propósito de identificar y analizar aquellos elementos del programa que sean necesarios para lograr la interoperabilidad de un programa informático creado independientemente con otros programas, y que no hayan estado previamente disponibles para la persona que realiza la elusión, en la medida en que dichos actos de identificación y análisis no constituyan una infracción en virtud de este título.
    (2) No obstante lo dispuesto en las subsecciones (a)(2) y (b), una persona puede desarrollar y emplear medios tecnológicos para eludir una medida tecnológica, o para eludir la protección brindada por una medida tecnológica, con el fin de permitir la identificación y el análisis en virtud del párrafo (1), o con el propósito de permitir la interoperabilidad de un programa informático creado independientemente con otros programas, si dichos medios son necesarios para lograr dicha interoperabilidad, en la medida en que hacerlo no constituya una infracción en virtud de este título.
    (3) La información adquirida mediante los actos permitidos en virtud del párrafo (1) y los medios permitidos en virtud del párrafo (2) puede ponerse a disposición de otros si la persona a que se refiere el párrafo (1) o (2), según sea el caso, proporciona dicha información o medios únicamente con el fin de permitir la interoperabilidad de un programa informático creado independientemente con otros programas, y en la medida en que hacerlo no constituya una infracción en virtud de este título ni viole la ley aplicable distinta de esta sección.
    (4) Para los fines de esta subsección, el término 「interoperabilidad」 significa la capacidad de los programas informáticos para intercambiar información y de dichos programas para utilizar mutuamente la información que se ha intercambiado.
  2. ^ La directiva establece:

    La reproducción, traducción, adaptación o transformación no autorizadas de la forma del código en que se ha puesto a disposición una copia de un programa de ordenador constituye una infracción de los derechos exclusivos del autor. No obstante, pueden darse circunstancias en las que dicha reproducción del código y traducción de su forma sean indispensables para obtener la información necesaria para lograr la interoperabilidad de un programa creado de forma independiente con otros programas. Por tanto, debe considerarse que, únicamente en estas circunstancias limitadas, la realización de los actos de reproducción y traducción por o en nombre de una persona que tenga derecho a utilizar una copia del programa es legítima y compatible con los usos leales y, por tanto, debe considerarse que no requiere la autorización del titular del derecho. Un objetivo de esta excepción es hacer posible la conexión de todos los componentes de un sistema informático, incluidos los de diferentes fabricantes, de modo que puedan funcionar juntos. Esta excepción a los derechos exclusivos del autor no puede utilizarse de forma que perjudique los intereses legítimos del titular del derecho o que entre en conflicto con la explotación normal del programa.

Referencias

  1. ^ ab "¿Qué es la ingeniería inversa? ¿Cómo funciona?" SearchSoftwareQuality . Consultado el 27 de julio de 2022 .
  2. ^ "Ingeniería inversa". ethics.csc.ncsu.edu . Consultado el 27 de julio de 2022 .
  3. ^ García, Jorge (diciembre de 2015). «Desbloqueos: un modelo de ingeniería inversa y heurísticas aplicables» (PDF) . Core.ac.uk. Consultado el 4 de junio de 2023 .
  4. ^ Thayer, Ken. "¿Cómo funciona la ingeniería inversa?". globalspec . IEEE Global Spec . Consultado el 26 de febrero de 2018 .
  5. ^ Villaverde, Alejandro F.; Banga, Julio R. (6 de febrero de 2014). "Ingeniería inversa e identificación en biología de sistemas: estrategias, perspectivas y desafíos". Journal of the Royal Society Interface . 11 (91): 20130505. doi :10.1098/rsif.2013.0505. PMC 3869153 . PMID  24307566. 
  6. ^ abc Chikofsky, EJ y Cross, JH II (1990). "Ingeniería inversa y recuperación del diseño: una taxonomía". IEEE Software . 7 (1): 13–17. doi :10.1109/52.43044. S2CID  16266661.
  7. ^ ab Una encuesta sobre ingeniería inversa y comprensión de programas. Michael L. Nelson, 19 de abril de 1996, ODU CS 551 – Encuesta sobre ingeniería de software. arXiv :cs/0503068v1
  8. ^ Vinesh Raja; Kiran J. Fernandes (2007). Ingeniería inversa: una perspectiva industrial . Springer Science & Business Media. pág. 3. ISBN 978-1-84628-856-2.
  9. ^ Jonathan Band; Masanobu Katoh (2011). Interfaces on Trial 2.0 . MIT Press. pág. 136. ISBN 978-0-262-29446-1.
  10. ^ abc Chikofsky, EJ; Cross, JH (enero de 1990). «Ingeniería inversa y recuperación del diseño: una taxonomía» (PDF) . IEEE Software . 7 : 13–17. doi :10.1109/52.43044. S2CID  16266661. Archivado desde el original (PDF) el 17 de abril de 2018. Consultado el 2 de julio de 2012 .
  11. ^ abcdefgh Eilam, Eldad (2005). Reversión: secretos de la ingeniería inversa . John Wiley & Sons. ISBN 978-0-7645-7481-8.
  12. ^ RFC 2828 del Grupo de trabajo de ingeniería de Internet Glosario de seguridad de Internet
  13. ^ Karwowski, Waldemar; Trzcielinski, Stefan; Mrugalsk, Beata; DiNicolantonio, Massimo; Rossi, Emilio (2018). Avances en fabricación, gestión de la producción y control de procesos . págs. 287–288.
  14. ^ Varady, T; Martin, R; Cox, J (1997). "Ingeniería inversa de modelos geométricos: una introducción". Diseño asistido por ordenador . 29 (4): 255–268. doi :10.1016/S0010-4485(96)00054-1.
  15. ^ "Ingeniería inversa".
  16. ^ Patel, Suresh (25 de agosto de 2022). "Ingeniería inversa de una placa de circuito impreso". Diseño electrónico . Consultado el 1 de febrero de 2024 .
  17. ^ Patel, Suresh (25 de agosto de 2022). "Ingeniería inversa de una placa de circuito impreso". Diseño electrónico . Consultado el 1 de febrero de 2024 .
  18. ^ Warden, R. (1992). Reutilización de software e ingeniería inversa en la práctica . Londres, Inglaterra: Chapman & Hall. págs. 283–305.
  19. ^ "Conferencia de trabajo sobre ingeniería inversa (WCRE)". uni-trier.de . Bibliografía informática. Archivado desde el original el 14 de marzo de 2017 . Consultado el 22 de febrero de 2018 .
  20. ^ Shahbaz, Muzammil (2012). Ingeniería inversa y prueba de componentes de software de caja negra: mediante técnicas de inferencia gramatical . LAP LAMBERT Academic Publishing. ISBN 978-3-659-14073-0.
  21. ^ Chuvakin, Anton; Cyrus Peikari (enero de 2004). Security Warrior (1.ª ed.). O'Reilly. Archivado desde el original el 22 de mayo de 2006. Consultado el 25 de mayo de 2006 .
  22. ^ Samuelson, Pamela y Scotchmer, Suzanne (2002). "The Law and Economics of Reverse Engineering". Yale Law Journal . 111 (7): 1575–1663. doi :10.2307/797533. JSTOR  797533. Archivado desde el original el 15 de julio de 2010 . Consultado el 31 de octubre de 2011 .
  23. ^ "Samba: una introducción". 27 de noviembre de 2001. Consultado el 7 de mayo de 2009 .
  24. ^ Lee, Newton (2013). Contraterrorismo y ciberseguridad: conciencia total sobre la información (2.ª ed.). Springer Science+Business Media. pág. 110. ISBN 978-1-4614-7204-9.
  25. ^ W. Cui, J. Kannan y HJ Wang. Discoverer: Ingeniería inversa automática de protocolos a partir de rastros de red. En Actas del 16.º Simposio de seguridad de USENIX, en el Simposio de seguridad de USENIX, págs. 1–14.
  26. ^ W. Cui, M. Peinado, K. Chen, HJ Wang y L. Irún-Briz. Tupni: Ingeniería inversa automática de formatos de entrada. En Actas de la 15.ª Conferencia de la ACM sobre seguridad informática y de las comunicaciones, págs. 391-402. ACM, octubre de 2008.
  27. ^ ab PM Comparetti, G. Wondracek, C. Kruegel y E. Kirda. Prospex: extracción de especificaciones de protocolo. En Actas del 30.º Simposio IEEE sobre seguridad y privacidad de 2009, págs. 110-125, Washington, 2009. IEEE Computer Society.
  28. ^ Gold, E (1978). "Complejidad de la identificación de autómatas a partir de datos dados". Información y Control . 37 (3): 302–320. doi : 10.1016/S0019-9958(78)90562-4 .
  29. ^ D. Angluin (1987). "Aprendizaje de conjuntos regulares a partir de consultas y contraejemplos". Información y computación . 75 (2): 87–106. doi : 10.1016/0890-5401(87)90052-6 .
  30. ^ CY Cho, D. Babic, R. Shin y D. Song. Inferencia y análisis de modelos formales de protocolos de comando y control de botnets, Conferencia ACM 2010 sobre seguridad informática y de comunicaciones.
  31. ^ Polyglot: extracción automática del formato de mensajes de protocolo mediante análisis binario dinámico. J. Caballero, H. Yin, Z. Liang y D. Song. Actas de la 14.ª conferencia de la ACM sobre seguridad informática y de las comunicaciones, págs. 317–329.
  32. ^ Wolfgang Rankl, Wolfgang Effing, Manual de tarjetas inteligentes (2004)
  33. ^ T. Welz: Tarjetas inteligentes como método de pago [ enlace roto ‍ ] (2008), Seminario ITS-Security Ruhr-Universität Bochum
  34. ^ David C. Musker: Protección y explotación de la propiedad intelectual en la electrónica Archivado el 9 de julio de 2011 en Wayback Machine , Conferencias IBC, 10 de junio de 1998
  35. ^ Francillon, René J. (1988) [1979]. McDonnell Douglas Aircraft since 1920 . Vol. 1 (2.ª ed.). Annapolis, Maryland: Naval Institute Press. págs. 265–268. ISBN 0-87021-428-4.
  36. ^ Westell, Freeman (noviembre de 1999). "Grandes aviones, grandes motores y mayores dolores de cabeza: la construcción de los primeros bombarderos estratégicos experimentales". Airpower . 29 (6): 18, 49–50.
  37. ^ Angelucci, Enzo; Matricardi, Paolo (1978). -Aviones de la Segunda Guerra Mundial: Volumen 2. Chicago: Rand McNally & Company. pág. 127. ISBN 0-528-88171-X.
  38. ^ Yeam Gordon y Vladimir Rigmant, Tupolev Tu-4: superfortaleza soviética (Hinckley, Reino Unido: Midland, 2002).
  39. ^ "Cohete Redstone". centennialofflight.net . Consultado el 27 de abril de 2010 .
  40. ^ "La Fuerza Aérea china: evolución de conceptos, roles y capacidades", Centro para el Estudio de Asuntos Militares de China (EE. UU.), por National Defense University Press, pág. 277
  41. ^ Chandrashekar, S., R. Nagappa, L. Sundaresan y N. Ramani. 2011. Tecnología e innovación en China: un estudio de caso del desarrollo de superaleaciones monocristalinas para álabes de turbinas de aeronaves, R4–11. Instituto Nacional de Estudios Avanzados del ISSSP, Bangalore. http://isssp.in/wp-content/uploads/2013/01/Technology-and-Innovation-in-China-A-case-Study-of-Single-Crystal4.pdf; y Dillon Zhou, "China J-15 Fighter Jet: Funcionarios chinos defienden el nuevo caza como si fuera original de China, pero quedan preguntas", Mic, 16 de diciembre de 2012, https://mic.com/articles/20270/china-j-15-fighter-jet-chinese-officials-defend-new-fighter- [ enlace muerto permanente ‍ ] como-original-de-china-pero-quedan-preguntas
  42. ^ Giorgi, Federico M. (2020). "Ingeniería inversa de redes genéticas: la próxima generación". Biochimica et Biophysica Acta (BBA) - Mecanismos reguladores de los genes . 1863 (6): 194523. doi :10.1016/j.bbagrm.2020.194523. hdl :11585/753853. ISSN  1874-9399. PMID  32145356. S2CID  212629142.
  43. ^ ab Mercatelli, Daniele; Scalambra, Laura; Triboli, Luca; Ray, Forest; Giorgi, Federico M. (2020). "Recursos de inferencia de redes reguladoras de genes: una descripción práctica". Biochimica et Biophysica Acta (BBA) - Mecanismos reguladores de genes . 1863 (6): 194430. doi :10.1016/j.bbagrm.2019.194430. ISSN  1874-9399. PMID  31678629. S2CID  207895066.
  44. ^ Tegner, J.; Yeung, MKS; Hasty, J.; Collins, JJ (2003). "Ingeniería inversa de redes genéticas: integración de perturbaciones genéticas con modelado dinámico". Actas de la Academia Nacional de Ciencias . 100 (10): 5944–5949. Bibcode :2003PNAS..100.5944T. doi : 10.1073/pnas.0933416100 . ISSN  0027-8424. PMC 156306 . PMID  12730377. 
  45. ^ Friedel, Swetlana; Usadel, Björn; von Wirén, Nicolaus; Sreenivasulu, Nese (2012). "Ingeniería inversa: un componente clave de la biología de sistemas para desentrañar la comunicación cruzada del estrés abiótico global". Frontiers in Plant Science . 3 : 294. doi : 10.3389/fpls.2012.00294 . ISSN  1664-462X. PMC 3533172 . PMID  23293646. 
  46. ^ Lefebvre, Celine; Rieckhof, Gabrielle; Califano, Andrea (2012). "Ingeniería inversa de redes reguladoras humanas". Wiley Interdisciplinary Reviews: Biología de sistemas y medicina . 4 (4): 311–325. doi :10.1002/wsbm.1159. ISSN  1939-5094. PMC 4128340 . PMID  22246697. 
  47. ^ "Trade Secrets 101", artículo destacado, marzo de 2011. ASME. Consultado el 31 de octubre de 2013.
  48. ^ Discusión sobre Baystate v. Bowers. Utsystem.edu. Recuperado el 29 de mayo de 2011.
  49. ^ Gross, Grant. (2003-06-26) Un caso contractual podría perjudicar la ingeniería inversa | Developer World. InfoWorld. Consultado el 29 de mayo de 2011.
  50. ^ Directiva 91/250/CEE del Consejo, de 14 de mayo de 1991, sobre la protección jurídica de programas de ordenador
  51. ^ Directiva 2009/24/CE del Parlamento Europeo y del Consejo, de 23 de abril de 2009, sobre la protección jurídica de programas de ordenador (versión codificada)

Fuentes