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 el razonamiento deductivo cómo un dispositivo, proceso, sistema o pieza de software creado previamente realiza una tarea con muy poco (si es que tiene alguno) una idea de cómo lo hace exactamente. Dependiendo del sistema que se considere y de 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 sobre 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, es posible que el proceso de ingeniería inversa no siempre se centre en crear una copia o cambiar el artefacto de alguna manera. Puede usarse 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 los sistemas heredados . [6] : 15  [7] Incluso cuando el producto sometido a 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 estrictas de los Estados Unidos y la Unión Europea, la legalidad del uso de técnicas específicas de ingeniería inversa para ese propósito ha sido fuertemente cuestionada en los tribunales de todo el mundo durante más de dos décadas. [9]

La ingeniería inversa del software puede ayudar a mejorar la comprensión del código fuente subyacente para el mantenimiento y mejora del software, se puede extraer información relevante para tomar una decisión para el desarrollo de software y las representaciones gráficas del código pueden proporcionar vistas alternativas con respecto al código fuente. que puede ayudar a detectar y corregir un error o vulnerabilidad de software. Con frecuencia, a medida que se desarrolla algún software, su información de diseño y mejoras se pierden 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, reduciendo así el coste total 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 inversió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 previsto su uso o revelar cómo se creó el producto de un competidor. [11] Ese proceso se utiliza comúnmente para "craquear" software y medios para eliminar su protección contra 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 hacker. . [11] : 8 

Los desarrolladores de malware suelen utilizar 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 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 

Hay otros usos de la ingeniería inversa:

Usos comunes

Máquinas

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 pieza física existente para su uso en CAD , CAM , CAE u otro software 3D . [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, normalmente representados como una nube de puntos , carecen de información topológica y de intención de diseño. El primero 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 producir dicha malla y recuperar la intención del diseño en términos de superficies analíticas simples cuando corresponda ( 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 comúnmente utilizado cuando NURBS y el modelado paramétrico se implementan juntos. El uso de una combinación de superficies geométricas y de forma libre puede proporcionar un poderoso método de modelado 3D . Se pueden combinar áreas de datos de forma libre 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 crear 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; costo estimado; 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 de reducción de costes.

Placas de circuito impreso

La ingeniería inversa de placas de circuito impreso implica recrear datos de fabricación para una placa de circuito 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.

Los PCB obsoletos suelen estar sujetos a ingeniería inversa, especialmente cuando realizan 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 realiza alguna tarea crucial, así como encontrar alternativas que proporcionen la misma función o actualizar la PCB antigua. [dieciséis]

Los PCB de ingeniería inversa siguen en gran medida la misma serie de pasos. Primero, las imágenes se crean dibujando, escaneando o tomando fotografías de la PCB. Luego, estas imágenes se trasladan 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. Los PCB más complicados requieren fotografías bien iluminadas sobre fondos oscuros, mientras que los 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 al inicial. Luego, finalmente se generan los esquemas del circuito utilizando una herramienta adecuada. [17]

Software

En 1990, el Instituto de Ingenieros Eléctricos y Electrónicos (IEEE) definió la ingeniería inversa (de software) (SRE) como "el proceso de analizar un sistema en cuestión para identificar los componentes del sistema y sus interrelaciones y crear representaciones del sistema en otra forma o en un nivel superior de abstracción" en el que el "sistema objeto" es el producto final del desarrollo de software. La ingeniería inversa es un proceso únicamente de examen y el sistema de software bajo consideración no se modifica, lo que de otro modo sería una 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]

Hay dos componentes en la ingeniería inversa: redocumentación y 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. Mientras tanto, 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 completamente la funcionalidad del producto. [10] También puede verse como "un retroceso en el ciclo de desarrollo". [18] En este modelo, el resultado de la fase de implementación (en forma de código fuente) se aplica ingeniería inversa a la fase de análisis, en una inversión del modelo de cascada tradicional . Otro término para esta técnica es comprensión de programas . [7] La ​​Conferencia de Trabajo sobre Ingeniería Inversa (WCRE) se lleva a cabo anualmente para explorar y ampliar las técnicas de ingeniería inversa. [11] [19] La ingeniería de software asistida por computadora (CASE) y la generación automatizada de código han contribuido en gran medida en el 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 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 ningún código fuente disponible para el software y cualquier esfuerzo por 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 la gente. La ingeniería inversa del software puede utilizar 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 generalmente 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 copia (" craqueo "), la elusión de las 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), las reparaciones o adaptaciones internas, la habilitación de características adicionales en hardware "lisiado" 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 del BIOS de PC no realizada por IBM , que lanzó la histórica industria de compatibilidad con PC de IBM que ha sido la plataforma de hardware de computadora abrumadoramente dominante durante muchos años. La ingeniería inversa del software está protegida en Estados Unidos por la excepción de uso legítimo de 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 aplicar ingeniería inversa a información no publicada sobre cómo El uso compartido de archivos de Windows funcionó para que las computadoras sin 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 una sala limpia mediante ingeniería inversa. homólogo de software libre ( GPL ). WindowsSCOPE permite aplicar ingeniería inversa al contenido completo 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 que en 1987 los Laboratorios Bell aplicaron ingeniería inversa al sistema Mac OS 4.1, que originalmente se ejecutaba en Apple Macintosh SE , para que pudiera ejecutarlo en sus propias máquinas RISC . [24]

Técnicas de software binario

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

  1. Análisis mediante 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 a una conexión de red de computadoras y revelar los datos de tráfico en el mismo. Luego se puede analizar el comportamiento del bus o de la red para producir una implementación independiente que imite ese comportamiento. Esto es especialmente útil para los controladores de dispositivos de ingeniería inversa . A veces, la ingeniería inversa en sistemas integrados se ve muy favorecida 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. Desmontaje mediante un desensamblador , lo que significa que el lenguaje de máquina sin formato del programa se lee y comprende en sus propios términos, sólo con la ayuda de mnemónicos 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 , proceso que intenta, con distintos resultados, recrear el código fuente en algún lenguaje de alto nivel para un programa sólo disponible en código de máquina o código de bytes .

Clasificación de software

La clasificación de software es el proceso de identificar similitudes entre diferentes binarios de software (como dos versiones diferentes del mismo binario) que se utiliza para detectar relaciones de código entre muestras de software. Tradicionalmente, la tarea se realizaba manualmente 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 una gran cantidad de muestras.

Este método se utiliza principalmente para tareas largas y exhaustivas de ingeniería inversa (análisis completo de un algoritmo complejo o una gran pieza de software). En general, la clasificación estadística se considera un problema difícil, lo que también se aplica a la clasificación de software, y hay muy pocas soluciones/herramientas que manejen bien esta tarea.

Código fuente

Varias herramientas UML se refieren al proceso de importar y analizar el código fuente para generar diagramas UML como "ingeniería inversa". 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 del Conocimiento (KDM). El estándar ofrece una ontología para la representación intermedia (o abstracta) de construcciones de lenguajes de programación y sus interrelaciones. Como estándar del Object Management Group (en camino de convertirse también en un estándar ISO), [ cita necesaria ] 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 código de bytes. Para el análisis del código fuente, la arquitectura de estándares granulares de KDM permite la extracción de flujos de sistemas 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 distintas capas de conocimiento del sistema para análisis detallados (como causa raíz, impacto) o análisis derivados (como extracción de procesos comerciales). Aunque los esfuerzos para representar construcciones de lenguajes 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 soportar el amplio conjunto de lenguajes, así como también evolución. KDM es compatible con UML, BPMN, RDF y otros estándares que permiten 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.

Protocolos

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

Tradicionalmente, los formatos de los mensajes se han sometido a ingeniería inversa mediante un tedioso proceso manual, que implicaba el análisis de cómo las implementaciones de protocolos procesan los mensajes, pero investigaciones recientes propusieron una serie de soluciones automáticas. [25] [26] [27] Por lo general, los enfoques automáticos agrupan los mensajes en grupos mediante el uso de varios análisis de agrupamiento , o emulan la implementación del protocolo rastreando el procesamiento de mensajes.

Ha habido menos trabajo en ingeniería inversa de máquinas de estado de protocolos. En general, las máquinas de estados 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 estados más general que acepte todas las secuencias de mensajes observadas, y de aprendizaje en línea , que permite la generación interactiva de sondeo. secuencias de mensajes y escuchar las respuestas a esas secuencias de sondeo. En general, se sabe que el aprendizaje fuera de línea de pequeñas máquinas de estados es NP-completo , [28] pero el aprendizaje en línea se puede realizar en tiempo polinomial. [29] Comparetti et al. han demostrado un enfoque automático fuera de línea. [27] y un enfoque en línea de Cho et al. [30]

Otros componentes de los protocolos típicos, como el cifrado y las funciones hash, también se pueden aplicar ingeniería inversa automáticamente. Normalmente, los enfoques automáticos rastrean la ejecución de las implementaciones de protocolos e intentan detectar buffers 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 productos químicos 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 descubrir cómo funciona. Los fabricantes de la tarjeta intentan ocultar claves y operaciones mezclando posiciones de memoria, como por ejemplo codificando el bus. [32] [33]

En algunos casos, incluso es posible conectar una sonda para medir voltajes mientras la tarjeta inteligente aún 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 equipos especiales que generalmente solo están disponibles para los grandes fabricantes de chips. Además, la rentabilidad de este ataque es baja, ya que a menudo se utilizan otras técnicas de seguridad, como cuentas ocultas. Todavía no está claro si los ataques contra tarjetas con chip y PIN para replicar datos cifrados y luego descifrar los 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 las imágenes con un SEM es unirlas, lo cual es necesario porque cada capa no se puede capturar con una sola toma. Un SEM 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 correctamente superpuesta de la capa completa.

A continuación, las capas cosidas deben alinearse porque la muestra, después del grabado, no se puede colocar exactamente en la misma posición en relación con el SEM cada vez. Por lo tanto, las versiones cosidas no se superpondrán de la manera correcta, como en el circuito real. Normalmente se seleccionan tres puntos correspondientes y en base a ellos se aplica una transformación.

Para extraer la estructura del circuito, es necesario segmentar las imágenes alineadas y unidas, 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 gente suele utilizar la ingeniería inversa para copiar tecnologías, dispositivos o información de otras naciones que han sido obtenidos por tropas regulares en el campo o mediante operaciones de inteligencia . Se utilizó a menudo durante la Segunda Guerra Mundial y la Guerra Fría . A continuación se muestran ejemplos bien conocidos de la Segunda Guerra Mundial y posteriores:

Redes genéticas

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 las perturbaciones. Por lo tanto, comprender la estructura y el comportamiento dinámico de las redes genéticas es uno de los principales desafíos 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. [39] Existen varios métodos para realizar ingeniería inversa en redes reguladoras de genes mediante el uso de métodos de biología molecular y ciencia de datos. Generalmente se han dividido en seis clases: [40]

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

A menudo, la confiabilidad de la red genética se prueba mediante experimentos de perturbación genética seguidos de modelos dinámicos, basados ​​en el principio de que eliminar un nodo de la red tiene efectos predecibles en el funcionamiento de los nodos restantes de la red. [41] Las aplicaciones de la ingeniería inversa de redes genéticas van desde la comprensión de los mecanismos de la fisiología de las plantas [42] hasta el descubrimiento de nuevos objetivos para la terapia contra el cáncer. [43]

Superposición con la ley de patentes

La ingeniería inversa se aplica principalmente para comprender un proceso o artefacto en el que su creador no ha aclarado la forma de su construcción, uso o procesos internos.

Los artículos patentados no necesitan en sí mismos someterse a ingeniería inversa para ser estudiados, ya que la esencia de una patente es que los inventores proporcionen ellos mismos una divulgación pública detallada 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 infringe patentes o derechos de autor .

Legalidad

Estados Unidos

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

La ingeniería inversa de software informático a menudo se incluye tanto en el derecho contractual como en el incumplimiento de contrato, así como en cualquier otra ley pertinente. Esto se debe a que la mayoría de los acuerdos de licencia de usuario final lo prohíben específicamente, y los tribunales estadounidenses han dictaminado que, si dichos términos están presentes, anulan la ley de derechos de autor que lo permite expresamente (ver Bowers v. Baystate Technologies [45] [46] ). 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", una término que cubre ampliamente otros dispositivos y programas que pueden interactuar con él, hacer uso de él y usar y transferir datos hacia y desde él de manera útil. Existe una exención limitada que permite compartir y utilizar el conocimiento así adquirido con fines de interoperabilidad. [a]

unión Europea

La Directiva de la UE 2009/24 sobre la protección legal de programas informáticos, que reemplazó a una directiva anterior (1991), [47] rige la ingeniería inversa en la Unión Europea . [48] ​​[b]

Ver también

Notas

  1. ^ La sección establece:
    (f) Ingeniería inversa.—
    (1) No obstante lo dispuesto en el inciso (a)(1)(A), una persona que haya obtenido legalmente el derecho a utilizar una copia de un programa de computadora podrá eludir una restricción tecnológica. medida que controla efectivamente el acceso a una porción particular de ese programa con el único propósito de identificar y analizar aquellos elementos del programa que son necesarios para lograr la interoperabilidad de un programa de computadora creado independientemente con otros programas, y que previamente no han estado fácilmente disponibles para la persona que participa en 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) Sin perjuicio de las disposiciones de 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 otorgada por una medida tecnológica, a fin de permitir la identificación y análisis conforme al párrafo (1), o con el propósito de permitir la interoperabilidad de un programa de computadora 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 bajo este título.
    (3) La información adquirida a través de los actos permitidos en virtud del párrafo (1), y los medios permitidos en virtud del párrafo (2), podrá ponerse a disposición de otros si la persona mencionada en el párrafo (1) o (2), según el caso sea, proporciona dicha información o medios únicamente con el fin de permitir la interoperabilidad de un programa informático creado de forma independiente con otros programas, y en la medida en que hacerlo no constituya una infracción 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 de computadora para intercambiar información y de dichos programas para utilizar mutuamente la información que se ha intercambiado.
  2. ^ La directiva dice:

    La reproducción, traducción, adaptación o transformación no autorizada de la forma del código en el que se ha puesto a disposición una copia de un programa de ordenador constituye una infracción de los derechos exclusivos del autor. Sin embargo, pueden existir 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 lo tanto, debe considerarse que, únicamente en estas circunstancias limitadas, la realización de actos de reproducción y traducción por o en nombre de una persona que tiene derecho a utilizar una copia del programa es legítima y compatible con el uso leal y, por lo tanto, debe ser se considerará que no requiere la autorización del titular del derecho. Un objetivo de esta excepción es permitir conectar todos los componentes de un sistema informático, incluidos los de diferentes fabricantes, para que puedan trabajar juntos. Esta excepción a los derechos exclusivos del autor no podrá utilizarse de manera que perjudique los intereses legítimos del titular de los derechos o entre en conflicto con la explotación normal del programa.

Referencias

  1. ^ ab "¿Qué es la ingeniería inversa? ¿Cómo funciona?". BuscarCalidaddelsoftware . Consultado el 27 de julio de 2022 .
  2. ^ "Ingeniería inversa". ética.csc.ncsu.edu . Consultado el 27 de julio de 2022 .
  3. ^ García, Jorge (diciembre de 2015). "Bloques sin construcción: un modelo de ingeniería inversa y heurística aplicable" (PDF) . Core.ac.uk. ​Consultado el 4 de junio de 2023 .
  4. ^ Thayer, Ken. "¿Cómo funciona la ingeniería inversa?". especificación global . Especificaciones globales IEEE . 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". Revista de la interfaz de la Royal Society . 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 de diseños: una taxonomía". Software IEEE . 7 (1): 13-17. doi : 10.1109/52.43044. S2CID  16266661.
  7. ^ ab Un estudio sobre ingeniería inversa y comprensión de programas. Michael L. Nelson, 19 de abril de 1996, ODU CS 551 – Encuesta de ingeniería de software. arXiv : cs/0503068v1
  8. ^ Vinesh Raja; Kiran J. Fernández (2007). Ingeniería inversa: una perspectiva industrial . Medios de ciencia y negocios de Springer. pag. 3.ISBN 978-1-84628-856-2.
  9. ^ Banda de Jonathan; Masanobu Katoh (2011). Interfaces en prueba 2.0 . Prensa del MIT. pag. 136.ISBN 978-0-262-29446-1.
  10. ^ abc Chikofsky, EJ; Cross, JH (enero de 1990). "Ingeniería inversa y recuperación de diseños: una taxonomía" (PDF) . Software IEEE . 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). Revertir: secretos de la ingeniería inversa . John Wiley e hijos. ISBN 978-0-7645-7481-8.
  12. ^ Grupo de trabajo de ingeniería de Internet RFC 2828 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; Martín, 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. ^ Guardián, 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 en 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 pruebas de componentes de software Black-Box: mediante técnicas de inferencia gramatical . Publicaciones académicas LAP LAMBERT. ISBN 978-3-659-14073-0.
  21. ^ Chuvakin, Antón; Cyrus Peikari (enero de 2004). Guerrero de seguridad (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). "El derecho y la economía de la ingeniería inversa". Revista de derecho de Yale . 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". 2001-11-27 . Consultado el 7 de mayo de 2009 .
  24. ^ Lee, Newton (2013). Contraterrorismo y ciberseguridad: conciencia total de la información (2ª ed.). Springer Ciencia + Medios comerciales. pag. 110.ISBN 978-1-4614-7204-9.
  25. ^ W. Cui, J. Kannan y HJ Wang. Discoverer: ingeniería inversa de protocolos automáticos a partir de rastros de red. En Actas del 16º Simposio de seguridad de USENIX sobre el Simposio de seguridad de USENIX, págs.
  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 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. ^ Oro, E (1978). "Complejidad de la identificación de autómatas a partir de datos determinados". 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 control y comando de botnets, Conferencia ACM 2010 sobre seguridad informática y de las comunicaciones.
  31. ^ Polyglot: extracción automática del formato de mensaje de protocolo mediante análisis binario dinámico. J. Caballero, H. Yin, Z. Liang y D. Song. Actas de la 14ª conferencia 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 muerto ] (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. ^ Yeam Gordon y Vladimir Rigmant, Tupolev Tu-4: superfortaleza soviética (Hinckley, Reino Unido: Midland, 2002).
  36. ^ "Cohete Redstone". centennialofflight.net . Consultado el 27 de abril de 2010 .
  37. ^ "La Fuerza Aérea China: conceptos, funciones y capacidades en evolución", Centro para el estudio de asuntos militares chinos (EE. UU.), por National Defense University Press, p. 277
  38. ^ Chandrashekar, S., R. Nagappa, L. Sundaresan y N. Ramani. 2011. Tecnología e innovación en China: un estudio de caso sobre el desarrollo de superaleaciones monocristalinas para álabes de turbinas de aviones, 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: Chinese Officials Defend New Fighter As Chinese Original, but Question Remain", Mic, 16 de diciembre de 2012, https://mic.com/articles/20270/china-j-15 -aviones-de-combate-funcionarios-chinos-defienden-el-nuevo-caza- [ enlace muerto permanente ] como-original-chino-pero-quedan-preguntas-
  39. ^ Giorgi, Federico M. (2020). "Ingeniería inversa de redes genéticas: la próxima generación". Biochimica et Biophysica Acta (BBA) - Mecanismos reguladores de genes . 1863 (6): 194523. doi :10.1016/j.bbagrm.2020.194523. hdl :11585/753853. ISSN  1874-9399. PMID  32145356. S2CID  212629142.
  40. ^ ab Mercatelli, Daniele; Scalambra, Laura; Tríboli, Luca; Rayo, Bosque; 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.
  41. ^ Tegner, J.; Yeung, MKS; Apresurado, J.; Collins, JJ (2003). "Redes de genes de ingeniería inversa: integración de perturbaciones genéticas con modelado dinámico". Procedimientos de la Academia Nacional de Ciencias . 100 (10): 5944–5949. Código Bib : 2003PNAS..100.5944T. doi : 10.1073/pnas.0933416100 . ISSN  0027-8424. PMC 156306 . PMID  12730377. 
  42. ^ 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 conversación cruzada sobre el estrés abiótico global". Fronteras en la ciencia vegetal . 3 : 294. doi : 10.3389/fpls.2012.00294 . ISSN  1664-462X. PMC 3533172 . PMID  23293646. 
  43. ^ Lefebvre, Céline; Rieckhof, Gabrielle; Califano, Andrea (2012). "Redes reguladoras humanas de ingeniería inversa". Revisiones interdisciplinarias de Wiley: biología y medicina de sistemas . 4 (4): 311–325. doi :10.1002/wsbm.1159. ISSN  1939-5094. PMC 4128340 . PMID  22246697. 
  44. ^ "Secretos comerciales 101", artículo destacado, marzo de 2011. ASME. Recuperado el 31 de octubre de 2013.
  45. ^ Discusión de Baystate contra Bowers. Utsystem.edu. Recuperado el 29 de mayo de 2011.
  46. ^ Bruto, Grant. (26/06/2003) Caso de contrato podría perjudicar la ingeniería inversa | Mundo desarrollador. Infomundo. Recuperado el 29 de mayo de 2011.
  47. ^ Directiva 91/250/CEE del Consejo, de 14 de mayo de 1991, sobre la protección jurídica de los programas informáticos. Eur-lex.europa.eu. Recuperado el 29 de mayo de 2011.
  48. ^ DIRECTIVA 2009/24/CE DEL PARLAMENTO EUROPEO Y DEL CONSEJO de 23 de abril de 2009 sobre la protección jurídica de los programas informáticos

Fuentes