L'eccellente post di psoul risponde alla tua domanda in modo da non replicare il suo buon lavoro, ma ritengo che possa aiutare a spiegare perché questa è al tempo stesso una domanda perfettamente valida ma anche terribilmente sciocca. Dopotutto, questo è un posto dove imparare, giusto?
I moderni programmi per computer sono prodotti attraverso una serie di conversioni, iniziando con l'inserimento di un corpo di istruzioni di testo leggibili dall'uomo (chiamato "codice sorgente") e terminando con un corpo di istruzioni leggibili dal computer (chiamato in alternativa "binario" o "macchina codice").
Il modo in cui un computer esegue una serie di istruzioni sul codice macchina è in definitiva molto semplice. Ogni azione che un processore può eseguire (ad esempio, leggere dalla memoria, aggiungere due valori) è rappresentata da un codice numerico. Se ti dicessi che il numero 1 significava urlo e il numero 2 significa risatina, e poi ho alzato le carte con 1 o 2 in attesa di urlare o ridacchiare di conseguenza, userei quello che è essenzialmente lo stesso sistema utilizzato da un computer operare.
Un file binario è solo un insieme di quei codici (di solito chiamano "codici op") e le informazioni ("argomenti") su cui agiscono i codici op.
Ora, il linguaggio assembly è un linguaggio informatico in cui ogni parola di comando nella lingua rappresenta esattamente un codice operativo sul processore. Esiste una traduzione diretta 1: 1 tra un comando di linguaggio assembly e un codice operativo del processore. Questo è il motivo per cui il gruppo di codifica per un processore x386 è diverso dal gruppo di codifica per un processore ARM.
Lo smontaggio è semplicemente questo: un programma legge attraverso il binario (il codice macchina), sostituendo i codici operativi con i loro comandi equivalenti in linguaggio assembly e genera il risultato come un file di testo. È importante capirlo; se il tuo computer è in grado di leggere il binario, puoi leggere anche il binario, manualmente con una tabella di codici operativi in mano (ick) o tramite un disassemblatore.
I disassemblatori hanno alcuni nuovi trucchi e tutti, ma è importante capire che un disassemblatore è in definitiva un meccanismo di ricerca e sostituzione. Questo è il motivo per cui qualsiasi EULA che gli proibisce di soffiare aria calda. Non è possibile consentire immediatamente al computer di leggere i dati del programma e vietare anche al computer di leggere i dati del programma.
(Non fraintendetemi, ci sono stati tentativi di farlo. Funzionano così come DRM sui file dei brani.)
Tuttavia, ci sono avvertimenti nell'approccio allo smontaggio. I nomi delle variabili sono inesistenti; una cosa del genere non esiste per la tua CPU. Le chiamate in biblioteca sono confuse e spesso richiedono lo smontaggio di ulteriori binari. E il montaggio è difficile da leggere nelle migliori condizioni.
La maggior parte dei programmatori professionisti non può sedersi e leggere il linguaggio assembly senza avere mal di testa. Per un dilettante non accadrà.
Ad ogni modo, questa è una spiegazione un po 'opaca, ma spero che sia di aiuto. Tutti possono sentirsi liberi di correggere eventuali errori da parte mia; è passato un po 'di tempo. ;)