Original Article: REC 2.1 - Reverse Engineering Compiler
Author: backerstreet.com

REC 2.1 - Competente de Engenharia Reversa


      REC é um compilador portátil de engenharia reversa ou descompilador.

Ele lê um arquivo executável e tenta produzir uma representação semelhante ao C e o código usado para construir o arquivo executável.
É portátil porque foi projetado para ler arquivos produzidos para vários destinos diferentes e foi compilado em vários sistemas host.

RecStudio oferece uma interface de usuário moderna para o modo interativo do REC.
Uma versão de linha de comando ainda está disponível para hosts Linux e Solaris.

    
 Conteúdo
       
Última atualização

20 de setembro de 2005

  RecStudio
Após um período de 4 anos no domínio das interfaces gráficas de usuário, finalmente volto ao trabalho no REC.
A versão 2 apresenta o RecStudio, uma nova interface de usuário para descompilação interativa.
Inicialmente, a nova interface do usuário só está disponível em sistemas Windows. Use o Wine ou outra biblioteca de portar para executar o REC 2 no Linux.
Um Linux, Solaris e MacOS X originais serão inicialmente limitados à descompilação por lotes através de arquivos de projeto.

Veja a página de versão 2 para uma visita a esta nova versão REC.

  Recursos das versões 1.x
Estes são alguns dos recursos do REC:
  • Multitarget: REC pode descompilar programas 386, 68k, PowerPC e MIPS R3000.

  •  
  • Multiformato: REC reconhece os seguintes formatos de arquivo:
    • ELF (System V Rel. 4, por exemplo, Linux, Solaris, etc.)
    • COFF (System V Rel. 3.x, por exemplo SCO)
    • PE (Win32 .EXE e .DLL para Microsoft Windows 95 e NT)
    • AOUT (derivativos BSD, por exemplo SunOS 4.x)
    • Playstation PS-X (somente MIPS)
    • Dados binários em bruto (via arquivos .cmd)

    •  
  • Multihost: REC está disponível para Linux 3.0 (i386), Windows 95 e SunOS 4.1.4.

  •  
  • Apoia informações simbólicas de alto nível em COFF, ELF + STAB, AOUT + STAB.

  •  
  • Interação escalável do usuário: do modo totalmente lote para o modo interativo do navegador de tela inteira.

  •  
  • O modo de servidor HTTP permite usar um navegador HTML como interface de usuário
As fontes REC não são no domínio público.

Embora o REC possa ler os arquivos executáveis Win32 (aka PE) produzidos pelo Visual C ++ ou Visual Basic 5, existem limitações na produção produzida. O REC tentará usar qualquer informação presente na tabela de símbolos .EXE. Se o arquivo .EXE foi compilado sem informações de depuração, se um formato da base de dados do programa (.PDB) ou Codeview (C7) fosse usado, ou se a opção de otimização do compilador estiver habilitada, a saída produzida não será muito boa. Além disso, os arquivos executáveis do Visual Basic 5 são uma mistura do código Subroutine e dados Form. É quase impossível que a REC determine qual é qual. A única opção é usar um arquivo .cmd e especificar manualmente qual área é código e qual área é dados.

Na prática, apenas os arquivos executáveis C produzem saída descompilada significativa.

Eventualmente, implementarei um analisador de informação simbólica .PDB ou Codeview e um descompilador de recursos da janela. Até então, a única chance de obter uma saída simbólica de alta qualidade é descompilar os executáveis do Linux que foram compilados com o -gstabs opção, ou para fornecer informações simbólicas adicionais através do 'symbol:' e 'types:' diretivas de um arquivo de comando REC.

  Referências
Vários outros descompiladores estão disponíveis em várias fontes. Olhe para mim página de engenharia reversa para uma lista.
Em vez disso, surpreendentemente, a arquitetura interna de um descompilador é muito semelhante à de um compilador. Existe literatura de alta qualidade para ambos.
A página descompilação possui links e documentação relacionada aos descompiladores em geral.

Cristina Cifuentes' Técnicas de compilação reversa Tese de doutorado descreve detalhadamente a teoria e a implementação do dcompc de dccc para programas 8086 DOS.

A página de otimização descreve algumas das técnicas utilizadas pelos compiladores para otimizar o código do nível da máquina. Descompilar otimizado é mais difícil porque o descompilador deve "de otimizar" o arquivo de entrada.

A pagina Wotsit tem links para as especificações dos formatos de arquivo de objeto como COFF e ELF.

Outros livros fundamentais que usei durante o desenvolvimento são:

  • "Compilers - Principles, Techniques and Tools", Aho, Sethi, Ullman, 1986 Addison-Wesley Publishing Co.  ISBN 0-201-10088-6.
  • "Advanced Compiler Design & Implementation", Steven Muchnick, 1997 Morgan Kaufmann Publishers, ISBN 1-55860-320-4.
  • "How debuggers work - Algorithms, Data Structures, and Architecture", Jonathan Rosemberg, 1996 John Wiley and Sons, ISBN 0-471-14966-7.
Os desmontadores utilizados no REC foram retirados de várias fontes. O arquivo copyrite na distribuição tem uma lista de créditos para cada um dos desmontadores usados em REC. O resto do código foi escrito por mim mesmo nos últimos 9 anos. Continuarei a melhorar REC no meu tempo livre, mas não posso garantir que consiga corrigir erros ou adicionar novos recursos, processadores ou hosts.
  aviso Legal
Há muita discussão sobre a legalidade da descompilação. As ferramentas Decompiler estão disponíveis para uma variedade de plataformas há muito tempo. Decompilers, juntamente com outras ferramentas, como depuradores, editores binários, desmontadores, etc., só devem ser usados quando o proprietário de um programa tem o direito legal de engenharia reversa do programa.

Foi estabelecido pelos tribunais dos EUA e outros países que é legal usar decompiladores sob a cláusula de uso justo da lei de direitos autorais.

Para descobrir quando é legal usar um descompilador, você deve ler o texto dos seguintes casos:

Além disso leia uma discussão sobre a legalidade de usar um emulador para executar um programa binário em um host diferente.

O software Baker Street não suporta o uso de ferramentas de engenharia reversa para fins ilegais.


Copyright © 1997 - 2007 Backer Street Software - All rights reserved.

História:
 

6 de maio de 2007  Versão 2.1: Adicionado novamente + opção de lote para RecStudio; use Ndisasm para i386; melhor isolamento de dados de importação para binários do Windows
20 de setembro de 2005  Versão 2.0d: Mais correções de bugs para 68k
6 de setembro de 2005  Versão 2.0c: Suporte para arquivos Linux .o e suporte aprimorado para 68k
15 de agosto de 2005  Versão 2.0b: versão de manutenção. Suporte para binários compilados com Watcom e cordas amplas
1 de agosto de 2005  Versão 2.0a: versão de manutenção. Corrigido falhas, qualidade melhorada com executáveis do Windows
30 de maio de 2005  Versão 2.0: GUI do Windows e descompilação interativa
19 de setembro de 2000  Versão 1.6: Adicionado suporte para o SPARC.
16 de março de 1999  Versão 1.5d: Detecção restaurada do switch(). Adicionado suporte para MIPS de grande endian.
6 de março de 1999  Versão 1.5: Suporte para informações de importação / exportação em arquivos Win95; substituiu GNU desassemblers com fonte freeware; corrigiu muitos acidentes
22 de novembro de 1998  Versão 1.4a: Corrigido loop infinito ao descompilar arquivos Win95; adicionou arquivos de protótipo do Windows
15 de novembro de 1998  Versão 1.4: Adicionado capacidade do navegador no modo interativo e geração de página HTML
30 de julho de 1998 
Versão 1.3b: Manutenção: falhas fixas e vários problemas em 68k.
15 de fevereiro de 1998  Versão 1.3: Adicionado os destinos Motorola 68000 e PowerPC.
7 de dezembro de 1997  Versão 1.2: interface de usuário fixa do PC. Agora, podemos carregar executáveis do DOS de 16 bits. Mais correções de bugs.
26 de outubro de 1997  Versão 1.1: suporte multi-alvo (386 + R3000), carregamento de arquivos ELF e PE, vários erros corrigidos.
6 de outubro de 1997  Ligado ao Windows no modo console (recr4kpc.zip) e ao SunOS (recr4ks4.tar.gz)
20 de setembro de 1997  Criado para tornar disponível recr4kl.zip.