Estrutura básica de um Portable Executable(PE) ou EXE, espero que gostem
O que é um Portable Executable (PE)?
Estrutura:
Explicação das Estruturas:
Como uma imagem fala mais do que mil palvras, né? Deixo uma Imagem bacana para vocês, explicando tudo aquilo!
Att #M0rph....
Referências:
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
O que é um Portable Executable (PE)?
Portable Executable (PE) é um formato de arquivos executáveis, código objeto e DLLs usado no Windows.
O formato PE é basicamente uma estrutura de dados que encapsula a informação necessária para que o
carregador do sistema Windows possa manipular o código executável que está empacotado. Isso inclui
biblioteca dinâmica de referências para linking, exportação e importação de API, dados de
administração de recursos, dados de thread-local storage (TLS).
O formato PE é basicamente uma estrutura de dados que encapsula a informação necessária para que o
carregador do sistema Windows possa manipular o código executável que está empacotado. Isso inclui
biblioteca dinâmica de referências para linking, exportação e importação de API, dados de
administração de recursos, dados de thread-local storage (TLS).
Estrutura:
• 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 I
• 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 I
Explicação das Estruturas:
• Cabeçalho do DOS: Os dois primeiros bytes é para a assinatura do DOS, fomando a palavra MZ(sigla inicial de um
dos idealizadores do MS-DOS). Logo após vemos o fragmento da stub do DOS, ela é responsavel para avisar ao usuário
de que o aplicativo não pode ser executado em modo texto.
• Cabeçalho Arquivo: Já o Cabeçalho Arquivo ele é bastante importante, nele está contido todas as informações básicas necessárias
para que o arquivo funcione. Nele está contido o número de seções, tamanho das seções e onde inicia essas
seções, se é um exe ou dll, onde inicia a execução do código e muitas outras informações. As informações podem
variar de exe para exe, dependendo do grau de complexidade do aplicativo, nele também está contido a assinatura
do cabeçalho PE.
• Cabeçalho Opcional: Uma parte interessante do Cabeçalho Opcional é o array indicativo dos diretórios de dados (data directories).
Estes diretórios contêm ponteiros para dados residentes nas seções (sections). Se, por exemplo, um binário
tiver um diretório de exportação (export directory), existe um ponteiro para este diretório no array, sob a
denominação IMAGE_DIRECTORY_ENTRY_EXPORT, que apontará para uma das seções.
• Cabeçalho de seções: Cabeçalho de seções é a parte mais interessanete, ele é responsável pela execução do programa, os outros cabeçalho
servem para localizar o conteúdo. Lembrando, os nomes não tem aver com o conteúdo de cada seção, por exemplo, na
seção ".dados" podem muito bem conter o código do executável e vise versa.
• Seções: Depois desses cabeçalhos vem as seções, com os dados nus(raw data), elas estão alinhadas em FileAlignment bytes,
ou seja, o arquivo vai ter que obter o tamnho exato do FileAlignment. As seções estão são alinhdas de acordo com
o SectionAlignment. Entendeu? Não né? Vou tentar explicar de novo, se o FileAlignment for de 512 bytes, tamanho
do aplicativo vai ser multiplicos de 512 bytes, pode verificar vendo o tamanho de um aplicativo.
Algumas seções mais comuns de um exe:
• Seção de código - Code Section ( .text ou .code )
• Seção de recursos – Resource Section ( .rsrc )
• Seção de dados – Data Section ( .data )
• Seção de exportação – Export data section ( .edata )
• Seção de importação - Import data section ( .idata )
• Informações de debug - Debug information ( .debug )
dos idealizadores do MS-DOS). Logo após vemos o fragmento da stub do DOS, ela é responsavel para avisar ao usuário
de que o aplicativo não pode ser executado em modo texto.
• Cabeçalho Arquivo: Já o Cabeçalho Arquivo ele é bastante importante, nele está contido todas as informações básicas necessárias
para que o arquivo funcione. Nele está contido o número de seções, tamanho das seções e onde inicia essas
seções, se é um exe ou dll, onde inicia a execução do código e muitas outras informações. As informações podem
variar de exe para exe, dependendo do grau de complexidade do aplicativo, nele também está contido a assinatura
do cabeçalho PE.
• Cabeçalho Opcional: Uma parte interessante do Cabeçalho Opcional é o array indicativo dos diretórios de dados (data directories).
Estes diretórios contêm ponteiros para dados residentes nas seções (sections). Se, por exemplo, um binário
tiver um diretório de exportação (export directory), existe um ponteiro para este diretório no array, sob a
denominação IMAGE_DIRECTORY_ENTRY_EXPORT, que apontará para uma das seções.
• Cabeçalho de seções: Cabeçalho de seções é a parte mais interessanete, ele é responsável pela execução do programa, os outros cabeçalho
servem para localizar o conteúdo. Lembrando, os nomes não tem aver com o conteúdo de cada seção, por exemplo, na
seção ".dados" podem muito bem conter o código do executável e vise versa.
• Seções: Depois desses cabeçalhos vem as seções, com os dados nus(raw data), elas estão alinhadas em FileAlignment bytes,
ou seja, o arquivo vai ter que obter o tamnho exato do FileAlignment. As seções estão são alinhdas de acordo com
o SectionAlignment. Entendeu? Não né? Vou tentar explicar de novo, se o FileAlignment for de 512 bytes, tamanho
do aplicativo vai ser multiplicos de 512 bytes, pode verificar vendo o tamanho de um aplicativo.
Algumas seções mais comuns de um exe:
• Seção de código - Code Section ( .text ou .code )
• Seção de recursos – Resource Section ( .rsrc )
• Seção de dados – Data Section ( .data )
• Seção de exportação – Export data section ( .edata )
• Seção de importação - Import data section ( .idata )
• Informações de debug - Debug information ( .debug )
Como uma imagem fala mais do que mil palvras, né? Deixo uma Imagem bacana para vocês, explicando tudo aquilo!
Att #M0rph....
Referências:
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...