Piuttosto che citare le definizioni dei termini che mi piacerebbe dare la mia opinione personale su cosa siano queste cose.
Reverse Engineering è il processo di prendere un output e capire quale sia l'input. Significa anche tracciare i passaggi che un pezzo di informazione ha preso dal suo essere immesso fino a quando non viene emesso. Pensa a questo come a capire che le cose funzionano senza avere la fonte ma un livello di astrazione appena sopra la macchina. Quando si tratta di software, il reverse engineering tende ad essere il processo di eseguire il debug del codice in esecuzione di un'applicazione in assembly durante l'esecuzione. Guardarlo scorrere, seguendo il processo necessario, ti permette di tracciare i passaggi e riassemblarli in qualcosa di significativo che puoi usare da solo.
Lo sfruttamento binario è il processo di abuso di difetti sottili (o forse non così sottili) nel software per fare in modo che un'applicazione esegua funzioni che non era design da eseguire. Sebbene non sia impossibile sfruttare i difetti nei binari senza facendo il reverse engineering, direi che quasi tutti gli esercizi di exploit binario iniziano con il reverse engineering per capire come funziona l'applicazione e per aiutare a identificare i difetti.