Logo Studenta

Introduccion-a-la-ingeniera-inversa

¡Este material tiene más páginas!

Vista previa del material en texto

UNIVERSIDAD NACIONAL AUTÓNOMA DE 
MÉXICO 
 
FACULTAD DE ESTUDIOS SUPERIORES ARAGÓN 
 
 
INGENIERÍA EN COMPUTACIÓN 
 
 
 
 
 
 
INTRODUCCIÓN A LA INGENIERÍA INVERSA 
 
 
 
 
 
TRABAJO ESCRITO EN LA MODALIDAD DE 
ALTO NIVEL ACADÉMICO PARA OBTENER EL 
TÍTULO DE INGENIERO EN COMPUTACIÓN 
 
 
P R E S E N T A: 
 
JOSÉ ALBERTO TREJO HERNÁNDEZ 
 
 
 
 
 
 
ASESOR: ING. SILVIA VEGA MUYTOY 
 
 
 
 MÉXICO 2010 
 
 
 
 
 
UNAM – Dirección General de Bibliotecas 
Tesis Digitales 
Restricciones de uso 
 
DERECHOS RESERVADOS © 
PROHIBIDA SU REPRODUCCIÓN TOTAL O PARCIAL 
 
Todo el material contenido en esta tesis esta protegido por la Ley Federal 
del Derecho de Autor (LFDA) de los Estados Unidos Mexicanos (México). 
El uso de imágenes, fragmentos de videos, y demás material que sea 
objeto de protección de los derechos de autor, será exclusivamente para 
fines educativos e informativos y deberá citar la fuente donde la obtuvo 
mencionando el autor o autores. Cualquier uso distinto como el lucro, 
reproducción, edición o modificación, será perseguido y sancionado por el 
respectivo titular de los Derechos de Autor. 
 
 
 
AgradecimientosAgradecimientosAgradecimientosAgradecimientos 
 
Gracias a DiosGracias a DiosGracias a DiosGracias a Dios 
Por permitirme concluir mi carrera y llegar hasta este momento tan importante de mi vida. 
 
Gracias a mis padresGracias a mis padresGracias a mis padresGracias a mis padres 
Por darme la estabilidad emocional, económica y sentimental; por su cariño, comprensión y apoyo incondicional para 
poder llegar hasta este logro que definitivamente, no sería realidad sin ustedes. Gracias por guiarme sobre el camino de la 
educación y por enseñarme que todo se aprende y que todo esfuerzo es al final recompensa. Serán siempre mi inspiración 
para alcanzar mis metas. 
 
GraciasGraciasGraciasGracias a Fabya Fabya Fabya Faby 
Por tu apoyo, compresión y gran amor que me permite sentir que puedo lograr lo que me proponga. Gracias por 
escucharme, por tus consejos y por ser parte de mi vida, eres lo mejor que me ha pasado. 
 
Gracias a todos mis amigosGracias a todos mis amigosGracias a todos mis amigosGracias a todos mis amigos 
Que estuvieron conmigo y compartimos tantas aventuras, experiencias, desveladas, triunfos y derrotas. Gracias a cada 
uno por hacer que mi estancia en la universidad fuera realmente dichosa. 
 
Gracias a cada uno de los maestrosGracias a cada uno de los maestrosGracias a cada uno de los maestrosGracias a cada uno de los maestros 
A la maestra Silvia Vega Muytoy por ser sustento y dirección de este trabajo de titulación, al maestro 
Marcelo Pérez Medel por todo el apoyo y conocimiento que me brindó. Y a todos los profesores que participaron en 
mi desarrollo profesional no sólo durante mi carrera sino de toda la vida, sin su ayuda e intelecto no estaría en donde me 
encuentro ahora. 
 
 
 
 
 
DDDDedicatoriaedicatoriaedicatoriaedicatoria 
 
 
 
 
 
 
 
 
 
 
 
Dedico la presente como agradecimiento al apoyo brindado durante estos años de estudio y como un reconocimiento 
de gratitud al finalizar esta carrera. En mí han quedado marcadas huellas profundas de este recorrido. 
Son madre, tu mirada y tu aliento. Son padre tu trabajo y esfuerzo. Son maestros sus palabras y sabios consejos: 
mi trofeo, que también es de ustedes. 
ÍNDICE 
 
Introducción………………………………………………………………..………...…....…I 
 
Capítulo 1 Conceptos Básicos 
1.1.- Breve Historia ………...………...………………………..…………………………....2 
1.2.- ¿Qué es la Ingeniería Inversa?........................................................................................3 
1.2.1- Objetivo y Beneficios de la Ingeniería Inversa……....………………..………….4 
1.2.2- Para qué sirve la Ingeniería Inversa………………..………………..……………5 
1.2.3- Tipos de Ingeniería Inversa………………………………………..……………...6 
1.3.- Herramientas de la Ingeniería Inversa...………………………………….……………9 
1.3.1- .Lenguaje Ensamblador…………...……………………………….……………..9 
1.3.2-. Depurador…………………………...………………………….………………11 
1.3.3.- Desensamblador…………………………………………………………..…….11 
1.3.4.- Compilador Inverso o Decompilador…………………………………….…….12 
1.3.5.- Editor Hexadecimal……………………………………………………….……12 
1.3.6.- Descompresor…………………………………………………………….…….13 
1.3.7.- Analizador de Archivos………………………………………………….……..13 
1.3.8.- Dumpeador de Memoria………………………………………………………..13 
1.3.9.- Monitor de Registros……………………………………………………….…..14 
1.3.10.- Emulador………………………………………………………………..……..14 
1.3.11.- Herramientas CASE…………………………………………………..……….14 
1.4.- Proceso de la Ingeniería Inversa……………………………………………………...15 
1.4.1.- Nivel de Abstracción…………………………………………………………...15 
1.4.2.- Completitud…………………………………………………………………….16 
1.4.3.- Interactividad……………………………………………………………….…..16 
1.4.4.- Direccionalidad…………………………………………………………..……..16 
1.4.5.- Historia y Evolución de las Técnicas de Ingeniería Inversa…………………....17 
1.4.6.- Estrategias para Implementar la Ingeniería Inversa………………………..…..18 
1.4.6.1.- Método 1 (Ingeniería Inversa)……………………………………….…...19 
1.4.6.2.- Método 2 (Ingeniería Inversa y las Interfaces de Usuario)……….….…...20 
1.4.6.3.- Método 3 (Ingeniería Social)…………………………………….……….21 
1.5.- ¿Cuándo Aplicar Ingeniería Inversa?………………………………….……………..23 
1.6.- Ingeniería Inversa y Protección del Software Mediante Derechos de Autor……..…..24 
 
Capítulo 2 Ejemplos y Aplicaciones 
 
2.1.- Programa Samba………………………………………………………………..…….30 
2.1.1- Historia de Samba……...………………………………………………………..30 
2.1.2.- ¿Qué es Samba?...................................................................................................31 
2.1.3.- ¿Qué permite Samba?..........................................................................................31 
2.1.4.- ¿Cómo funciona Samba?.....................................................................................31 
2.1.5.- Componentes de la “Suite” Samba……………………………………..………32 
2.2.- Ingeniería Inversa y los Números Mágicos……………………………………….….33 
2.2.1.- Paso a Paso…………………………………………………………………..….34 
2.2.2.- La genialidad que Oculta Ensamblador……………………………………..….37 
2.2.3.- Números Mágicos……………………………………………………………....39 
2.3.- Ingeniería Inversa y Prototipaje Rápido………………………………………….…..41 
2.4.- Ingeniería Inversa y El Hacking……………………………………………………...42 
 2.4.1.- ¿En qué consiste el Hacking?...............................................................................45 
2.5 Aplicaciones de la Ingeniería Inversa…………………………………………….……46 
2.6.- Ingeniería Inversa y Escaners 3D………………………………………………….…47 
 
Conclusiones………………………………………………………………………….…....49 
Glosario……………………………………………………………………………….....…50 
Bibliografía.……………………………………...……………………………………..….59 
 
 
 
 I
INTRODUCCIÓN 
 
La “Ingeniería Inversa” se ha definido como el método que permite elaborar de 
manera específica un mejor y mayor nivel de análisis de un sistema, software o 
cualquier otro producto terminado con el fin de desentrañar sus características de 
fabricación y diseño. Dichas características pueden volver a ser utilizadas para 
construir una nueva implementación del sistema utilizando, en la mayoría de los 
casos, técnicas de ingeniería directa logrando de esta manera, extraer los 
secretos o formas de producción de estos sistemas con el fin de adaptar y hacer 
compatible dicho producto con las necesidades requeridas donde, la “Ingeniería 
Inversa” puede ser definida en varios contextos de análisis de sistemas. 
 
El objetivo de este trabajo de investigación es dar una introducción a lo que se 
conoce como “Ingeniería Inversa” para inducir al lector en el contexto de este 
proceso y así poder ampliar sus conocimientos o iniciarlo en el tema. 
 
Cabe mencionar que no sólo se trata de generar interés en lectores que estén 
familiarizados en el campo de la ingeniería,sino también al público en general, sin 
embargo es recomendable contar con una serie de conocimientos básicos de 
informática para comprender mejor el uso de la “Ingeniería Inversa” ya que el 
campo de aplicación de ésta (desde sus inicios y hasta la actualidad) es basto y 
socorrido por los usuarios que la realizan, debido a que en los casos que es 
aplicable reduce costos y tiempo de diseño para generar un producto nuevo. 
 
Por otra parte, no se puede dejar de lado el punto de vista contrario (con el afán 
de dañar) ya que por ser una herramienta que se puede utilizar en el área de la 
seguridad, el mal uso de este proceso puede mostrar las vulnerabilidades de los 
sistemas que se involucran con lo cual, se podría dañar al propietario de dichos 
productos (principalmente software, hardware y manufactura). 
 
 II
Así mismo, se dará a conocer la postura legal política del tema, para destacar 
que la “Ingeniería Inversa” puede llegar a ser catalogada como un proceso lícito o 
ilícito dependiendo del uso que se le dé. 
 
A su vez, se cuestionará el asunto sobre las licencias y los términos de 
utilización que el usuario obtiene así como, diferentes maneras de proteger sus 
creaciones. 
 
En el capítulo 1 se hablará de lo que es la “Ingeniería Inversa”; en qué consiste, 
por quiénes es usada y aplicada, sus beneficios, ventajas y desventajas, casos 
recomendables para llevarla a cabo, así como también un par de métodos 
propuestos para su empleo y las herramientas básicas como lo son el lenguaje 
ensamblador, compiladores, decompiladores, editores de registros, entre otras que 
se requieren para lograr una correcta y adecuada aplicación dejando a criterio del 
lector y/o usuario el empleo que de ella hará. 
 
En el capítulo 2, se verá un proyecto llamado Samba que evidencia que este 
proceso tiene aplicaciones benéficas no sólo para quien lo pone en práctica sino 
también para los usuarios del sistema Samba. Así mismo, se podrá notar que la 
“Ingeniería Inversa” es apta para muchos productos, no sólo programas 
informáticos (software), aunque ésta es una de sus principales aplicaciones en la 
actualidad. 
 
 A su vez, se mostrará un claro ejemplo de la “Ingeniería Inversa” que consiste 
en el análisis de un programa llamado “Números Mágicos” que el autor explica 
paso a paso para entender su lógica en un proceso inverso así como también una 
muestra de la relación de la “Ingeniería Inversa” con el hacking y la utilización de 
ésta en la manufactura, la milicia, las empresas para generar productos 
competentes con sus adversarios de mercado con ayuda de herramientas como lo 
son los escaners 3D, aplicaciones de diseño asistido por computadora (CAD) con 
 III
las cuales se puede descubrir el proceso de producción de dichos productos sin 
necesidad de tener la documentación de diseño. 
 
Finalmente, después de explicar y delimitar los conceptos y funciones de la 
llamada “Ingeniería Inversa”, se complementará la investigación con un pequeño 
glosario que incluye términos técnicos implicados en este proceso para obtener 
una mayor comprensión del tema por parte del lector. 
CCAAPPÍÍTTUULLOO 11 
 
 
 
 
CCOONNCCEEPPTTOOSS 
BBÁÁSSIICCOOSS 
 
 
 
 
 
 2
1.1 Breve Historia 
 
El concepto de “Ingeniaría Inversa” se aproxima a los 58 años de edad ya que 
se estudia, produce y ejerce en Estados Unidos y otros lugares del mundo desde 
1952. 
 
En el caso de Estados Unidos, la “Ingeniería Inversa” es aplicada por un 
número elevado de personas entre las que se encuentran “una gran cantidad de 
científicos, peritos e ingenieros especialistas, astrónomos y militares, [que] se 
juntaron en un lugar de Nevada, que decidieron llamar “Área 51” 
(http://www.elobservatodo.cl/admin/render/noticia/13629, 2009), lugar que se 
encuentra en el centro de la Base de la Fuerza Aérea de Nellis en la cual se 
prueban aeronaves secretas y desconocidas dentro de una atmósfera 
completamente hermética, así como también se ha dedicado a estudiar el 
funcionamiento de algunas naves espaciales traídas de lugares anónimos; dicha 
zona se conoce con el nombre oficial de “Air Force Flight Test Center, Detachment 
3”.donde el gobierno estadounidense realiza lo que hoy en día se conoce como 
“Ingeniería Inversa”. 
 
Por otra parte, es importante mencionar que la “Ingeniaría Inversa” tiene su 
origen en el mundo del hardware: una empresa desensambla un producto de 
hardware competitivo en un esfuerzo por comprender los secretos de diseño y 
fabricación de su competidor ya que, dichos secretos se podrían entender con 
facilidad si se obtuvieran las especificaciones de diseño y fabricación del 
competidor pero, como es lógico, estos documentos son privados y por ende no 
están disponibles para la competencia, por lo cual se necesita aplicar “Ingeniería 
Inversa” que, si es aplicada con éxito, dará lugar a una o más especificaciones de 
diseño y fabricación para el producto mediante el examen de ejemplos reales del 
objeto. 
 
 3
En cuanto a lo que es “Ingeniería Inversa” en ámbitos de software, se puede 
decir que es un término relativamente nuevo. 
 
1.2 ¿Qué es la Ingeniería Inversa? 
 
La “Ingeniería Inversa” es un subproceso de la reingeniería, la cual tiene como 
misión descubrir los misterios y secretos de los sistemas en uso cuyo objetivo 
principal es recuperar el diseño de una aplicación u objeto a partir del código o 
pieza terminada, esto se logra mediante un proceso que se verá más adelante, 
pero ¿qué es la reingeniería? 
 
Se puede definir la reingeniería como el examen y alteración de un sistema de 
software o hardware para la recuperación del diseño de una aplicación u objeto 
existente que usa la información obtenida para reconstruir, mejorar la calidad y 
reducir el costo de su mantenimiento. 
 
A continuación se mencionan algunas definiciones de lo que es la “Ingeniería 
Inversa”: 
 
� La “Ingeniería Inversa” se ha definido como el proceso de construir 
especificaciones de un mayor nivel de abstracción partiendo del código 
fuente de un sistema software o cualquier otro producto (se puede utilizar 
como punto de partida cualquier otro elemento de diseño). 
(http://cnx.org/content/m17432/latest/, 2009). 
 
� Se conoce como “Ingeniería Inversa” o Reverse Engineering al 
proceso de duplicar una pieza, componente o conjunto, sin la ayuda de 
planos, documentación o modelos auxiliares. Se parte del modelo físico y 
se usan métodos de ingeniería de medida, análisis, diseño y adquisición de 
datos para finalmente obtener una réplica idéntica o mejorada del objeto. 
(http://bdigital.eafit.edu.co/bdigital/PROYECTO/P621.9023F634/capitulo1.pdf). 
 4
� En el contexto de software, Chikofsky y Cross establecen que la 
“Ingeniería Inversa” es el proceso de analizar un sistema para crear una 
representación del mismo pero a un nivel más elevado de abstracción. 
(http://www.iiisci.org/Journal/RISCI/pdfs/X581YP.pdf). 
 
� Hall establece que la “Ingeniería Inversa” es un proceso que recorre 
hacia atrás el ciclo de desarrollo de software. 
(http://www.securityc.com/eventos/presentaciones/Ingenieria%20Inversa.
pdf). 
 
� La “Ingeniería Inversa” es un proceso de asilar y analizar con detalle 
una obra de ingeniería con el objeto de obtener información relevante 
acerca de su diseño, implementación y funcionamiento. 
(http://www.securityc.com/eventos/presentaciones/Ingenieria%20Inversa.
pdf). 
 
De esta manera, el proceso es denominado “Ingeniería Inversa” debido a que 
va en dirección opuesta a las tareas habituales de la ingeniería ya que su proceso 
consiste en partir de datos técnicos a un determinado producto donde, si dicho 
producto es obtenido de manera apropiada, el proceso de “Ingeniería Inversa” es 
legítimo y legal y así, pueden crearse y destruirse productos genéricos creados y 
basados en la información obtenida una vez aplicado el método, un ejemplo claroes el software de uso libre. 
 
1.2.1 Objetivos y Beneficios de la Ingeniería Inver sa 
 
La aplicación de la “Ingeniería Inversa” nunca tendrá el objetivo de cambiar la 
funcionalidad de un programa o hardware, lo que busca es obtener información 
técnica de un producto accesible al público con el fin de determinar de qué está 
hecho, qué lo hace funcionar, y cómo fue fabricado; esto permite obtener los 
siguientes beneficios: 
 5
- Reducir la complejidad de los sistemas a través de la comprensión del 
software facilitando su mantenimiento y disminuyendo la complejidad 
existente. 
- Recuperar y/o actualizar información no documentada. 
- Generar diferentes alternativas para facilitar la comprensión de su código 
fuente o su algoritmo, mediante representaciones gráficas. 
- Detectar efectos laterales ya que los cambios que se pueden realizar en un 
sistema pueden provocar efectos no deseados y una serie de anomalías 
que sólo es posible detectar mediante el proceso de “Ingeniería Inversa”. 
- Facilitar la reutilización del sistema o partes de él con la posibilidad de 
aumentar la productividad y reducir los costos y riesgos de mantenimiento. 
 
Todos estos beneficios en conjunto conforman una serie de “secretos” 
contenidos en los sistemas, donde el papel de la “Ingeniería Inversa” es 
desentrañar dichos secretos empleando herramientas que pueden extraer los 
datos, procedimientos y arquitectura de los sistemas en análisis. 
 
1.2.2 Para qué sirve la Ingeniería Inversa 
 
La “Ingeniería Inversa” es útil para el desarrollo e industrialización de nuevos 
productos o modificación de lo ya existente, debido a que es necesario aprovechar 
y reutilizar todo lo relacionado con un producto que se encuentra en proceso de 
producción, para obtener una rápida y efectiva respuesta que satisfaga nuestras 
necesidades y las del mercado con productos de calidad e innovación y evitar el 
proceso de ingeniería tradicional el cual implicaría inversión de bastante tiempo, 
diseño de un producto, modelado, pruebas de factibilidad, funcionalidad y 
conformidad, además de un costo elevado, entre otras. 
 
Dicho proceso también facilita el seguimiento a los productos en fases 
posteriores a la fabricación como su mantenimiento y post-venta para así poder 
competir con los considerados mejores del mercado (benchmarking) evitando 
 6
invertir recursos en una investigación y desarrollo que posiblemente llevaría a un 
producto similar al que se encuentra en el mercado pero con un mayor costo. 
 
También es usada para comprobar la seguridad de un producto, generar 
keygens de aplicaciones, reparación de productos que sufren desgaste, etc. De 
esta forma la “Ingeniería Inversa” es utilizada tanto en el software como en el 
hardware para el desarrollo de productos compatibles con otros ya existentes sin 
la necesidad de conocer los detalles del desarrollo de éstos es decir; sin que el 
fabricante de los nuevos productos tenga acceso a los detalles de fabricación de 
los productos con que intenta ser compatible. 
 
La “Ingeniería Inversa” puede aplicarse de acuerdo al tipo de producto y se 
clasifica en: 
 
� Ingeniería Inversa de lógica o de procesos (Ingeniería para comprender 
el procesamiento) 
� Ingeniería Inversa de datos (Ingeniería Inversa para comprender los 
datos) 
� Ingeniería Inversa de interfaces de usuarios 
 
1.2.3 Tipos de Ingeniería Inversa 
 
• Ingeniería Inversa de lógica o de procesos (Ingenie ría Inversa para 
comprender el procesamiento) 
 
La primera actividad real de la “Ingeniería Inversa” comienza con un intento de 
comprensión y extracción de procedimientos representados por el código fuente o 
instrumento de diseño para obtener documentos de análisis o de requisitos. Para 
comprender las extracciones de procedimientos se analiza el código en distintos 
niveles de abstracción: sistema, programa, componente, configuración y 
sentencia. 
 7
 
Debe tenerse en cuenta que la funcionalidad general de todo el sistema de 
aplicaciones deberá ser algo perfectamente comprendido antes de que tenga lugar 
un trabajo de “Ingeniería Inversa” más detallado, para poder establecer un 
contexto de análisis posterior y así, proporcionar ideas generales acerca de los 
problemas de inter-operabilidad entre aplicaciones del sistema. 
 
Cada una de las aplicaciones de las que consta el sistema representará una 
abstracción funcional con un elevado nivel de detalle, y permitirá crear un 
diagrama de bloques, como representación de la interacción entre estas 
abstracciones funcionales, donde el ingeniero busca las secciones de código que 
representan las configuraciones genéricas de procedimientos. 
 
De esta manera, se nota que cada uno de los componentes efectúa una sub-
función, la cual representa una abstracción definida de procedimientos, donde una 
parte del código prepara los datos para su procesamiento, otra efectúa el 
procesamiento y una más prepara los resultados del procesamiento para 
exportarlos del componente. En el interior de cada una de estas secciones se 
encuentran configuraciones más pequeñas. 
 
Cuando se trata con sistemas grandes, la “Ingeniería Inversa” suele efectuarse, 
mediante el uso de un enfoque semi-automatizado con ayuda de las herramientas 
CASE, que son empleadas para “analizar” la semántica del código en cuestión, 
donde la salida de este proceso se pasa entonces a herramientas de 
reestructuración y de ingeniería directa, las cuales completarán el proceso de 
reingeniería. 
 
 
 
 
 8
• Ingeniería Inversa de datos (Ingeniería Inversa par a comprender los 
datos) 
 
Este tipo de ingeniería suele producirse a diferentes niveles de abstracción. En 
el nivel de programa, es preciso realizar una “Ingeniería Inversa” de las estructuras 
de datos internas del programa como parte del proceso de reingeniería. Ésta es 
aplicada a nivel del sistema sobre algún código de base de datos (aplicación, 
código SQL, etc.) y sus estructuras globales para ajustarlas a los paradigmas 
nuevos de gestión y obtener los modelos relacionales para obtener el diagrama 
entidad-relación y establecer el escenario para la introducción de una nueva base 
de datos que abarque todo el sistema y pueda ser aplicado en: 
 
� Estructuras de datos internas 
� Estructuras de bases de datos 
 
• Ingeniería Inversa de interfaces de usuario 
 
Ésta se aplica con el objeto de mantener la lógica interna del programa para 
obtener los modelos y especificaciones que sirvieron de base para la construcción 
de la misma, para tomarlas como punto de partida en procesos de ingeniería 
directa que permitan modificar dicha interfaz. 
 
Como las interfaces gráficas de usuarios (GUI) actualmente son sofisticadas, se 
vuelven de rigor para los productos basados en computadoras y para los sistemas 
de todo tipo, se debe responder a las siguientes cuestiones en cada caso: 
 
� ¿Cuáles son las acciones básicas que deberá procesar la interfaz? 
� ¿Cuál es la descripción compactada de la respuesta de 
comportamiento del sistema a estas acciones? 
� ¿Qué se quiere decir con “sustitución” o más preciso, qué concepto 
de equivalencia de interfaces es relevante en este caso? 
 9
 
Así mismo, la “Ingeniería Inversa” requiere de un proceso para su aplicación a 
través de una serie de herramientas. 
 
1.3 Herramientas de la Ingeniería Inversa 
 
Dentro de las cosas que debemos tener en cuenta y que son importantes para 
poder aplicar “Ingeniería Inversa” se encuentran: 
 
1.3.1 Lenguaje Ensamblador 
 
Es necesario tener noción de lo qué es un lenguaje ensamblador porque su 
funcionamiento permite llevar a cabo algunas instrucciones o pasos del proceso. 
 
Un lenguaje ensamblador es una colección de términos mnemónicos que 
pueden representar operaciones, nombres simbólicos, operadores y símbolos 
especiales; los cuales se utilizan para codificar los programas origen que serán 
procesadospor dicho ensamblador. 
 
Un ensamblador es un programa encargado de traducir el “programa fuente” 
que se encuentra escrito en ensamblador (mnemónicos) a un lenguaje máquina 
(binario) que ya entiende y puede ser ejecutado por el procesador; dichos 
mnemónicos dependen de la arquitectura del procesador. 
 
Algunas instrucciones de ensamblador son: 
 
Instrucciones de transferencia : Son utilizadas para mover los contenidos de 
los operandos. Cada instrucción se puede usar con diferentes modos de 
direccionamiento. 
MOV 
MOVS (MOVSB) (MOVSW) 
 10
 
Instrucciones de carga: Son instrucciones específicas de los registros. Son 
usadas para cargar en algún registro bytes o cadenas de bytes. 
LODS (LODSB) (LODSW) 
LAHF 
LDS 
LEA 
LES 
 
Instrucciones de la pila: Estas instrucciones permiten el uso de la pila para 
almacenar y extraer datos. Cada unas de éstas realiza una función específica. 
POP 
POPF 
PUSH 
PUSHF 
 
Ahora bien, se tienen varios tipos de ensambladores y pueden ser clasificados 
por su forma de trabajar en: 
 
De línea: Éstos ensamblan una sola línea a la vez del programa fuente. 
 
De archivos: Ensamblan todo un programa fuente completo previamente 
guardado en un archivo. 
 
Y también se pueden clasificar de acuerdo al tipo de información que procesan 
en: 
 
Propios o residentes: Éstos ensamblan programas escritos en el mismo 
lenguaje ensamblador del procesador de trabajo. 
 
 11
Cruzados: Ensamblan programas escritos en un lenguaje ensamblador distinto 
al del procesador de trabajo. 
 
Macroensambladores: Son ensambladores residentes que permiten la 
definición de macros y debido a su potencia normalmente son programas 
complejos y permanecen en memoria sólo hasta que se crea el programa objeto. 
 
1.3.1 Depurador 
 
Es un programa que se utiliza para controlar otros programas. Permite avanzar 
paso a paso por el código, rastrear fallos, establecer puntos de control y observar 
las variables y el estado de la memoria en un momento dado del programa que se 
esté depurando. Los depuradores son muy valiosos al momento de determinar el 
flujo lógico del programa. 
 
Un punto de ruptura (breakpoint) es una instrucción al depurador que permite 
parar la ejecución del programa cuando cierta condición se cumpla. Por ejemplo 
cuando un programa accede a cierta variable, o accede a cierta función de la API, 
el depurador puede parar la ejecución del programa. 
 
1.3.2 Desensamblador 
 
Se trata de una herramienta que carga archivos en código máquina y los 
convierte en archivos de texto en lenguaje ensamblador. El lenguaje ensamblador 
es una forma legible para los humanos del código máquina. Los 
desensambladores revelan qué instrucciones en el código máquina son usadas. El 
código máquina normalmente es específico para una arquitectura dada del 
hardware de manera que los desensambladores son escritos exclusivamente para 
la arquitectura del hardware o del software a desensamblar. 
 
 
 12
1.3.3 Compilador Inverso o Decompilador 
 
Es una herramienta que transforma un código ensamblador o código máquina 
en código fuente en lenguaje de alto nivel. También existen decompiladores que 
transforman lenguaje intermedio en código fuente en lenguaje de alto nivel. Estas 
herramientas son sumamente útiles para determinar la lógica a nivel superior 
como bucles o declaraciones if-then de los programas que son decompilados. Los 
decompiladores son parecidos a los desensambladores pero llevan el proceso a 
un grado más importante. 
 
1.3.4 Editor Hexadecimal 
 
Es un programa de computadora que permite modificar archivos binarios, que 
fueron creados con el fin de editar sectores de datos de disquetes o discos duros, 
por lo que también son llamados editores de sectores. 
 
En la mayoría de los editores hexadecimales, los datos del archivo son 
presentados como valores hexadecimales organizados en dos grupos de 8 bytes y 
un grupo de 16 caracteres ASCII. (Normalmente los caracteres no imprimibles se 
representan con un punto en ASCII). 
 
A través de este tipo de herramienta es posible conocer el contenido de 
cualquier tipo de archivo, imágenes, ejecutables, etc. así como el contenido de un 
disco duro. Quienes realizan cómputo forense usan esta herramienta para 
descubrir información oculta. 
 
Es importante hacer notar que no sólo es posible conocer el contenido de un 
archivo, sino que también se pueden modificar los datos que se consideran 
relevantes dentro de éste. Usando esta herramienta es posible cambiar una 
instrucción por otra si se conoce el código hexadecimal de la instrucción y dónde 
 13
se encuentra ubicada. Entre los editores hexadecimales más conocidos se pueden 
mencionar a Winhex, Hex, Ultraedit y Hacker's View. 
 
1.3.6 Descompresor 
 
Son aplicaciones que permiten obtener el ejecutable original antes de que fuera 
procesado por el compresor/cifrador o, por lo menos contar con una imagen 
descomprimida que pueda ser ejecutada o funcional. Ejemplo de este tipo de 
aplicaciones son Armadillo Kille, CUP, EXELOCK, PeUNLOCK, Deshrink. 
 
1.3.7 Analizador de Archivos 
 
Éstos proporcionan información sobre un archivo. En el caso de ejecutables 
pueden dar a conocer el tipo de plataforma para la cual fue compilada la 
aplicación. Si se conoce el tipo de plataforma se podrá elegir el desensamblador y 
depurador adecuado. El comando file de Linux es un ejemplo de este tipo de 
utilerías, así como File Inspector XL, EXEScan, GETTyp. FILE Info, Multi Ripper y 
Language 2000. 
 
1.3.8 Dumpeador de Memoria 
 
Éstos permiten vaciar el contenido de una región de la memoria RAM. Lo cual 
puede ser interesante ya que muchas aplicaciones almacenan información al 
arranque de la aplicación para consultarla periódicamente. Al conocer el contenido 
de la memoria es posible que se conozcan contraseñas utilizadas por la 
aplicación. Como ejemplos se pueden mencionar a AMDUump, LordPE DEeluex, 
ProcDump, Pupe. 
 
 
 
 
 14
1.3.9. Monitor de registros 
 
Son utilizados en aplicaciones que corren sobre Windows. Varias aplicaciones 
almacenan información en los registros de Windows y este tipo de herramienta 
permite conocer el contenido de los registros. 
 
1.3.10 Emulador 
 
Muestra en pantalla los registros, puertos, stacks, Dptr, Psw, Flags, y banco 
actual de registros en sistema binario y hexadecimal con la opción de que 
cualquier puerto o registro puede ser modificado por el usuario. Así mismo se 
puede ver la ejecución paso a paso o con puntos de ruptura, examinando y 
cambiando la RAM interna. 
 
1.3.11 Herramientas CASE 
 
Estas herramientas de sistemas asistidos por computadora (Computer Aided 
Systems Engineering - CASE) aplican la tecnología informática a las actividades, 
las técnicas y metodologías propias de desarrollo de sistemas para automatizar o 
apoyar una o más fases del ciclo de vida de los sistemas. En el caso de la 
“Ingeniería Inversa” éstas suelen mejorar el rendimiento y eficiencia del producto o 
sistema. 
 
Las anteriores son algunas de las herramientas básicas para llevar a cabo el 
proceso de “Ingeniería Inversa” pero no basta con tener esta gran variedad, sin 
embargo, hay que saber usarlas y en este sentido, existen diferentes 
metodologías para establecer dicho proceso. 
 
 
 
 
 15
1.4 Proceso de la Ingeniería Inversa 
 
Para llevar acabo la “Ingeniería Inversa” no existe un método como tal que 
especifique exactamente cómo efectuar el proceso, cada ingeniero que desea 
realizarlo propone sus estrategias de elaboración sin embargo, sí están definidos 
algunos elementos o enfoques que se deben tomar en cuenta para poder hacer 
correctamente el proceso de “Ingeniería Inversa” y extraer los datos requeridos: 
 
1.4.1 Nivel de Abstracción 
 
El nivel de abstracción de un proceso de “Ingeniería Inversa”, en conjunto con 
las herramientas que se utilizanpara llevarlo a cabo, determinan el refinamiento 
de la información en su diseño y que se puede extraer del código fuente. Se puede 
tener un nivel de abstracción ideal, si éste es lo más alto posible, es decir, que sea 
capaz de derivar: 
 
� Sus representaciones de diseño de procedimiento (con un bajo nivel de 
abstracción) 
� La información de las estructuras de datos y de programa (con un nivel 
de abstracción ligeramente más elevado) 
� Modelos de flujo de datos y de control (con un nivel de abstracción 
relativamente alto) 
� Modelos de entidades y relaciones (con un elevado nivel de 
abstracción). 
 
De esta manera se puede deducir que el ingeniero de software proporciona 
información que le permitirá comprender más fácilmente éstos programas a 
medida que crece el nivel de abstracción. 
 
 
 
 16
1.4.2 Completitud 
 
Ésta se refiere al nivel de detalle que se proporciona en un determinado nivel de 
abstracción, en la mayoría de los casos mientras más aumente el nivel de 
abstracción la completitud decrece. Por ejemplo dado un listado del código fuente, 
es relativamente sencillo desarrollar una representación del diseño de 
procedimientos completa. 
 
Así, se pueden derivar representaciones sencillas del flujo de datos, pero es 
mucho más difícil desarrollar un conjunto completo de diagramas de flujo de datos 
o un diagrama de transacción de datos. De tal forma que la completitud mejora en 
proporción directa a la cantidad de análisis realizado por la persona que lleva a 
cabo la “Ingeniería Inversa”. 
 
1.4.3 Interactividad 
 
Se refiere al grado en que el ser humano se “integra” o “involucra” con las 
herramientas automatizadas para crear un proceso de “Ingeniería Inversa” 
efectivo. En la mayoría de los casos, a medida que aumenta el nivel de 
abstracción la interactividad deberá aumentar de lo contrario la completitud será 
deficiente. 
 
1.4.4 Direccionalidad 
 
Ésta puede ser monodireccional o bidireccional. Es monodireccional, si se 
extrae toda la información del código fuente y es proporcional a la ingeniería del 
software para poder entonces, ser utilizada durante la actividad de mantenimiento 
y es bidireccional cuando la información se suministra a una herramienta de 
reingeniería la cual intentará reestructurar o regenerar el viejo programa. 
 
 17
Así pues, el núcleo de la “Ingeniería Inversa” está en una actividad denominada 
extracción de abstracciones, la cual consiste en que el ingeniero tiene que evaluar 
el programa viejo y a partir del código fuente (el cual comúnmente no está 
documentado) extraer una especificación significativa del procedimiento que se 
realizará, la interfaz del usuario que se aplicará y las estructuras de datos de 
programa o base de datos que se utilizarán. 
 
1.4.5 Historia y Evolución de las Técnicas de Ingen iería Inversa 
 
Desde el principio de la humanidad, la realización de copias de objetos ha sido 
una constante preocupación. Dicha realización admite y permite la generalización 
de aplicación a toda ciencia, la cual podría ser considerada como el proyecto de 
“Ingeniería Inversa” que busca discernir el diseño del universo en su conjunto y 
que permite a un gran número de personas beneficiarse con dicho proceso, ya 
que muchos de los productos fabricados en serie se basan en un prototipo o 
modelo único que sirve de patrón para lanzar la producción. A este respecto se 
puede mencionar el ejemplo de la evolución del sistema de copiado como proceso 
de “Ingeniería Inversa” y que a continuación se menciona: 
 
Hace 30 años que aparecieron las primeras máquinas copiadoras que eran con 
dos cabezales, uno de ellos equipado con un palpador que recorría las secciones 
de la pieza maestra, y el otro equipado con un cabezal de fresado que seguía la 
geometría que iba describiendo el palpador y copiaba la pieza sobre un bloque de 
material en bruto tratándose de pantógrafos adaptados a un proceso mecanizado. 
 
En los últimos 20 años, se ha conseguido un avance importante en el proceso 
del copiado, separándose la fase de digitalización del mecanizado mediante el uso 
de los sistemas de control numérico y automatizando el trabajo de digitalización 
que anteriormente se hacía a mano. Sin embargo, a últimas fechas, el desarrollo 
de los modernos sistemas de CAD/CAM han cambiado las necesidades de los 
 18
industriales, debido a que antes se requerían trabajos de simple copia y hoy en día 
son necesarias herramientas de “Ingeniería Inversa”. 
 
Así, esto que se le ha llamado “Ingeniería Inversa” es un procedimiento que 
viene de lejos y constituye el nacimiento de nuevas formas de producción y el 
acceso a diferentes sistemas funcionales, ejemplo de esto es que durante el siglo 
XX la copia de objetos 3D no hubiera sido posible sin la existencia de la 
“Ingeniería Inversa”. 
El problema del copiado reside en que se trata de un proceso en una sola 
dirección, ya que a partir de un modelo se generan los programas de mecanizado 
para reproducir las formas del modelo. 
Si se requiere saber el funcionamiento de programas o productos en general 
para poder llevar a cabo el proceso de capturar sus formas y detalles y 
posteriormente descubrir la forma de funcionamiento del sistema en cuestión, se 
puede aplicar diferentes modelos o métodos. 
 
1.4.6 Estrategias para Implementar la Ingeniería In versa 
 
Se iniciará por un modelo de procesos de reingeniería del software ya que la 
“Ingeniería Inversa” es sólo un paso o proceso para poder llevar a cabo la 
remodelación de un producto, debido a que el proceso completo se llama 
reingeniería el cual consiste en: 
 
Actividades de la reingeniería: 
1.- Análisis del inventario 
2.- Reestructuración de documentos 
3.- Ingeniería Inversa 
4.- Reestructuración del código 
5.- Reestructuración de datos 
6.- Ingeniería directa (foward Engineering) 
 
 19
1.4.6.1 Método 1 (Ingeniería Inversa) 
 
El método propuesto por el Instituto de Ingeniería de Software propone un 
marco de trabajo para llevar a cabo el proceso de “Ingeniería Inversa”. 
 
1.- Definición y delimitación del componente de sof tware 
 
Esta es la primera etapa del proceso y comprende la selección y evaluación de 
los componentes a los que se aplicará el proceso de “Ingeniería Inversa”. 
 
2.- Recolección de funcionalidades existentes 
 a. Documentación de casos de usos 
 
3.- Generación automática de diagramas de clase y d e paquete mediante una 
herramienta semi-automatizada CASE 
 
En esta parte del proceso se debe comprender la generación de: 
 a. Diagramas de clase 
 b. Diagramas de paquete 
Que se pueden realizar con ayuda de las herramientas CASE semi-
automatizadas, como por ejemplo el Jbuilder 9.0, Enterprise Architect o Rational 
Rose. 
 
4.-Análisis de código y relación entre paquetes 
 
Aquí se realiza el estudio por parte del analista para descubrir, con ayuda de la 
información obtenida hasta el momento, el funcionamiento del sistema pero a un 
nivel más detallado, siendo esta la parte más pesada de la técnica o metodología 
debido a que se involucra la pericia del analista para descubrir cómo funciona el 
sistema a partir de la poca o nula información que posee. 
 
 20
5.-Mapeo de requerimientos a paquetes y de ser posi ble a clases 
 
Esta parte es de suma importancia para la documentación de un software, 
producto o componente, ya que ésta facilita mucho la identificación cuando ocurre 
algo o simplemente se desea modificar una parte. Consiste en una tabla donde se 
ponen los requerimientos del sistema, los casos de uso involucrados y las clases o 
paquetes afectados así como también, se establece la relación entre todos estos 
elementos. 
Una vez que se tiene esta tabla (la cual será realizada a detalle según sea el 
caso) servirá en un futuro si se requiere modificar alguna parte del sistema e 
indicará qué casos de uso se verán afectados, así como los requerimientosque 
estarán involucrados en la modificación. 
Todo esto es de mucha ayuda para sistemas de gran tamaño, debido a que no 
se debe esperar a las pruebas de regresión para descubrir lo que se alteró. 
 
1.4.6.2 Método 2 (Ingeniería Inversa y las interfac es de usuario) 
 
Este método está basado en el uso de la “Ingeniería Inversa” de interfases de 
usuario, donde el objetivo es generar una documentación del sistema que permita 
tratamientos futuros, como lo son los aumentos en la funcionalidad lo cual 
representa extender el tiempo de vida del mismo. 
Por tal motivo, lo más conveniente es construir un modelo de casos de uso a 
partir del código fuente y la construcción de un grafo de relaciones, obteniendo de 
esta forma, una combinación de la vista conceptual y la vista de implementación 
con la posibilidad de ir de la vista de casos de uso hacia atrás (a los 
requerimientos) lo mismo hacia delante a las vistas lógicas y de proceso; esto con 
el fin de completar todas las vistas de la arquitectura del sistema. 
 
Teniendo como resultado el siguiente proceso o método para llevar a cabo la 
“Ingeniería Inversa” a través de las interfaces de usuario: 
 
 21
1.- Identificación de casos de uso de las GUI (Interfaz graficas de usuario). 
2.- Identificación de las relaciones entre casos de uso. 
3.- Construir un grafo con los casos de uso y sus relaciones. 
4.- Localización de los archivos de código fuente correspondientes a los casos 
de uso y las entidades de código fuente derivadas. Agregar estos artefactos a 
un grafo. 
5.- Identificación de las relaciones entre las entidades del código fuente. 
Conectar los artefactos de código fuente entre ellos y desconectarlos con el 
nivel anterior del grafo. 
6.- Generación de la versión final del grafo de relaciones. 
 
Si no se dispone del código ejecutable la “Ingeniería Inversa” se aplicará desde 
el código fuente. 
 
1.4.6.3 Método 3 (Ingeniería Social) 
 
Es un conjunto de técnicas y trucos empleados por los hackers e intrusos para 
extraer información sensible de usuarios de un sistema informático que se puede 
clasificar de la siguiente manera: 
 
Intrusos que se hacen pasar por empleados de otros departamentos de una 
empresa, proveedores de servicios de informática, de una operadora telefónica o 
de acceso a internet. Todo esto es posible mediante una llamada telefónica por la 
cual se solicita información de usuario y contraseña, para llevar a cabo 
determinado proceso o a través de una supuesta reparación del equipo en 
cuestión para así infiltrarse con el fin de obtener la información de interés. 
 
Correos Electrónicos que suponen ser de algún proveedor o administrador 
para obtener la contraseña y usuario del sistema, con el asunto de hacer una 
reparación o revisión en algún momento. 
 
 22
Usuarios de foros o chats mediante éstos se intenta conseguir acceso a 
determinados archivos sensibles del sistema o de configuración y medidas de 
seguridad del mismo, así como también protección de los equipos. 
 
“Shoulder surfing” consiste en mirar lo que teclean directamente los usuarios 
de la pc para obtener la contraseña y usuario deseados o información de interés 
particular. 
 
“Dumpster diving” consiste en la revisión de la basura en busca de papeles y 
documentos que no se destruyen de forma segura para obtener lo requerido. 
 
Instalación de sitios web falsos o maliciosos en la red que tratan de 
engañar al usuario para que teclee sus datos redirigiéndolo a un mensaje de error. 
Como esta es una técnica basada en la persuasión que podría aplicarse a diario 
“ganando la confianza de la gente”, es la más difícil de detectar ya que aplicada 
de manera maliciosa, manipuladora, engañosa y muy poco ética, puede tener 
efectos devastadores. 
En esta técnica el ser humano juega un papel importante debido a que es la 
puerta de entrada al sistema por medio de los diferentes procedimientos que se 
ven en la ingeniería social. 
A este respecto, se tiene de palabras de Kevin Mitnick (uno de los hackers más 
famosos de la historia) que: “usted puede tener la mejor tecnología, firewalls, 
sistemas de detección de ataques, dispositivos biométricos… lo único que se 
necesita es una llamada a un empleado desprevenido y acceden al sistema sin 
más. Tienen todo en sus manos.”(Citado por Álvaro Gómez, 2007, p. 78). 
 
Como se puede ver, las técnicas anteriores para aplicar “Ingeniería Inversa” son 
un tanto diferentes debido a que el método o estrategia a seguir depende de quien 
la aplique. Así como estas estrategias se podrían mencionar infinidad de métodos 
pero siempre siguiendo el mismo fin: desentrañar los secretos del funcionamiento 
del sistema de estudio. 
 23
1.5 ¿Cuándo Aplicar Ingeniería Inversa? 
 
El proceso de “Ingeniería Inversa” es un proceso estratégico, por lo cual se 
debe saber cuándo es conveniente aplicarla y cuándo es más pertinente sustituirla 
e implementar una nueva. Las aplicaciones para el primer paso de “Ingeniería 
Inversa” se pueden identificar si presentan las siguientes situaciones: 
 
1.- Fallos frecuentes con dificultad de localización 
2.- Realizan la actividad requerida pero con poca eficiencia o menor a la 
esperada 
3.- Dificultad para integrarse o interactuar con otros sistemas 
4.- Calidad pobre o baja en el diseño original 
5.- Resistencia a introducir cambios en el sistema 
6.- Pocas personas capacitadas para mantener o modificar el sistema 
7.- Dificultades para realizar pruebas 
8.- Mantenimiento que consume demasiados recursos 
9.- Necesidad de incluir nuevos requisitos manteniendo los básicos 
10.- Poca factibilidad para realizar cambios 
 
La “Ingeniería Inversa” es una metodología para analizar un dispositivo o 
sistema, la cual puede variar en su objetivo final ya que, como toda herramienta en 
el campo de seguridad, puede ser utilizada como un arma de dos filos, por un lado 
para conocer cómo funciona un sistema y así poder “burlar” su seguridad y hacer 
copias no legales y por otra, es útil para comprender su funcionamiento y de esta 
manera mejorar su rendimiento y funcionalidad. 
Respecto a intentar usar la “Ingeniería Inversa” de manera ilegal, existen reglas 
o leyes que castigan dicho uso y que se verán a continuación: 
 
 
 
 
 24
1.6 Ingeniería Inversa y Protección del Software M ediante Derechos de Autor 
 
Los derechos de autor constituyen hoy en día la forma principal de protección 
legal del software como bien inmaterial, resultado de la creatividad humana. La 
Ley de Protección Intelectual (LPI) contempla su protección como obra literaria e 
incluye los programas en la lista no exhaustiva de obras protegidas. 
Aunque post-programas de computadora no encajen a la perfección en esta 
figura legal, dicha protección ofrece los siguientes beneficios: 
 
� Una protección automática : Los derechos de autor nacen por el mero 
hecho de la creación original. 
� Una protección internacional : La protección se ofrece en casi todo el 
mundo, en virtud de tratados internacionales como los de Berna, el ADPIC 
(TRIPS en inglés) y los acuerdos OMPI (WIPO), así como también las 
directivas europeas. 
� Una protección simple y económica : No hace falta realizar solicitudes ni 
registrar la obra (y pagar las correspondientes tasas y honorarios legales) 
para obtener la protección. 
� Una protección limitada : La protección es limitada en el tiempo y a la 
expresión de las ideas y principios (el código escrito). La limitación de la 
protección a esta “expresión” permite la creación de software interoperable 
y/o compatible por un lado y la creación nueva de una misma funcionalidad 
por el otro, por ejemplo a partir de una “Ingeniería Inversa” o especificación 
independiente de un software inicial (una patente impediría esta 
recreación). 
 
Los derechos de propiedad intelectual (DPI) protegen el programa en cualquiera 
de sus expresiones posibles (Códigofuente y objeto) en su totalidad, además la 
LPI amplía la protección a la documentación preparatoria, así como a la 
documentación técnica y manuales de uso. Lo que no protege es la idea y los 
principios y esto permite aplicar “Ingeniería Inversa” a un producto o a la creación 
 25
de programas con funcionalidades similares como se puede ver en el siguiente 
artículo de la ley de protección intelectual: 
 
Artículo 96. TRLPI 
 
1.- A los efectos de la presente ley, se entenderá por programa de computadora 
toda secuencia de instrucciones o indicaciones destinadas a ser utilizadas directa 
o indirectamente, en un sistema informático para realizar una función o para 
obtener un resultado determinado en cualquiera que fuere su forma de expresión y 
fijación. 
 A los mismos efectos, la expresión programas de computadora 
comprenderá también su documentación preparatoria. La documentación técnica y 
los manuales de uso de un programa gozarán de la misma protección que este 
título dispensa a dichos programas. 
 
2.- El programa de computadora será protegido únicamente si es original, en el 
sentido de ser una creación intelectual propia de su autor. 
 
3.- La protección prevista en la presente ley se aplicará a cualquier forma de 
expresión de un programa de computadora. 
Esta definición incluye cualquier tipo de “secuencia de instrucciones”, por lo 
tanto incluye como ejemplos: 
 
� Sistemas operativos, programas “estándares” de uso general, programas 
desarrollados a medida. 
� Librerías y otros componentes de software, scripts, servlets, Java Beans, 
Stored Procedures, motores de bases de datos (pero no el contenido de las 
mismas). 
� Entornos de desarrollo (IDE’s, por ejemplo el JDK de Sun, .NET de MSFT) y 
de ejecución (runtime engines). 
� Instrucciones incorporadas en los chips. 
 26
� Programas que soportan las redes de telecomunicaciones (routers, 
switches, servidores). 
 
Los derechos de autor protegerán los siguientes elementos, siempre que 
tengan un suficiente nivel de creatividad u originalidad: 
 
� El código fuente del programa 
� El código objeto del programa 
� Los iconos, gráficos e imágenes incluidos en el programa 
� Cualquier documentación relativa al software (documentación preparatoria, 
los diseños, los manuales de instalación o de usuario, las capturas de 
pantalla) 
� Los “guiones” o scripts de compilación e instalación 
� Versiones sucesivas de un programa 
 
4. No estarán protegidos mediante los derechos de autor con arreglo a la 
presente ley, las ideas y principios en los que se basan cualquiera de los 
elementos de un programa de computadora incluidos los que sirven de 
fundamento a sus interfaces. 
 
Los titulares 
 
El titular de los derechos de autor será el autor o grupo de autores originales de 
la obra. Hay una presunción de que el autor es la persona identificada que “firma” 
la obra. 
 
La figura de “autor” incluirá no solamente al programador que escribe el código 
del programa, sino también al diseñador del programa siempre que sus 
contribuciones hayan sido significativas. Por otro lado, no incluye necesariamente: 
 
 27
Una persona que realice pruebas y notifique errores en el programa, una 
persona que haya establecido las especificaciones del programa, excepto en la 
medida que dichas personas hayan participado activamente en crear el programa. 
 
Las excepciones son las obras creadas bajo una relación laboral, en este caso 
la empresa será titular de los derechos de explotación y programas creados en 
circunstancias que den lugar a la naturaleza “colectiva” del programa, en cuyo 
caso el editor/divulgador de la obra ostentará los derechos de explotación. 
 
Los derechos 
 
Los derechos de explotación reservados exclusivamente al autor de un 
programa de computadora son los siguientes actos: 
 
� La reproducción total o parcial: la copia, por cualquier medio y bajo 
cualquier forma, ya sea de manera permanente o transitoria. 
� La distribución pública: la transmisión del programa a un tercero por la 
venta, el alquiler o cualquier otra forma. 
� Transformación: traducción, adaptación, arreglo o cualquier otra 
transformación del programa. 
 
La ley establece algunos límites a estos derechos, que son los siguientes: 
 
� Límite temporal: La duración de los derechos de autor, de acuerdo a la 
OMPI, es la vida de su autor más setenta años si éste muere después de 
1987 y ochenta años si murió antes de dicho año. 
� Límites aplicables al usuario legítimo: es decir, alguien que tiene un 
derecho de uso: 
 
� Reproducir, transformar y corregir errores pero sólo en la medida 
necesaria para utilizar el programa. 
 28
� Realizar una copia de seguridad. 
� Analizar el programa, pero sólo mientras se utiliza para obtener 
información con fines de interoperabilidad (y sujeto a ciertas 
condiciones). 
 
Cesión de derechos 
 
El titular original puede ceder los derechos a un tercero por contrato de cesión 
(o licencia exclusiva) sujeto a diferentes condiciones libremente pactadas. Aquí 
entran en juego las licencias de software y en particular las licencias libres. 
 
Formas de protección 
 
La LPI establece varias medidas de protección de estos derechos, incluyendo 
acciones administrativas, civiles (incluso solicitar medidas cautelares) y penales. 
La tutela civil incluye acciones por infracción de los mencionados derechos de 
autor y la LPI prohíbe también la puesta en circulación de copias ilegales, su 
posesión por fines comerciales o la puesta en circulación o posesión de medios 
específicamente destinados a facilitar la supresión o neutralización de dispositivos 
técnicos de protección del software. 
 
Los derechos de autor están protegidos también por el Derecho Penal. El 
Código Penal castiga en su Artículo 270 (y otros) la reproducción, plagio, 
distribución y comunicación pública con ánimo de lucro y sin autorización de los 
correspondientes titulares de las obras protegidas por derechos de autor. 
 
Como se puede ver, siempre que se utilice “Ingeniería Inversa” con fines de 
lucro, ésta será penada a menos de que se utilice con fines de mejorar el 
producto, generar otro compatible con el original adaptándolo a las necesidades 
requeridas o con fines educativos. 
 
CCAAPPÍÍTTUULLOO 22 
 
 
EEJJEEMMPPLLOOSS YY 
AAPPLLIICCAACCIIOONNEESS 
 
 
 
 
 
 
 
 
 
 
 
 
 
 30
Desde el punto de vista de que la “Ingeniería Inversa” es una necesidad actual 
para la creación de nueva tecnología basada en una productividad con menores 
costos y tiempos de desarrollo, en este capítulo se muestran algunos ejemplos 
que permiten mostrar el alcance de este proceso de ingeniería no sólo en el 
software, sino también en las manufacturas (hardware) comenzando con el 
programa llamado Samba, el cual, muestra la aplicación de la “Ingeniería Inversa” 
en uso público. También el desarrollo de un método en un programa determinado 
para conocer cómo se lleva a cabo el proceso de “Ingeniería Inversa” y su relación 
con el hacking y por último, el apoyo de herramientas de diseño asistido por 
computadora (CAD) para realizar un “prototipaje” rápido concluyendo así, con 
algunos de los ejemplos más conocidos de los procesos de manufactura. 
 
2.1 Programa Samba 
 
El programa Samba es un claro ejemplo de “Ingeniería Inversa” dado que 
permite a sistemas operativos Unix compartir archivos con sistemas Microsoft 
Windows. El proyecto Samba tuvo que averiguar información clasificada (no 
liberada al público) sobre los aspectos técnicos relacionados con el sistema de 
archivos Windows. 
 
2.1.1 Historia de Samba 
 
Este proyecto se origina en 1991 con la idea de Andrew Tridgell, que en la 
actualidad es el líder de dicho proyecto en Australia. 
Samba fue diseñado originalmente para Unix cuando Andrew crea un sistema 
servidor de archivos para su red local utilizando un sniffer,capturando paquetes y 
aplicando “Ingeniería Inversa” con lo cual logró soportar el protocolo DEC de 
Digital Path. 
 
Tiempo más tarde, dicho protocolo se convertiría en SMB, el cual fue adoptado 
por Microsoft, cuyo nombre proviene de la inserción de dos vocales al protocolo 
 31
estándar que utiliza Microsoft, teniendo que cambiar el nombre de SMB por 
problemas de una marca registrada con dicho nombre, de esta manera Andrew 
buscó en el diccionario de su máquina de Unix una palabra que incluyera las letras 
“s”,”m” y “b”, dando como resultado la palabra “Samba”, nombre que decide darle 
y con el cual se conoce hoy en día. 
 
2.1.2 ¿Qué es Samba? 
 
Es una suite de aplicaciones GNU/Linux (o Unix) de las que habla el protocolo 
SMB (Server Message Block) que se encuentra dentro de la capa OSI. 
Muchos sistemas operativos incluidos Windows y OS/2 usan SMB para 
operaciones de red cliente-servidor; mediante el soporte de este protocolo Samba 
permite a los servidores Unix entrar en acción comunicándose con el mismo 
protocolo de red que los productos de Microsoft Windows. 
 
2.1.3 ¿Qué permite Samba? 
 
� Compartir uno o más sistemas de archivos. 
� Compartir impresoras instaladas tanto en el servidor como en los clientes. 
� Ayudar a los clientes con Visualizador de Clientes de Red. 
� Autentificar clientes “logeándose” contra un dominio Windows. 
� Proporcionar o asistir con un servidor de resolución de nombres WINS. 
 
2.1.4 ¿Cómo funciona Samba? 
 
Samba configura directorios Unix/Linux (incluyendo sus subdirectorios) como 
recursos para compartir a través de la red. Para los usuarios de Microsoft 
Windows, estos recursos aparecen como carpetas normales de red. 
 
 32
Los usuarios de Linux pueden montar en sus sistemas de archivos estas 
unidades de red como si fueran dispositivos locales o utilizar la orden smbcilent 
para conectarse a ellas muy al estilo del cliente de la línea de órdenes ftp. 
 
Cada directorio puede tener diferentes permisos de acceso sobrepuestos a las 
protecciones del sistema de archivos que se estén usando en Linux; por ejemplo 
las carpetas home pueden tener permisos de lectura y escritura para cada usuario, 
permitiendo que cada uno acceda a sus propios archivos; sin embargo debemos 
cambiar localmente los permisos de los archivos para ver nuestros archivos ya 
que permitir la escritura en el recurso, no será suficiente. 
 
2.1.5 Componentes de la “Suite” SAMBA 
 
� Smbd es el servidor smb que actúa con las conexiones desde clientes 
dando todos los archivos, permisos y directorio de trabajo al usuario. 
� Nmbd es el servidor de nombre de NetBIOS, el cual ayuda a los clientes a 
localizar servidores buscando y manejando dominios. 
� Smbclient, el programa cliente del host-Unix. 
� Testprns es un programa para hacer un test al servidor que accede a las 
impresoras. 
� Testparms es un programa que hace un test a la configuración del archivo 
Samba y verifica que esté correcto. 
� Smb.conf es el archivo de configuración Samba. 
� Smbstatus muestra lo compartido (recursos) exportado por Samba. 
 
De éstos, los procesos smbd y nmbd son considerados como el "corazón” de 
Samba ya que usualmente corren a altas velocidades y circulan todo el tiempo. 
 
El proceso nmbd habilita al servidor Linux para poder ser explorado por otras 
máquinas. El proceso smbd procede los paquetes SMB y éstos arriban en la red y 
negocian con el kernel de Linux para acceder a los recursos y compartirlos. 
 33
2.2 Ingeniería Inversa y los Números Mágicos 
 
A continuación se verá un ejemplo que nos explica Edwin Ried (2009) el cual 
consiste en entender el funcionamiento de un programa que genera “números 
mágicos” a partir de una entrada: 
 
Primero, es necesario imaginar que se cuenta con una aplicación que entrega 
un valor diferente para cada entrada realizada. Sin mucha dificultad es posible 
hacerse la idea de algo similar a la figura 2.1: 
 
 
(Figura 2.1 Ventana de la aplicación “números mágicos”). 
 
Esta aplicación lo único que hace es desplegar un mensaje de la siguiente 
forma: (Figura 2.2) 
 
 
(Figura 2.2 Muestra el resultado después de introducir un dato). 
 
¿Cómo descubrir el algoritmo tras esos resultados? 
 
 34
Es substancial tratar de lograr un pensamiento inductivo en donde se logra 
identificar el principio particular del problema para poder llegar a extrapolarlo a 
una solución general. 
 
Datos de prueba 
Código: 
Ingreso "0" salida "30" 
Ingreso "1" salida "46" 
Ingreso "2" salida "65" 
Ingreso "3" salida "90" 
Ingreso "4" salida "120" 
Ingreso "5" salida "156" 
... 
 
Al observar la aplicación, se podría decidir procesar los datos que entrega y 
lograr crear un código equivalente o investigar el funcionamiento interno. 
Generalmente, la primera forma de investigación servirá para abarcar problemas 
sencillos, no obstante el objetivo siempre será estar capacitados para enfrentar el 
mayor desafío posible por lo que el camino continuará con la investigación interna. 
 
2.2.1 Paso a paso 
 
Primero, se busca el segmento de código involucrado en desplegar ese 
mensaje de forma casi mecánica, simplemente se busca una llamada a 
MessageBox o MessageBoxEx de la librería de sistema user32.dll. (Figura 2.3) 
 
 35
 
(Figura 2.3 Segmento de código ensamblador donde se puede observar la 
llamada a MessageBoxA). 
 
Cualquier programador intuiría fácilmente lo que hacen las líneas superiores de 
esta aplicación, en especial que sprintf es parte de la librería estándar de C++. 
Claramente se ve también el título de la ventana en el código, estos valores son 
interpretados de forma inteligente por este descompilador (OllyDbg), lo que asiste 
de sobremanera a comprender el código. 
 
Teniendo en cuenta las consideraciones anteriores, la verdad es que por 
lógica, se pude entrever que una sencilla investigación ya nos dio indicios 
suficientes para bosquejar los pasos de la rutina, la cual comienza un poco más 
arriba:(Figura 2.4) 
 
 
(Figura 2.4 Se muestra con rojo el inicio de la rutina del proceso) 
 36
Cabe destacar que se omitirán pasos intermedios de asignaciones de memoria 
y otros formalismos propios de ensamblador para favorecer el entendimiento del 
lector. 
 
Inicialmente se tiene el valor de entrada supuestamente ya leído desde el 
cuadro de diálogo del programa, ahora es momento de enfocarse en la primera 
acción importante. Asumiendo el valor de entrada como una incógnita. En el 
siguiente trozo de código destacado, se añadió siete a la incógnita:(Figura 2.5) 
 
 
(Figura 2.5 La instrucción ADD, incrementa en 7 la incógnita). 
 
Es decir, por el momento se tiene una fórmula bastante sencilla que luce así: 
 
 
 
A continuación, se multiplica ese valor resultante de la suma por el mismo: 
(Figura 2.6) 
 
 
(Figura 2.6 La instrucción MUL, indica la multiplicación del resultado por sí 
mismo). 
 
 
 
Nuevamente se multiplica el resultado por el anterior proporcionado tras la 
suma. En esta segunda vez ya se puede expresar la operación simplemente 
elevando al cubo la suma anterior:(Figura 2.7) 
 
 37
 
(Figura 2.7 La instrucción MUL indica una vez más la multiplicación del 
resultado por sí mismo). 
 
 
 
Ahora se le resta diez al resultado:(Figura 2.8) 
 
 
(Figura 2.8 La instrucción SUB, resta 10 al resultado). 
 
 
 
El procedimiento que viene a continuación propone un mayor desafío 
intelectual y será abordado en el siguiente punto. 
 
2.2.2 La genialidad que oculta ensamblador 
 
Los siguientes pasos son un resumen de varias horas de trabajo en el código y 
de comienzo puede parecer algo complejo su funcionamiento. 
Luego de realizar todos los pasos, un número constante es cargado al registro 
EAX:(Figura 2.9) 
 
 
(Figura 2.9 La instrucción MOV, indica que se carga un valor en el registro 
EAX). 
 
Lo que hace el código es multiplicar el resultado de la salidatemporal por aquel 
número:(Figura 2.10) 
 38
 
 
(Figura 2.10 La instrucción MUL, indica la multiplicación de la salida por el 
contenido del registro ECX). 
 
La multiplicación por un número tan grande produce una especie de 
desbordamiento en el registro contenedor del resultado al exceder el tamaño de 
palabra del procesador (en este caso de 32 bits). Los bits sobrantes se almacenan 
en el registro contiguo EDX de una forma natural (estos registros son contiguos) 
dentro de los registros del procesador. Ahora, se desplaza un bit (se trunca el 
último bit) del registro EDX:(Figura 2.11) 
 
 
(Figura 2.11 La instrucción SAR almacena el bit que se desborda en el registro 
EDX) 
 
¿Qué sucedió tras aquella “maraña” de operaciones sin un sentido lógico 
aparente? 
 
Les revelaré la respuesta dándoles la ecuación final: 
 
 
 
Es cierto y aunque parezca increíble, lo único que se logró es dividir el 
resultado de las operaciones anteriores por once. Ahora se preguntarán ¿pero 
cómo?, en dos palabras: números mágicos. 
 
 
 
 39
2.2.3 Números mágicos 
 
Para dividir, lo que se debe hacer es restar cíclicamente hasta que se llegue a 
cero o menos, por ejemplo para dividir 42 por 13, se tendría que realizar la 
siguiente secuencia:(Figura 2.12) 
 
 
(Figura 2.12 Ejemplo de la división de 42 por 13 mediante restas). 
 
Así, se obtiene que la división de 42 por 13, es 3 con 3 de resto. Ahora, 
¿Recuerdan el gran número que fue cargado al registro EAX? 
 
Imaginen que tiene un número cualquiera. En este caso usaré el número 7326, 
seleccionado de forma totalmente aleatoria, en decimales: 
 
 
Se multiplica por el número cargado en EAX, siguiendo el procedimiento 
anterior, pero en decimales: 
 
 
 
 40
El resultado es bastante grande: 
 
 
Se expresa el resultado en hexadecimal. Como en este caso se trabajó con un 
tamaño de palabra de 32 bits, se tiene que sólo 8 cifras del número en 
hexadecimal corresponden a esos 32 bits, FFFFFFFF en este caso sería la cifra 
máxima representada en hexadecimal con 32 ceros o unos, es decir, los restantes 
"quedarán" en el registro contiguo: 
 
 
Ahora se tiene el número que quedó en el registro de más adelante: 
 
 
Siguiendo con el procedimiento, se debe truncar el último bit del resultado, 
primero se convierte la cifra a binario: 
 
 
¿Qué se obtiene? 
Hay que recordar que al quitar el último bit lo que realmente se hace es dividir 
por la base, análogamente a lo que representa añadir cifras al final, por ejemplo, 
en decimales es simplemente multiplicar por diez, en este caso, en base dos, se 
está dividiendo por dos: 
 
 
 
 
 41
Aún más evidente, en base diez: 
 
 
Pero ¿a cuánto corresponde el resultado, respecto del número inicial?: 
 
 
Increíblemente, es la división por once del valor: 
 
 
¿Sorprendente?, es increíble como una costosa operación, como lo es la 
división, puede ser reducida a estos niveles. 
 
Los números mágicos son cifras especiales que permiten dividir valores de esta 
particular forma, hay tablas de estos números, para 32 y 64 bits y generalmente 
los compiladores los utilizan cuando detectan una división por una constante de la 
que conozcan su “número mágico". 
 
Como se pude ver, este ejemplo es una manera básica y sencilla de aplicar la 
“Ingeniería Inversa” a dicho programa y así dar una idea general de cómo se lleva 
a cabo este proceso. 
 
2.3 Ingeniería Inversa y Prototipaje rápido 
 
La “Ingeniería Inversa” como herramienta del prototipaje rápido se define como 
el proceso de generar, a partir de un objeto físico, un archivo digital en formato 
CAD del objeto con el cual se puedan producir copias exactas o modificadas del 
mismo. 
 
 42
Primero se debe reproducir el objeto físico a través de un proceso de 
digitalización, el cual genera una “nube de puntos” coordenados que describen la 
superficie del objeto, es decir; un conjunto de puntos organizados en un espacio 
tridimensional que sirve para representar un objeto sólido. 
 
Los datos pueden ser adquiridos también en forma manual por medio de una 
sonda, la cual se pone en contacto con el objeto, luego cada uno de los puntos 
coordenados es ingresado al computador presionando un pedal o un botón. Las 
máquinas de medición de coordenadas (CMM) están basadas en el mismo 
concepto, excepto que el censor que tiene contacto con el objeto sea manejado 
electrónicamente para tocar la superficie e ingresar los puntos adquiridos. 
 
Un scanner láser obtiene los datos pasando un láser más pequeño o una serie 
de láser por toda la superficie y luego reciben los datos coordenados por reflexión 
del rayo. Existen también técnicas destructivas que por ejemplo, remueven capas 
de la parte y por medio de fotografías graban cada una de las secciones para 
luego convertir las fotos en datos coordenados de sección por sección. 
Finalmente los rayos x, tomografías, resonancias magnéticas, etc. pueden 
usarse para crear “nubes de puntos” de cualquier superficie. La “nube de puntos” 
obtenida, que a simple vista parecen puntos aislados en el espacio, se deben 
convertir en una superficie que represente el objeto real. 
Existen varios software con aplicaciones que permiten conectar los puntos para 
luego generar archivos STL o archivos CAD comunes. 
Después de tener el archivo CAD o STL se puede generar un prototipo rápido 
acelerando el proceso de desarrollo de productos. 
 
2.4 Ingeniería Inversa y el Hacking. 
 
El hacking es quizás una de las aplicaciones más usadas de la “Ingeniería 
Inversa”, ya que ésta nace como un estado de diversión y satisfacción 
personal y a través del tiempo ha recopilado diversos significados; la mayoría 
 43
de ellos son acusadores y negativos debido a que lo malo no es hacer 
hacking sino el uso que se le dé. 
 
Dicho término tiene su origen en los llamados “hacks”, palabra que 
denomina los golpes que efectuaban los técnicos cuando intentaban reparar 
algún aparato; dichos golpes recibían el nombre de hachazos y quien 
realizaba esta técnica de reparación se denominaba hacker. 
 
Otro enfoque de este término dice que las primeras computadoras 
grandes y defectuosas, se bloqueaban constantemente y quienes los 
operaban se “quebraban la cabeza” generando nuevas rutas para aumentar 
la velocidad y eficiencia, a dichas situaciones se les nombraba como “hacks” 
y a quienes las hacían como hackers. 
 
Por otra parte, se le llama hacker al experto en cualquier campo que 
disfruta de modificar el orden o funcionamiento de un aparato, superando 
siempre las limitaciones del sistema, lo cual le produce satisfacción. 
Posteriormente, surgieron los “crackers” (en el año 1985), término inventado 
por los propios hackers, para diferenciar a aquél que fisgoneaba en una 
computadora creando un virus dañino o copia de un software. 
De esta manera no es lo mismo un hacker que un cracker frente a una 
computadora ajena. 
 
En esta introducción a la aplicación de la “Ingeniería Inversa”, se pude dar 
una definición aún más concreta de lo que es un hacker: 
 
Un hacker es una persona, de cualquier edad, con amplios 
conocimientos informáticos y/o electrónicos que a su vez descubre 
la intolerancia de algunos organismos por proteger ciertas cosas o 
intereses. Un hacker no sólo habita en los suburbios de la gran red 
como lo es la internet, ni navega continuamente entre los discos 
 44
duros de las computadoras, que aunque se les conocen en estos 
entornos mayoritariamente, los hackers también fisgonean fuera 
de una CPU. Sólo tenemos que echar una ojeada a nuestro 
alrededor para saber cuántas cosas más atentan contra la 
curiosidad (Claudio Hernández, 1998, pag.6). 
 
Como ya se dijo, en el año de 1985 surgieron los crackers que son más 
“devastadores” que un hacker, pero poco después surgiendo otros términos 
como lo es el Carding, el cual es capaz de clonar tarjetas bancarias y deacceso inteligente a canales de pago, los warez, quienes se dedican a copiar 
programas informáticos en el mundo de la información. 
 
Los hackers utilizan una serie de herramientas (vistas en el primer 
capítulo) y a la vez, se aprovechan de los errores de diseño o 
programación que se hayan tenido durante la creación del proyecto, en la 
mayoría de las ocasiones dichos fallos se pueden encontrar en los parches 
y/o actualizaciones de seguridad, realizadas por los fabricantes, que muchas 
veces no arreglan los problemas detectados sino que además aumentan las 
vulnerabilidades del sistema. 
Una causa más de que sea posible el hacking son las configuraciones 
inadecuadas de los sistemas informáticos , que permiten explotar 
determinadas fragilidades ya que las opciones de fabricación de muchos 
dispositivos o programas, en la mayoría de los casos carecen de seguridad, 
así como el inadecuado mantenimiento de los sistemas y las políticas de 
seguridad ineficientes o inexistentes como lo son la falta de contraseñas 
de alta seguridad, políticas de usuarios y permisos, etc. 
Todo esto ha creado una competencia entre los fabricantes de hardware y 
software y los atacantes o usuarios maliciosos, que día a día descubren y 
tratan de explotar los nuevos “agujeros” de seguridad, “puertas traseras” 
mediante las cuales pueden entrar a modificar o clonar los productos en 
cuestión, mediante el hacking. 
 45
2.4.1 ¿En qué consiste el Hacking? 
 
El hacking consta de tres etapas esenciales antes de llegar a su cometido: 
 
1er Etapa “La Observación” 
Esta etapa es muy importante ya que sin ésta no se entendería nada de lo 
que existe detrás del sistema o hardware en cuestión. 
Primeramente se tendrá que observar y buscar el núcleo, lo que hace 
funcionar al sistema, ya sea un microprocesador en el caso de un hardware 
o el proceso central en caso de software es decir, el cerebro que controla 
todo, después se debe entender el funcionamiento del objetivo para así 
pasar a la segunda etapa que es el intento. 
 
2da Etapa “El intento” 
Esta etapa es bastante importante ya que aquí es donde se intentará 
“engañar” al software o hardware para su modificación, ya sea mediante 
adaptaciones en el hardware o modificaciones vía software según sea el 
caso de lo que se requiera hacer, para después poder modificarlo. 
 
3ra Etapa “La realización” 
Ésta es la última etapa y la más complicada ya que es esencial la 
intuición, conocimientos electrónicos y de programación y posiblemente de 
costoso material, en este punto se debe plantear qué es lo que se intenta 
hacer: si es un programa o hardware pirata (lo cual está penado por la ley) o 
de lo contrario, simplemente entender el funcionamiento del sistema y 
conocer las vulnerabilidades del mismo. 
 
 
 
 
 
 46
2.5 Aplicaciones de Ingeniería Inversa 
 
� Sector automovilístico y sus suministradores. Partes y componentes de 
forma irregular (carrocerías, parabrisas, sistemas de escape, retrovisores 
externos e internos, partes de motores, elementos de mando, etc.) 
 
� Construcción mecánica / construcción de máquinas / fabricación de 
moldes / fundiciones. “Ingeniería Inversa” de productos ya existentes o de 
objetos nuevamente diseñados para los cuales no son disponibles datos 
CAD. 
 
� Industria de plástico y goma. Fabricación de moldes para una gran 
variedad de productos, máscaras protectoras y para aplicaciones médicas, 
medición de partes vulcanizadas. 
 
� Industrias de calzado y deporte. Ensanchadores, suelas, tacones; 
artículos deportivos diseñados, gafas, cascos, botas de esquiar, armas, 
bicicletas, trineos, tablas de surf. 
 
� Medicina / protésica / ortopedia. Implantaciones, ensanchadores y suelas 
ortopédicas, vendajes, máscaras para la respiración artificial, miembros 
artificiales. 
 
� Ciencia e investigación. Archivos digitales de bienes científicos (por 
ejemplo objetos arqueológicos o huesos de animales prehistóricos), 
fabricación de copias, simulación de trabajos de restauración. 
 
� Arte y bienes culturales. Archivos digitales de obras de arte, réplicas, 
simulaciones de trabajos de restauración. 
 
 47
� Utensilios de casa y juguetes. Planchas, cafeteras, vasijas, cubiertos, 
pomos, grifería, juguetes, muñecas, modelos. 
 
� Industria de cristal, cerámica y porcelana. Recipientes y botellas de 
cristal, moldes de cristal, productos de porcelana y cerámica, re-edición de 
diseños históricos. 
 
� Industria alimentaria. Figuras de chocolate, bombones, dulces de todo 
tipo, moldes de horno. 
 
� Garantía de calidad asistida por computadora (CAQ). Comparación de 
la “nube de puntos” escaneada con datos CAD ya existentes, cálculo y 
visualización de las diferencias espaciales. 
 
� Simulación/Animación. Digitalización de objetos físicos para el traslado a 
programas de animación. 
2.6 Ingeniería Inversa y Escaners 3D 
Al efectuar un nuevo diseño mediante técnicas de “Ingeniería Inversa”, se debe 
realizar un proceso basado en la utilización de ese diseño con superficies físicas 
ya existentes. El primer paso en un proceso de “Ingeniería Inversa” es la 
digitalización de la superficie que se lleva a cabo mediante un escaner 3D. 
 
Un escaner 3D captura puntos de la superficie de un objeto y construye lo que 
se denomina como “nube de puntos”. A partir de ahí, con la ayuda del software del 
escaner, se genera una superficie poligonal, una malla formada por triángulos 
como se aprecia en la imagen. (Figura 2.13) 
 48
 
(Figura 2.13 Del lado izquierdo, una pieza metálica y del lado derecho, su modelo 
digital formado por la red de triángulos denominada “nube de puntos”) 
Un aparato que, pasándolo sobre la geometría que se quiere obtener, realiza un 
CAD en 3D en la computadora, a este proceso se le llama digitalización. (Figura 
2.14) 
 
(Figura 2.14 Escaner 3D que genera un CAD al pasarlo sobre el objeto) 
 Dicha digitalización se puede hacer con escaners 3D de corto, mediano y 
largo alcance, ya sean de lente fijo o móvil, esto dependerá de las 
necesidades y las herramientas a utilizar. 
Así, se puede ver que la “Ingeniería Inversa” no sólo se aplica en el 
software ya que ésta es sólo una de sus tantas aplicaciones debido a que 
existen otras utilidades y tecnología nueva. 
 49
CONCLUSIONES 
 
Como se puede ver, a lo largo de este trabajo de investigación se mostró 
cómo el mundo de la tecnología avanza a pasos agigantados donde, 
irremediablemente tenemos que ir al par de ésta ya que hoy en día, es 
común que utilicemos programas de computación ya sean básicos o 
complejos. 
 
Las exigencias de la vida cotidiana nos obligan a ponernos al día con el 
mundo informático y tecnológico. 
Comprender el funcionamiento de estos procesos, es una excelente 
opción para adaptar dichos conocimientos a nuestras necesidades, ya que la 
“Ingeniería Inversa” nos es de gran utilidad para “competir” con los productos 
que existen en el mercado y crear algunos de mejor calidad. 
 
 Es importante mencionar que el hecho de indagar más a fondo en el tema 
de la “Ingeniería Inversa”, permite concluir que las aplicaciones de este 
proceso pueden llevarse a cabo sin la necesidad de romper la seguridad de 
productos con el fin de hacer daño, sino simplemente de entender su 
funcionamiento y modificarlos si es necesario. 
 
Por otra parte, se ha logrado profundizar en el campo de la “Ingeniería 
Inversa” a partir de elementos específicos, como lo son los ensambladores y 
herramientas requeridas para poder hacer el proceso de una manera 
adecuada fuera de todo carácter ilícito. 
 
Así mismo, se ha dado una visión general del amplio campo de 
investigación, como de aplicación, de la “Ingeniería Inversa” con fines no 
lucrativos, pero a la vez se especificó el modo de llevar a cabo este proceso 
desde el punto de vista contrario a través del llamado hacking, el cual en la 
mayoría

Continuar navegando