Estrutura de arquivos executáveis (Formato PE)

Se você é um especialista em segurança e está fazendo uma investigação forense, ou análise de Malware é importante entender como é a estrutura de um arquivo executável no Windows. O formato de arquivo executável portátil Portable executable (PE) é um tipo de formato usado no Windows (x86 e x64).

No Linux temos o formato Executable Link File (ELF).

O formato de arquivo PE é uma estrutura de dados que contém as informações necessárias para que o o sistema operacional Windows gerencie o código executável encapsulado. Antes do arquivo PE havia um formato chamado COFF usado em sistemas Windows NT.

Explorer Suite – Ferramenta popular de analise de malware

As estruturas de arquivos PE incluem DOS Header, DOS Stub, PE File Header, Image Optional Header, Section Table, e Sections.

https://dandylife.net/blog/archives/388

DOS header – O cabeçalho do DOS começa com os primeiros 64 bytes de cada arquivo PE.

DOS Stub – O stub do DOS geralmente apenas imprime uma string, algo como a mensagem “Este programa não pode ser executado no modo DOS”. Este arquivo é mantido no endereço 0x3c, que é deslocado para a próxima seção do cabeçalho PE.

PE file header – O cabeçalho PE principal é uma estrutura do tipo IMAGE_NT_HEADERS e contém principalmente SIGNATURE, IMAGE_FILE_HEADER e IMAGE_OPTIONAL_HEADER. Um arquivo PE possui uma coleção de campos que definem a aparência do restante do arquivo.

Uma boa fonte de leitura é o https://tech-zealots.com/malware-analysis/pe-portable-executable-structure-malware-analysis-part-2/

Image Optional Header – Este não é um cabeçalho opcional e não relevante. ste cabeçalho contém algumas informações críticas que estão além das informações básicas contidas na estrutura de dados.

Section Table – A localização desta tabela de seção é determinada pelo cálculo da localização dos primeiros bytes após o cabeçalho. Para isso, temos que usar o tamanho do cabeçalho opcional. Cada cabeçalho de seção tem pelo menos 40 bytes de entrada. Abaixo ,algumas das entradas importantes?

  • Name1: uma string de codificação UTF8 com preenchimento nulo de 8 bytes. Isso pode ser nulo.
  • VirtualSize: O tamanho real dos dados da seção em bytes. Isso pode ser menor que o tamanho da seção no disco.
  • SizeOfRawData: O tamanho dos dados da seção no arquivo no disco.
  • PointerToRawData: Isso é muito útil porque é o deslocamento do início do arquivo para os dados da seção.
  • Characteristics: Descreve as características da seção.

Sections – Os cabeçalhos de seção PE também especificam o nome da seção usando um campo de matriz de caracteres simples chamado Name. Abaixo estão os vários nomes de seções comuns disponíveis em um arquivo executável:

  • .text: Esta é normalmente a primeira seção e contém o código executável para o aplicativo. Dentro desta seção há também um ponto de entrada da aplicação: o endereço da primeira instrução da aplicação que será executada. Um aplicativo pode ter mais de uma seção com o código executável.
  • .data: Esta seção contém dados inicializados de um aplicativo, como strings.
  • .rdata ou .idata: Normalmente, esses nomes de seção são usados ​​para as seções onde a tabela de importação está localizada. Esta é a tabela que lista a API do Windows usada pelo aplicativo (junto com os nomes de suas DLLs associadas). Usando isso, o carregador do Windows conhece a API para localizar em qual DLL do sistema recuperar seu endereço.
  • .reloc: contém informações de realocação.
  • .rsrc: Este é o nome comum para a seção resource-container, que contém coisas como imagens usadas para a interface do usuário do aplicativo.
  • .debug: contém informações de depuração.

Fontes:

Anúncio

Sobre Daniel Donda 549 Artigos
Olá, meu nome é Daniel Donda e sou especialista em cibersegurança, autor de livros, professor e palestrante. Saiba mais

1 Comentário

Faça um comentário

Seu e-mail não será divulgado.


*