La excelente publicación de psoul responde a su pregunta, por lo que no replicaré su buen trabajo, pero creo que ayudaría a explicar por qué esta es una pregunta perfectamente válida pero también terriblemente tonta. Después de todo, este es un lugar para aprender, ¿verdad?
Los programas de computadora modernos se producen a través de una serie de conversiones, comenzando con la entrada de un cuerpo de instrucciones de texto legibles por humanos (llamado "código fuente") y terminando con un cuerpo de instrucciones legibles por computadora (llamado alternativamente "binario" o "máquina" código").
La forma en que una computadora ejecuta un conjunto de instrucciones de código de máquina es, en última instancia, muy simple. Cada acción que puede realizar un procesador (por ejemplo, leer de la memoria, agregar dos valores) se representa mediante un código numérico. Si te dijera que el número 1 significaba gritar y el número 2 significaba risita, y luego sostenía las tarjetas con 1 o 2 esperando que gritaras o rieras en consecuencia, estaría usando lo que es esencialmente el mismo sistema que usa una computadora para operar.
Un archivo binario es solo un conjunto de esos códigos (generalmente llamados "códigos operativos") y la información ("argumentos") sobre los que actúan los códigos operativos.
Ahora, el lenguaje ensamblador es un lenguaje de computadora donde cada palabra de comando en el idioma representa exactamente un código de operación en el procesador. Hay una traducción directa 1: 1 entre un comando de lenguaje ensamblador y un código de operación del procesador. Esta es la razón por la cual el ensamblaje de codificación para un procesador x386 es diferente del ensamblaje de codificación para un procesador ARM.
El desmontaje es simplemente esto: un programa lee el binario (el código de máquina), reemplaza los códigos de operación con sus comandos de lenguaje ensamblador equivalentes y genera el resultado como un archivo de texto. Es importante entender esto; si su computadora puede leer el binario, entonces también puede leer el binario, ya sea manualmente con una tabla de códigos de operación en su mano (ick) o mediante un desensamblador.
Los desensambladores tienen algunos trucos nuevos y todo, pero es importante entender que un desensamblador es en última instancia un mecanismo de búsqueda y reemplazo. Es por eso que cualquier EULA que lo prohíba finalmente está soplando aire caliente. No puede permitir de inmediato que la computadora lea los datos del programa y también prohibir que la computadora lea los datos del programa.
(No me malinterpreten, ha habido intentos de hacerlo. Funcionan tan bien como DRM en los archivos de canciones).
Sin embargo, hay advertencias sobre el enfoque de desmontaje. Los nombres de las variables son inexistentes; tal cosa no existe en su CPU. Las llamadas a la biblioteca son confusas como el infierno y a menudo requieren desmontar más binarios. Y el montaje es difícil de leer en las mejores condiciones.
La mayoría de los programadores profesionales no pueden sentarse y leer lenguaje ensamblador sin tener dolor de cabeza. Para un aficionado simplemente no va a suceder.
De todos modos, esta es una explicación algo pasada por alto, pero espero que ayude. Todos pueden sentirse libres de corregir cualquier error de mi parte; ha sido un tiempo. ;)