Si può fare reverse engineering di un software/programmi?

La risposta generale è sì. La difficoltà varia da facile a molto difficile. È possibile disassemblare molti programmi compilati. Se il progetto è stato costruito senza togliere le tabelle dei simboli, l'output del disassemblatore può essere molto informativo.

Io tolgo i simboli dai miei carichi Elixir di produzione per questa ragione. Con la tabella dei simboli inclusa, l'output disassemblato riproduce il codice vicino al sorgente originale. Senza i simboli, non si vede molto.

In passato, ho usato strumenti per estrarre file di risorse (immagini, icone, audio) da applicazioni Windows. Questo era un po' di tempo fa. Non sono sicuro dello stato delle cose ultimamente da quando sono passato a un mac.

Molto tempo fa, ho scritto un emulatore per un processore che era ancora in sviluppo. Avevo un assemblatore per il processore che stampava il codice assembly con i codici operativi generati. Ho preso gli opcode, li ho convertiti in binario e ho cercato i modelli di posizione dei bit per capire quali bit controllavano r/w, branch, registri, ecc. Con questo, sono stato in grado di scrivere un simulatore per testare il mio assemblaggio prima che arrivassero i prototipi del processore. Il punto è che ho dovuto scendere in binario per realizzare quel compito.

Sospetto che ci siano strumenti là fuori per questo tipo di cose. Non li ho mai cercati prima.