É possível converter o código da máquina de volta para uma linguagem de programação?
O código da máquina pode ser desmontado para a linguagem assembly. E através do reconhecimento de padrões, o código da máquina pode ser compilado de volta para alguma linguagem de programação, que nem precisa ser a linguagem original.
Se houver informações de debug deixadas no executável, até mesmo nomes de funções podem ser recuperados do código da máquina. Caso contrário, o descompilador/desmontador terá que inventar seus próprios nomes.
Se você estiver lidando com código p ou bytecode (Java/.NET) então a descompilação se torna um pouco mais fácil uma vez que estes compiladores tendem a incluir um pouco mais de dados dentro do executável como parte do tipo de informação de tempo de execução que o código poderia usar internamente através de reflection.
No entanto, alguns compiladores incluirão ofuscação do código da máquina após a compilação. Basicamente, isto significa que qualquer informação útil que não seja necessária será removida do executável e o código será embaralhado ou mesmo comprimido com um carregador especial incluído na aplicação para descompactar/descompactar novamente em tempo de execução. Isto torna mais difícil a descompilação, já que você está basicamente descompilando o carregador, não o código da máquina do executável.
Na maioria dos casos, não vale a pena o tempo de qualquer forma. Uma vez descompilado, você ainda precisa ter um bom conhecimento técnico para decifrar o código. Ele simplesmente não parece bonito, não importa o quão bom o descompilador tenha feito seu trabalho.
Artigos semelhantes
- Em termos leigos, o que é código de byte, código de montagem, código de máquina e código fonte?
- Quais são as diferenças entre Código de Máquina, Código de Byte, Código de Objeto e Código Fonte?
- Quais são as vantagens de uma linguagem de montagem na programação sobre uma linguagem de máquina?
- Qual é a diferença entre linguagem de máquina, linguagem de montagem e linguagem de alto nível em computadores?