Ir para conteúdo
Faça parte da equipe! (2024) ×
Conheça nossa Beta Zone! Novas áreas a caminho! ×
  • Quem está por aqui   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.

Tudo sobre o Formato PE(Portable Executable)


AceStryker
 Compartilhar

Posts Recomendados

Introdução

 

Já olhou algum arquivo no hex editor?Se a resposta for sim, então você pensou, "Poxa, mas que bagunça isso...Porque não fizeram essa porcaria organizada?", minha resposta é: Fizeram!E o que faremos aqui é entender sobre essa bagunça pra você ver seu programa com olhos diferentes!

 

O PE pode ser dividido em 3 partes:

 

  • Cabeçalhos
  • Diretórios de Dados
  • Seções

 

Algumas pessoas preferem dividir em 2, tirando o diretório de dados e incluindo ele nas seções, mas vou trabalhar com ele separadamente.

 

 

Cabeçalhos

 

Cabeçalho do DOS

 

Localidade: Primeiros bytes do arquivo

Estrutura usada:

É necessário se cadastrar para acessar o conteúdo.

Os primeiros bytes de um PE são as letras MZ ou em hex 5A 4D(Lembrando que como o windows usa little endian ficaria 4D 5A no hex editor), isto é essencial para reconhecer se um arquivo é um PE válido.

 

Desafio: Crie uma função que cheque se um arquivo é um PE válido

Resposta do desafio:

 

É necessário se cadastrar para acessar o conteúdo.

 

 

Cabeçalho do arquivo

 

Localidade: DOSHeader.e_lfanew + 4

Estrutura Usada:

É necessário se cadastrar para acessar o conteúdo.

PS: IMAGE_FILE_HEADER pode ser obtida no

É necessário se cadastrar para acessar o conteúdo.

 

Primeiramente, porque 4?Porque o e_lfanew indica o local de onde fica a assinatura PE, que é nada mais nada menos que a sigla PE (em hex little endian 50 45 00 00) e ela ocupa 4 bytes, depois dela vem nosso cabeçalho do arquivo

 

Desafio: Pegar número de seções(veremos sobre isto mais embaixo) do arquivo

Resposta do Desafio:

 

É necessário se cadastrar para acessar o conteúdo.

 

 

 

Cabeçalho Opcional

 

Localidade: Depois do Cabeçalho do arquivo

Estrutura Usada:

É necessário se cadastrar para acessar o conteúdo.

Também contida na

É necessário se cadastrar para acessar o conteúdo.

 

Não se enganem, mesmo este cabeçalho tendo o nome de opcional, ele é sempre contido no arquivo, este contem as informações de como o arquivo deve ser tratado, como o ImageBase, o Address of EntryPoint, que somados viram o EntryPoint, entre outros.

 

Desafio: Pegue o EntryPoint do arquivo

Resposta do desafio:

 

É necessário se cadastrar para acessar o conteúdo.

 

 

Diretórios de Data

 

Localidade: Após o diretório opcional

Estrutura Usada:

É necessário se cadastrar para acessar o conteúdo.

PS: Localizado dentro do

É necessário se cadastrar para acessar o conteúdo.

 

Por mais que esteja dentro da estrutura do cabeçalho opcional esta é totalmente diferente e por isto quero trata-la diferente, este é o local onde você acha o endereço e o tamanho de por exemplo, o EAT, o IAT o local das resources

 

Desafio: Faça uma função que retorne o endereço da IAT

Resposta do desafio:

 

É necessário se cadastrar para acessar o conteúdo.

 

 

Cabeçalho das Seções

 

Localidade: Após os diretórios de data

Estrutura Usada:

É necessário se cadastrar para acessar o conteúdo.

 

Cada seção tem seu cabeçalho próprio e todos eles ficam um atráz do outro, sendo o .code(ou .text) o primeiro, este é a seção onde o código em si fica, existem também por exemplo o .data que é a seção onde fica as variáveis inicializadas e etc

 

Desafio: Pegar o nome da primeira seção do arquivo

Resposta do desafio:

 

É necessário se cadastrar para acessar o conteúdo.

 

 

 

Seções

 

As seções são o local dos códigos em si...

 

.code é o local dos seus códigos como funções, você também pode achar ela com nome de .text ou as vezes AUTO

.data é o local onde se encontra as variáveis inicializadas, por exemplo: "var I : integer = 0;", Pode ser encontrada também com o nome de .idata ou DATA

.rsrc é o local onde os recursos ficam(o hex em si deles), como forms, cursors, imagens, e nos hacks de hoje em dia as dlls

 

Desafio pra casa

 

Crie um executável do 0, crie suas estruturas, suas seções e poste sua source aqui, o primeiro que fizer isso ganha os parabéns hehe

 

 

A source de todas as funções:

É necessário se cadastrar para acessar o conteúdo.

 

Créditos:

AceStryker

Link para o comentário
Compartilhar em outros sites

  • 3 semanas atrás...

Exadecimal é realmente complexo, mas quando queremos aprender, temos que ler até o mais complexo...

Little Endian é um horror mesmo, inverte tdo :droga:

Logo logo, em um tempo vago eu posto o meu Executável do 0 hehehe.

 

Excelente tutorial, e obrigado por compartilhar suas funções, merecidamente venceu o evento !

Membro - Bronze - Geek - Bronze - Tech - Mod - Coord - Co-Admin - Platinum

Link para o comentário
Compartilhar em outros sites

Hexadecimal (com H) (:

 

Conteúdo em si é bom, mas são poucos que conseguirão utilizar tal.

Meus brinquedos em WinAPI:

Calculador

MemoryScanner

Faça parte também da DarkProgramming Team!

Link para o comentário
Compartilhar em outros sites

Este tópico está impedido de receber novos posts.
 Compartilhar

×
×
  • Criar Novo...

Informação Importante

Nós fazemos uso de cookies no seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies , caso contrário, vamos supor que você está bem para continuar.