Existe um bom utilitário FOSS para converter código de máquina para montagem ou mesmo C?

2

Se eu comprar um software x86 de 32 ou 64 bits, mas não receber o código-fonte e precisar modificar o software, precisarei converter o código da máquina novamente em um nível superior. idioma ou pelo menos código assembly.

Existe um bom utilitário para ir de código de máquina para C?

Eu assumo que ele tentaria identificar se o programa foi compilado com um compilador C em oposição a C ++ ou Objective C ou qualquer outra coisa.

Obrigado.

    
por Asker 24.11.2012 / 03:28

2 respostas

1

Voltar do código de máquina para o idioma de origem é chamado de descompilação . A desmontagem (do código da máquina para a linguagem de montagem) pode ser feita com objdump -d ; objdump faz parte do pacote padrão binutils de ferramentas de desenvolvimento. Embora um descompilador possa ser uma ferramenta útil no processo, descompilar o código com a intenção de modificá-lo e recompilá-lo raramente é uma maneira produtiva de modificar o comportamento de um programa. Você gastará muito tempo recuperando o código-fonte utilizável e esse código-fonte não estará em nenhuma forma sustentável.

O primeiro passo para entender como um programa funciona é ferramentas de depuração. Use ferramentas como strace e ltrace para ver quais chamadas de sistema e bibliotecas o programa faz. Use um depurador como o Gdb para percorrer as instruções do programa.

Se você tiver muita sorte, o comportamento que você procura pode ser alcançado com um arquivo de configuração ou uma variável de ambiente. O próximo passo é conectar-se ao programa e substituir algumas funções por sua própria versão, usando LD_PRELOAD para linkar uma biblioteca que define sua própria versão dessas funções .

A descompilação é geralmente útil para entender os algoritmos usados por um programa, por exemplo, para escrever outro programa com um protocolo de rede ou formato de arquivo compatível. Muitas vezes, não é uma ferramenta muito útil quando seu objetivo é modificar o comportamento do programa.

    
por 24.11.2012 / 15:57
1

Uau, algum projeto! Mas tudo bem, alguns brinquedos para brincar:

(use tudo com um arquivo binário como primeiro argumento).

bits:

xxd -b        # xxd for hexdump (?): '-b' is '-bits'

octal:

od            # octal dump

hexadecimal:

hexdump       # these two share the hexdump(1) man page
hd            # symbolic link to hexdump
od -t x1      # '-t' for type, 'x1' for hexadecimal with 1 byte per integer
xxd

strings:

strings

código da máquina:

objdump -D    # object dump: '-D' is '--disassemble-all'

E, por último, mas não menos importante, file

Não deixe de conferir esta pergunta.

    
por 24.11.2012 / 04:00