REC Studio 4 – Reverse Engineering Compiler
REC Studio é um decompiler interativo.
Ele lê um arquivo de Windows, Linux, Mac OS X ou executável bruto e tenta produzir uma representação de C do código e dados usados para criar o arquivo executável.
Ele foi projetado para ler arquivos produzidos para muitos alvos diferentes, e foi compilado em vários sistemas host.
REC Studio 4 é uma reescrita completa do decompiler original REC. Ele usa técnicas de análise mais poderosas, como o Single Static Assignment parcial (SSA), permite carregar arquivos Mac OS X e suporta binários de 32 e 64 bits.
Embora ainda em desenvolvimento, atingiu um estágio que o torna mais útil do que o antigo Rec Studio 2.
As páginas do Rec Studio 2 estão aqui.
Características
Como mencionado, Rec Studio 4 ainda está em desenvolvimento. A maioria dos recursos independentes de destino foram concluídos, tais como:
- Multihost: Rec Studio é executado no Windows XP / Vista / 7, Ubuntu Linux, Mac OS X.
- Suporte de informações simbólicas usando Dwarf 2 e reconhecimento parcial do formato PDB da Microsoft.
- C ++ é parcialmente reconhecido: nomes “mangled” gerados pelo gcc são corrigidos, bem como a herança descrita em dwarf2 é homenageada. No entanto, C ++ é uma linguagem muito ampla e difícil, por isso alguns recursos como modelos provavelmente não serão suportados.
- Tipos e definições de protótipo de função podem ser especificados em arquivos de texto. Algumas APIs padrão do Posix e do Windows já são fornecidas no pacote Rec Studio.
- A interatividade é suportada, limitada à definição de seções, rótulos e pontos de entrada de função. Será necessário aprimorá-lo para suportar a definição de tipos e parâmetros de função no programa.
Esta tabela mostra os recursos específicos de destino que foram implementados até agora:
Características | x86 (ia32) | x86_64 | Mips | PowerPC | mc68k | ARM |
Disassembler | Concluído | Concluído | Concluído | Concluído | Concluído | Planejado |
PE COFF loader | Concluído | Concluído | n/a | n/a | n/a | n/a |
ELF loader | Concluído | Concluído | Concluído | Concluído | Concluído | Planejado |
COFF loader | Concluído | n/a | n/a | n/a | Concluído | n/a |
Mac OS X loader | Concluído | Concluído | n/a | Planejado | n/a | Planejado |
Dwarf2 symbolic information | Concluído | Concluído | Concluído | Concluído | n/a | Planejado |
COFF symbolic information | Planejado | n/a | n/a | n/a | Planejado | n/a |
Calling conventions | Em andamento | Em andamento | Em andamento | Planejado | Planejado | Planejado |
32 and 64 bits | Em andamento | Em andamento | n/a | n/a | n/a | n/a |
Floating-point | Planejado | Planejado | n/a | n/a | n/a | n/a |
Windows Debugger | Em andamento | Planejado | n/a | n/a | n/a | n/a |
Gdb Debugger | Em andamento | Em andamento | n/a | n/a | n/a | n/a |
As fontes REC não estão no domínio público.
Embora REC pode ler Win32 executável (aka PE) arquivos produzidos pelo Visual C ++ ou Visual Basic 5, há limitações na saída produzida. Rec irá tentar utilizar qualquer informação está presente na tabela de símbolos .exe. Se o arquivo .exe foi compilado sem informações de depuração, se um arquivo de base de dados de programa (.PDB) ou Codeview (C7) formato foi usado, ou se a opção de otimização do compilador foi habilitado, a saída produzida não será muito boa. Além disso, os arquivos executáveis do Visual Basic 5 são uma mistura de código de sub-rotina e dados de formulário. É quase impossível para o REC determinar qual é qual. A única opção é usar um arquivo .cmd e especificar manualmente qual área é código e qual área é dados.
Em prática, apenas arquivos executáveis C produzem saídas decompiladas significativas.
Referências
Vários outros descompiladores estão disponíveis de várias fontes. Veja a minha página de engenharia reversa para uma lista.
Um pouco surpreendentemente, a arquitetura interna de um decompiler é muito semelhante à de um compilador. Literatura de alta qualidade existe para ambos. A página Design Notes tem informações sobre os problemas que um escritor decompilador enfrenta ao tentar descompilar programas ligeiramente mais complexos do que testes de unidade simples.
A página de descompilação tem links e documentação relacionada a descompiladores em geral.
A tese de Phillips de Mike van Emmerik avançou significativamente o campo da descompilação, delineando soluções para problemas fundamentais na descompilação de programas binários.
Técnicas de Compilação Reversa de Cristina Cifuentes A tese de doutorado descreve em detalhes a teoria ea implementação do decompilador de dcc para programas 8086 DOS.
A página Wotsit tem links para as especificações de formatos de arquivo de objeto como COFF e ELF.
Alguns conceitos relacionados à análise de código são abordados nas páginas do Reference Debugger.
Outros livros fundamentais que eu usei durante o desenvolvimento são:
- “Compiladores – Princípios, Técnicas e Ferramentas”, Aho, Sethi, Ullman, 1986 Addison-Wesley Publishing Co. ISBN 0-201-10088-6.
- “Advanced Compiler Design & Implementação”, Steven Muchnick, 1997 Morgan Kaufmann Publishers, ISBN 1-55860-320-4.
- “Como funcionam os depuradores – Algoritmos, Estruturas de Dados e Arquitetura”, Jonathan Rosemberg, 1996 John Wiley e Sons, ISBN 0-471-14966-7.
Os desmontadores utilizados em REC foram retirados de várias fontes. O arquivo de copyright 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 durante os últimos 25 anos. Vou continuar a melhorar REC no meu tempo livre, mas não posso garantir que consiga corrigir bugs ou adicionar novos recursos, processadores ou hosts.
Aviso Legal
Há muita discussão sobre a legalidade da descompilação. As ferramentas do Decompiler estiveram disponíveis para uma variedade de plataformas por muito tempo. Decompilers, juntamente com outras ferramentas como depuradores, editores binários, etc desmontadores só devem ser usado quando o proprietário de um programa tem o direito legal de fazer engenharia reversa do programa.
Foi estabelecido pelos tribunais dos Estados Unidos e de outros países que é legal usar descompiladores sob a cláusula de uso justo da lei de direitos autorais.
Para saber quando é legal usar um decompiler, você deve ler o texto dos seguintes casos:
- Sega Enterprises LTD v. Accolade, Inc.
- Atari Games Corp. v. Nintendo of America, Inc.
Leia também uma discussão sobre a legalidade de usar um emulador para executar um programa binário em um host diferente.
Backer Street Software não suporta o uso de ferramentas de engenharia reversa para fins ilegais.
Copyright © 1997 – 2015 Backer Street Software – All rights reserved.