Oficina
Compactadores PE
Dom 20 Ago 2006 16:13 |
- Detalhes
- Categoria: Ferramentas de Engenharia Reversa
- Atualização: Quarta, 15 Abril 2009 12:43
- Autor: vovó Vicki
- Acessos: 16902
Compactadores PE funcionam como zipadores de executáveis com uma diferença: arquivos zip, na sua forma compactada, ficam inacessíveis enquanto que executáveis compactados, apesar de "encolhidos", continuam funcionando normalmente.
Mas, antes de entrar em maiores detalhes, que tal saber o que é o formato PE?
O formato Portable Executable (daí PE), é o formato de arquivos executáveis usados no sistema operacional Windows de 32 e de 64 bits. O termo portable deve-se à portabilidade no sistema de 32 bits (e, por extensão, ao de 64 bits). Basicamente, o formato PE é uma estrutura de dados que mantém encapsuladas as informações que o carregador do Windows necessita para administrar o código executável. Isto inclui as referências a bibliotecas dinâmicas, a tabelas de exportação e importação da API e aos dados de gerenciamento de recursos. O formato PE inclui, entre outros tipos, os arquivos EXE, DLL e OBJ.
Se tudo isto estiver parecendo muito esotérico para o seu gosto, desista do resto do texto... não adianta insistir. Mas, se você ainda estiver acompanhando a linha de raciocínio, então vai dar para encarar o próximo tópico
O que é um compactador PE
Um compactador PE comprime e/ou esconde o conteúdo de um arquivo PE porque rearranja as seções do arquivo binário eliminando seções vazias e/ou compactando algumas partes. Além disto, insere suas próprias rotinas de descompactação. O efeito desta alteração é a redução do arquivo executável e o fenômeno é que, apesar de ter seu tamanho diminuído, ele continua sendo executável!
Diminuir o tamanho de executáveis tornou-se prático por causa da Internet. É muito melhor fazer um download de um mega do que fazer o download de vários megabytes. Esconder o conteúdo de executáveis também tem várias vantagens: limita o roubo de código, esconde endereços de rede, URLs, canais de IRC e dificulta a alteração do código (como a aplicação de ferramentas de cracking que alteram limites de tempo de uso ou registros de licença).
Os compactadores mais usados
Atualmente (estou falando de 2006) os compactadores mais usados são o UPX, o Armadillo/SoftwarePassport, o Aspack/Asprotect, o Softwrap, o Petite e o PeLock. Em menor escala encontramos o Shrinker e o WWPack.
O UPX é um freeware de código aberto. Muito eficiente, costumo usá-lo com frequência no software de minha autoria que disponibilizo para os usuários da Aldeia Numaboa. O objetivo é apenas "economizar" no download - a segurança é coisa secundária. Aliás, querer proteger qualquer código usando o UPX é utopia porque existem inúmeros descompactadores que revertem o processo justamente porque o UPX é um compactador de código aberto...
Os demais possuem várias opções de proteção e são largamente difundidos. Apesar de serem comerciais, os respectivos descompactadores continuam sendo os maiores entraves.
Como descobrir que um executável foi compactado
Muitas vezes, quando submetemos um executável a um debugger ou decompilador, recebemos uma mensagem qualquer informando que o arquivo não segue os padrões usuais de um PE e que provavelmente esteja compactado. Até aí, tudo bem. Mas, como descobrir qual compactador foi usado? É neste momento que o sonho de qualquer curioso é possuir um programinha mágico que dê uma dica confiável.
Eu também me rendi a esta tentação e saí à procura de um aplicativo que me ajudasse a desvendar este mistério. Tive a sorte de encontrar o PEid, um freeware disponibilizado por uma equipe de desenvolvedores que mantém este software caprichado. O identificador de PE analisa principalmente as seções do PE compactado e compara seus achados com padrões num banco de assinaturas. Atualmente existem mais de 600 e o interessante é que o usuário pode ampliar o banco de dados com novas assinaturas.
Antes de mais nada, dê uma chegadinha no site do PEid ou na seção de downloads/informática/utilitários aqui da Aldeia e baixe o aplicativo. A instalação não tem nada de especial: basta abrir o arquivo zip numa pasta própria. Depois disso, execute o PEid, clique no botão superior direito [...] e escolha um executável qualquer. Neste laboratório usei um programinha do tipo crackme compactado com o UPX. Se você quiser usar o mesmo programa, faça o download do Rebelx crackme três na seção de downloads/informatica/crackme/crackme para iniciantes.
Observe que na área de texto logo acima dos botões o PEid indica "UPX 0.89.6 - 1.02 / 1.05 - 1.24 (Delphi) stub -> Markus & Laszlo", ou seja, o executável foi compactado com o UPX. Além disto, também é possível ver as seções do PE: clique no botão [>] do lado direito de EP Section (onde a primeira seção mostrada é UPX1) para abrir a janela mostrada logo abaixo.
Estas são algumas das "marcas" deixadas pelo compactador que o PEid identificou. O executável analisado possui três seções: UPX0, UPX1 e .rsrc. Garanto que UPX0 e UPX1 não estão lá por acaso O Aspack costuma criar uma seção .aspack e outra cujo nome pode ser determinado (geralmente aparece como .adata, seu nome default). O PECompact cria as seções PEC2 e PECompact2... e assim por diante.
Bem vindo ao mundo dos identificadores. Explore o PEid à vontade, instale os plugins oferecidos no site do projeto e divirta-se! É uma excelente ferramenta, principalmente para ser usada nos crackme.