La ingeniería inversa es el proceso llevado a cabo con el objetivo de obtener informacion o un diseño a partir de un producto, con el fin de determinar cuales son sus componentes y de que manera interactuan entre si y cual fue su proceso de fabricacion. Consiste en entender un tipo de software y, mediante los resultados que arroja, replicarlo para crear el mismo software. Esto se realiza, por ejemplo, en la creacion de los drivers propietarios de Nvidia para los sistemas operativos GNU/Linux. El programa SAMBA es un claro ejemplo de la ingenieria inversa, dado que permite a sistemas operativos UNIX compartir archivos con sistemas Microsoft Windows. El proyecto Samba tuvo que investigar informacion confidencial (no liberada al publico general por Microsoft) sobre los aspectos tecnicos relacionados con el sistema de archivos Windows. Lo mismo realiza el proyecto WINE para el conjunto de API de Windows y OpenOffice.org con los formatos propios de Microsoft Office. La ingenieria inversa tambien se ha aplicado para entender la estructura del sistema de archivos NTFS y asi poder desarrollar drivers para la lectura-escritura sobre el mismo (Principalmente para sistemas basados en GNU/Linux) La ingenieria inversa es un metodo de resolucion. Aplicar ingenieria inversa a algo supone profundizar en el estudio de su funcionamiento, hasta el punto que se pueda llegar a entender, modificar y mejorar dicho modo de funcionamiento. Pero este termino no solo se aplica al software, sino que tambien se considera ingenieria inversa el estudio de todo tipo de elelmentos (por ejemplo, equipos electronicos, microcontroladores u objeto fabril de cualquier clase). Se puede decir, mas bien, que la ingenieria inversa antecede al nacimiento del software, tratandose de una posibilidad a disposicion de las empresas para la produccion de bienes mediante copiado desde el mismo surgimiento de la ingenieria.