O excelente post de psoul responde à sua pergunta, para não replicar o bom trabalho dele, mas acho que ajudaria a explicar por que essa é uma pergunta ao mesmo tempo perfeitamente válida, mas também terrivelmente boba. Afinal, este é um lugar para aprender, certo?
Programas de computador modernos são produzidos por meio de uma série de conversões, começando com a entrada de um corpo de instruções de texto legível por humanos (chamado "código-fonte") e terminando com um corpo de instruções legível por computador (chamado alternativamente de "binário" ou "máquina" código").
A maneira como um computador executa um conjunto de instruções de código de máquina é basicamente muito simples. Cada ação que um processador pode executar (por exemplo, ler da memória, adicionar dois valores) é representada por um código numérico. Se eu lhe dissesse que o número 1 significava gritar e o número 2 significava rir, e depois segurava cartas com 1 ou 2 esperando que você gritasse ou risse de acordo, eu usaria o que é essencialmente o mesmo sistema que um computador usa para operar.
Um arquivo binário é apenas um conjunto desses códigos (geralmente chamados de "códigos operacionais") e as informações ("argumentos") em que os códigos operacionais atuam.
Agora, a linguagem assembly é uma linguagem de computador em que cada palavra de comando na linguagem representa exatamente um código operacional no processador. Há uma tradução direta 1: 1 entre um comando da linguagem assembly e um código operacional do processador. É por isso que o conjunto de codificação para um processador x386 é diferente do conjunto de codificação para um processador ARM.
A desmontagem é simplesmente esta: um programa lê o binário (o código da máquina), substituindo os códigos op por seus comandos equivalentes na linguagem assembly, e gera o resultado como um arquivo de texto. É importante entender isso; se o seu computador pode ler o binário, você também pode ler o binário, manualmente, com uma tabela de código operacional na mão (ick) ou através de um desmontador.
Os desmontadores têm alguns truques novos e tudo mais, mas é importante entender que um desmontador é, em última análise, um mecanismo de busca e substituição. É por isso que qualquer EULA que o proíba está soprando ar quente. Você não pode imediatamente permitir que o computador leia os dados do programa e também proibi-lo de ler os dados do programa.
(Não me interpretem mal, houve tentativas de fazê-lo. Eles funcionam tão bem quanto o DRM em arquivos de música.)
No entanto, existem advertências na abordagem de desmontagem. Nomes de variáveis são inexistentes; tal coisa não existe na sua CPU. As chamadas à biblioteca são confusas como o inferno e geralmente exigem a desmontagem de outros binários. E é difícil ler a montagem nas melhores condições.
A maioria dos programadores profissionais não consegue sentar e ler a linguagem assembly sem sentir dor de cabeça. Para um amador, isso simplesmente não vai acontecer.
De qualquer forma, esta é uma explicação um pouco obscurecida, mas espero que ajude. Todos podem se sentir livres para corrigir quaisquer distorções da minha parte; faz algum tempo. ;)