Silício Reverso oicìliS ©

Notice: Undefined variable: titulo in /home/numaboa.com.br/public_html/informatica/oiciliS/head.php on line 3
Coletânea de Referências para Segurança de Software
(ver 1.1 de 01.12.03)
O EXECUTÁVEL - este ilustre desconhecido
Cabeçalho MZ do DOS
Fragmento (stub) do DOS
Cabeçalho do Arquivo
Cabeçalho Opcional
Diretório de Dados
Cabeçalhos das Seções
Seção 1
Seção 2
...
Seção n

O executável utilizado como exemplo é o tutNB03.exe que se encontra para download no pacote tutNB03.zip. O roteiro para não se perder no emaranhado de informações:

  1. O Formato PE
  2. O layout do formato PE
  3. Fragmento do DOS e Assinatura PE
  4. Cabeçalho do Arquivo
  5. Cabeçalho Opcional
  6. Diretório de Dados
  7. Cabeçalho das Seções
  8. Seções
  9. Literatura

6. Diretórios de Dados

Imediatamente após o cabeçalho do opcional vêm os diretórios de dados. É um array de IMAGE_NUMBEROF_DIRECTORY_ENTRIES (16) IMAGE_DATA_DIRECTORY. Cada um destes diretórios descrevem a localização (um RVA de 32 bits denominado 'VirtualAddress') e o tamanho (também de 32 bits, chamado 'Size') de uma peça de informação que está localizada em uma das seções que seguem as entradas de diretório.

Por exemplo, o diretório de segurança (security directory) se encontra no RVA e tem o tamanho indicados no índice 4. Os índices definidos para os diretórios são:

NomeÍndiceDiretório
IMAGE_DIRECTORY_ENTRY_EXPORT0É o diretório de funções exportadas, usado principalmente para DLLs.
IMAGE_DIRECTORY_ENTRY_IMPORT1Diretório de símbolos importados.
IMAGE_DIRECTORY_ENTRY_RESOURCE2Diretório de recursos (resources).
IMAGE_DIRECTORY_ENTRY_EXCEPTION3Diretório de exceções - estrutura e aplicação ignorada.
IMAGE_DIRECTORY_ENTRY_SECURITY4Diretório de segurança - estrutura e aplicação ignorada.
IMAGE_DIRECTORY_ENTRY_BASERELOC5Tabela da base de remanejamento.
IMAGE_DIRECTORY_ENTRY_DEBUG6Diretório de debug, cujo conteúdo depende do compilador. De qualquer forma, muitos compiladores colocam as informações de debug na seção de código e não criam uma seção separada.
IMAGE_DIRECTORY_ENTRY_COPYRIGHT7String de descrição com alguns comentários de copyright ou coisa parecida.
IMAGE_DIRECTORY_ENTRY_GLOBALPTR8Valor de Máquina (MIPS GP) - estrutura e aplicação ignorada.
IMAGE_DIRECTORY_ENTRY_TLS9Diretório de armazenamento local de thread - estrutura desconhecida. Contém variáveis que são declaradas "__declspec(thread)", isto é, variáveis globais per-thread.
IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG10Diretório de configuração de carregamento - estrutura e aplicação ignorada.
IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT11Diretório de importação casada (bound import).
IMAGE_DIRECTORY_ENTRY_IAT12Tabela de endereços de importação (IAT - Import Address Table).

Como exemplo, se encontrarmos 2 words longos no índice 7, cujos valores sejam 12000 e 33, e o endereço de carregamento for 10000, sabemos que os dados de copyright estão no endereço 10000 + 12000 (independentemente da seção em que possam estar) e que o comentário de copyright tem 33 bytes de comprimento.

Se algum diretório de um tipo em particular não for usado no binário, o tamanho (Size) e o endereço virtual (VirtualAddress) são zero.

Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
0000 00C0 50 45 00 00 4C 01 03 00 A3 77 55 3C 00 00 00 00
...                                
0000 0130 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00
0000 0140 40 20 00 00 3C 00 00 00 00 40 00 00 60 09 00 00
0000 0150 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0000 0160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0000 0170 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0000 0180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0000 0190 00 00 00 00 00 00 00 00                

No nosso exemplo, no array de 12 elementos destacados em amarelo e laranja, apenas os diretórios de índice 1 e 2 possuem referências.

O diretório de índice 1 refere-se aos símbolos importados: seu RVA é 0000 2040 e seu tamanho é 0000 003C. Portanto, os dados referentes aos símbolos importados estarão deslocados em 8256 bytes (2040h = 8256d) e ocupam 60 bytes (3Ch = 60d).

O diretório de índice 2 refere-se aos recursos: seu RVA é 0000 4000 e seu tamanho é 0000 0960. Portanto, os dados referentes aos recursos estarão deslocados 16384 bytes (4000h = 16384d) e ocupam 2400 bytes (0960h = 2400d).


EXERCÍCIOS PROPOSTOS

Para este módulo, tente o seguinte:

  1. A esta altura você já deve ter uma coleção de executáveis no formato PE ;)))
    Faça uma tabela com os 12 tipos possíveis de diretórios de dados e com os programas analisados. Tente descobrir quais diretórios de dados são os mais comuns.

Voltar | Próximo segmento do formato PE: Cabeçalhos das seções


| AAAA | Página Inicial | Mapa do Site | Novidades | Busca | Indique esta página | Mestre da Teia | Voltar |
| Localizador || @ Info NumaBoa > oicìliS > O formato PE > Diretório de Dados
Créditos: vovó Vicki

webdesign sobMedida by vickiSoft - /informatica/oiciliS/PE/dirDados.php (20.11.01) versão 1.1 de 01.12.03
Licença Creative Commons 1998-2006 Aldeia NumaBoa
Exceto onde especificamente declarado, todo material deste site é disponibilizado de acordo com a Licença Creative Commons.