La ingeniería inversa consiste en desmontar un objeto para ver cómo funciona con el fin de duplicarlo o mejorarlo. La práctica, tomada de industrias más antiguas, se utiliza ahora con frecuencia en el hardware y el software informático. La ingeniería inversa del software consiste en revertir el código máquina de un programa (la cadena de 0 y 1 que se envía al procesador lógico) de vuelta al código fuente en el que fue escrito, utilizando declaraciones del lenguaje del programa.
La ingeniería inversa de software se realiza para recuperar el código fuente de un programa porque éste se ha perdido, para estudiar cómo el programa realiza ciertas operaciones, para mejorar el rendimiento de un programa, para arreglar un bug (corregir un error en el programa cuando el código fuente no está disponible), para identificar contenido malicioso en un programa como un virus o para un programa escrito para su uso con un microprocesador para su uso con otro. La ingeniería inversa con el fin de copiar o duplicar programas puede constituir una violación de los derechos de autor. En algunos casos, la licencia de uso del software prohíbe específicamente la ingeniería inversa.
Alguien que realice ingeniería inversa en el software puede utilizar varias herramientas para desensamblar un programa. Una herramienta es un dumper hexadecimal, que imprime o muestra los números binarios de un programa en formato hexadecimal (que es más fácil de leer que un formato binario). Conociendo los patrones de bits que representan las instrucciones del procesador, así como la longitud de las instrucciones, el ingeniero inverso puede identificar ciertas partes de un programa para ver cómo funcionan. Otra herramienta común es el desensamblador. El desensamblador lee el código binario y luego muestra cada instrucción ejecutable en forma de texto. Un desensamblador no puede diferenciar entre una instrucción ejecutable y los datos utilizados por el programa, por lo que se utiliza un depurador, que permite al desensamblador evitar desensamblar las partes de datos de un programa. Estas herramientas podrían ser utilizadas por un cracker para modificar y entrar en un sistema informático o causar otros daños.
La ingeniería inversa de hardware implica desmontar un dispositivo para ver cómo funciona. Por ejemplo, si un fabricante de procesadores quiere ver cómo funciona el procesador de un competidor, puede comprar un procesador de la competencia, desmontarlo y luego hacer un procesador similar a él. Sin embargo, este proceso es ilegal en muchos países. En general, la ingeniería inversa de hardware requiere una gran experiencia y es bastante cara.
Otro tipo de ingeniería inversa consiste en producir imágenes en 3D de piezas fabricadas cuando no se dispone de un plano para poder refabricar la pieza. Para realizar la ingeniería inversa de una pieza, ésta se mide con una máquina de medición de coordenadas (MMC). A medida que se mide, se genera una imagen tridimensional que se muestra en un monitor. Una vez finalizada la medición, la imagen se dimensiona. Cualquier pieza puede ser objeto de ingeniería inversa utilizando estos métodos.
El término ingeniería avanzada se utiliza a veces en contraste con la ingeniería inversa.