Sie sind auf Seite 1von 3

INGENIERÍA INVERSA

Técnica utilizada, entre otras cosas, para llegar a conocer el funcionamiento de los
programas cuando no se dispone del código. ::Reconocer las bases de la ingeniería
inversa, incluyendo el funcionamiento de la memoria de los ordenadores, junto con
herramientas para la decompilación y el desensamblado de programas en lenguajes C y
Java::

La ingeniería inversa se puede definir como "desmontar o analizar en detalle las partes
de un determinado objeto o elemento, para descubrir cómo se pueden fabricar." En otras
palabras, la ingeniería inversa se refiere a descomponer algo para comprender cómo
funciona después de su reconstrucción. Por ejemplo, si tienes un automóvil, puedes
desmontarlo en partes individuales y luego, tratar de reconstruirlo. En este proceso, hay
que comprender dónde debe ubicarse cada parte del automóvil para finalmente
comprender cómo funciona el automóvil en global. Este concepto proviene del campo
del ingeniero mecánico. Fue introducido hace muchos años. Como ejemplo, Francis en
1988 señala que la práctica de la ingeniería inversa se basa en "comenzando con un
proceso o producto terminado y trabajando hacia atrás de manera lógica para descubrir
la nueva tecnología subyacente". Significa que la ingeniería inversa está relacionada con
el proceso de reconstrucción en lugar de desarrollar nuevas creaciones. De hecho, puede
describirse como un arte que requiere mucha práctica, experiencia...

Propósitos:

-herramienta de aprendizaje, porque cuando haces ingeniería inversa en algo entiendes


cómo funciona y si tiene algún tipo de fallo. 

-para desarrollar productos compatibles. Por ejemplo, si deseas implementar algún tipo
de característica en un programa cerrado y no extensible como Adobe Acrobat Reader,
puedes intentar realizar ingeniería inversa en esta aplicación para identificar cómo se
pueden integrar las características que se deseen desarrollar.

-puede ser útil para fines de interoperabilidad. Si, por ejemplo, deseas desarrollar una
aplicación de prueba de un programa determinado, es posible que tengas que
decompilar el programa para saber cómo funciona internamente y determinar las
funciones o métodos que deben llamarse. 

-Finalmente, puede haber características que no están documentadas en ciertas


aplicaciones y la ingeniería inversa puede ser un enfoque prometedor para
identificarlas. 

Metodología de la ingeniería inversa. Básicamente, se basa en la recopilación de datos


para hacer cumplir la ingeniería inversa. En el campo de la informática, se compone
principalmente de software sin importar el lenguaje de programación. Este proceso
puede ser bastante difícil en algunas circunstancias porque los desarrolladores pueden
no estar dispuestos a proporcionar fácilmente código de compilación o
desensamblado. Una vez que se recopilan los datos, se realiza su estudio. Este proceso
puede ser tedioso, especialmente si hay demasiados datos recopilados. Además, como
ya se mencionó, se requiere experiencia para obtener resultados exitosos en un tiempo
razonable. Los resultados del estudio permiten saber cómo funciona el software y/o
funciones o elementos que no funcionan como se esperaba. De hecho, es uno de los
usos más comunes de la ingeniería inversa, especialmente para piratas informáticos o
expertos que desean descubrir alguna característica oculta o vulnerabilidad en una
aplicación. En este sentido, la detección de fallos es una práctica común.

Ingeniería inversa: tipos y cuestiones legales


Hay diferentes formas de realizar ingeniería inversa, es decir, estática y dinámica. Sin embargo,
las cuestiones legales no pueden darse por sentadas y debemos prestar especial atención a las
limitaciones establecidas.

La ingeniería inversa se puede realizar en diferentes dispositivos y sistemas, por


ejemplo, una lavadora, un televisor, un pen drive... Sin embargo, aquí nos centramos en
el software, es decir, tratamos de analizar el código de un programa para saber cómo
funciona. La forma en que se realiza ingeniería inversa es distinta según los lenguajes
de programación, plataformas, procesadores... Por ejemplo, hacer ingeniería inversa en
un programa en Java debe hacerse con programas diferentes a si el programa está
desarrollado en C. Además, los resultados no son los mismos en procesadores x86 con
una arquitectura de 32 bits o en un procesador x64 con una arquitectura de 64 bits.
Puede que no haya demasiadas diferencias, pero no se logra exactamente el mismo
resultado. Vamos a trabajar en ingeniería inversa con programas desarrollados en Java y
en C en particular, con procesadores x86. Se pueden distinguir dos tipos de técnicas de
ingeniería inversa, estática y dinámica. Primero, la técnica estática consiste en estudiar
el sistema sin ser ejecutado. Ayuda a describir la estructura del sistema. En particular, se
pueden identificar las rutas de ejecución, así como la secuencia ordenada de
operaciones. Basado en el ejemplo, se puede estudiar el uso de una sentencia
condicional "IF". Se puede identificar qué operaciones se realizan en la cláusula
"THEN" o en la cláusula "ELSE". En cuanto a la técnica dinámica, consiste en analizar
el sistema en tiempo de ejecución. Facilita la identificación de dependencias, así como
encontrar fácilmente el código muerto. Hay que tener en cuenta que algunos de estos
programas también podrían identificarse aplicando una técnica estática, pero puede ser
tedioso, porque implicaría un análisis muy detallado de código. Además, hay
dependencias y código muerto que se pueden descubrir en tiempo de ejecución, como
los que dependen del estado del sistema o de factores contextuales. El ejemplo
propuesto muestra que realizar ingeniería inversa dinámica en una sentencia condicional
"IF" implicaría la especificación de un parámetro de entrada. Si introducimos los
parámetros de entrada "a" y "b", la cláusula "THEN" se ejecutará. Por el contrario, al
introducir el parámetro de entrada "c", se ejecuta la cláusula "else". Podemos observar
que, frente a la técnica estática, la dinámica facilita la identificación rápida de las rutas
de ejecución. Las cuestiones legales de la ingeniería inversa no se pueden dejar de lado.
Es una técnica legal pero se deben considerar algunas limitaciones. Por un lado, está
prohibido si la licencia lo indica. Por otro lado, está prohibida la difusión de
herramientas (creadas gracias a esta técnica) que pueden romper medidas de seguridad
que se hayan establecido. Sin embargo, el uso de la ingeniería inversa difiere de un país
a otro, aunque los temas mencionados son generales. Por ejemplo, en España, la
ingeniería inversa está permitida con fines de interoperabilidad, pero solo si no hay
forma más sencilla de lograrlo. Se han adoptado enfoques similares en países como
Reino Unido o en Japón. En resumen, teniendo en cuenta las leyes, debemos ser
sensibles a la hora de hacer ingeniería inversa. El hecho de ser ético o poco ético es un
tema controvertido y no hay una respuesta común. Lo importante es saber que la
ingeniería inversa proporciona beneficios como facilitar la interoperabilidad, pero esta
técnica, como muchas otras, en manos de usuarios ilegítimos puede convertirse en un
gran problema de seguridad.
¡Cuidado! Hacer ingeniería inversa de un programa no siempre está permitido.

Das könnte Ihnen auch gefallen