La ingeniería inversa es una disciplina de la ciberseguridad que se basa en reconstruir y hacer comprensible para el investigador “sistemas” de bajo nivel. Se puede aplicar ingeniería inversa a distintos contextos, aunque los principales son: aplicaciones y comunicaciones.
El objetivo de la ingeniería inversa a nivel de aplicaciones es obtener y comprender el código fuente de la misma. Se puede aplicar ingeniería inversa de muy bajo nivel, por ejemplo, para obtener el código fuente de aplicaciones compiladas (como ocurre con los binarios escritos en C). También se puede aplicar la ingeniería inversa a más alto nivel con aplicaciones basadas en lenguajes interpretados (como java) pero que han sido ofuscadas de alguna forma (como suele ocurrir con las aplicaciones Android).
El objetivo de la ingeniería inversa a nivel de comunicaciones es la reconstrucción de un protocolo de comunicaciones desde cero para entender su funcionamiento y, en el mejor de los casos, poder interactuar con el dispositivo a través de él. Es un proceso bastante complejo y suele requerir del uso de SDR.