La “decompilazione” di un programma consiste nella sua suddivisione in semplici istruzioni eseguibili dal computer, nel tentativo di comprenderne il funzionamento generale; il “reverse-engineering” (letteralmente, “ingegnerizzazione al contrario”) invece consiste nello studio del comportamento del software e nell’analisi dei formato dei dati trasmessi o memorizzati da un programma, allo scopo di individuarne i principi di funzionamento