Você está na página 1de 20

CONSTRUINDO UM

ANALISADOR DE
EXECUTVEIS
Fernando Mercs
Vale Security Conference 2011
So Jos dos Campos - SP

$ whoami
- Consultor de projetos com software livre na 4Linux
- Bacharelando em Cincia da Computao
- Foco em infraestrutura e segurana da aplicaes
- Membro ativo de diversas comunidades de software livre
- A+, LPIC-2, MCP, MCITP
- Palestrante em eventos como FISL, LinuxCon e H2HC
- Idealizador do Universidade Livre, evento que leva o SL s
universidades brasileiras
- Autor do Mente Binria (http://www.mentebinaria.com.br)
- Criador do pev (analisador de arquivos PE)
- Criador do USBForce (antivrus para pen-drive)
- Mantenedor do T50 (ferramenta para stress em redes)

Agenda
- O que faz um analisador
- O executvel
- Estudo do formato
- pev
- Perguntas

O que faz um
analisador?

Interpreta o formato do executvel para


exibir informaes do tipo:
- Entrypoint (incio do programa)
- Arquitetura alvo / tipo do executvel
- Requisitos para execuo
- Sees
- Protees
- E qualquer outra informao til para
quem analisa

Como todo arquivo, no passa de uma


sequncia de bits. A diferena est em
como interpretamos:
Binrio
Decimal
Hexa
ASM x86
ASCII

01010101
85
55
PUSH EBP
U

O executvel

- Alm do cdigo, contm informaes


para ser devidamente executado no SO
alvo.
- Pode ser editado como qualquer outro
- Possui um formato / especificao
- Documentao do formato disponvel na
internet. Mais usados so ELF e PE.

Estudo do
formato

- Busca da disposio dos campos no


executvel.
- Digamos que a documentao
especifique:
-> Um arquivo PE vlido comea com
um campo de dois bytes chamado magic
number, onde o primeiro byte o 0x4D e o
segundo o 0x5A, sempre.

Ento basta validar:


int verify(char *filename)
{
FILE *fp = fopen(filename, "rb");
char bytes[2];
fread(bytes, 2, 1, fp);
fclose(fp);
if (bytes[0]=='M' && bytes[1]=='Z')
return 1;
return 0;
}

-> 16 bytes a frente da assinatura PE, est


o checksum, que tem 2 bytes de tamanho.
unsigned short checksum;
fseek(fp, 16, SEEK_CUR);
fread(&checksum, 2, 1, fp);
printf("%x\n", checksum);

- Para facilitar, bem possvel que o SO


tenha estruturas j prontas para leitura do
formato.
/* COFF header (trecho da windows.h) */
typedef struct _IMAGE_FILE_HEADER {
WORD Machine;
WORD NumberOfSections;
DWORD TimeDateStamp;
DWORD PointerToSymbolTable;
DWORD NumberOfSymbols;
WORD SizeOfOptionalHeader;
WORD Characteristics;
} IMAGE_FILE_HEADER;

- Depois de ler as estruturas, o analisador


deve dar opo de mostrar os valores dos
campos para o usurio.
- possvel detectar protees como
packers, crypters etc.
- Existe muita informao dentro de um
binrio executvel. Tudo o que o
analisador precisa fazer interpretar os
bytes brutos (raw).

pev
the pe file analyzer

- Software livre (GPLv3)


- Multiplataforma (ANSI C)
- Suporte a PE32/PE32+
- Imprime todos os cabealhos do PE
- Detecta TLS callback, ASLR e DEP/NX
- Exibe resources no primeiro nvel

$ pev -c psftp.exe
COFF header:
Machine:
Number of sections:
Date/time stamp:
Symbol Table offset:
Number of symbols:
Size of optional header:
Characteristics:

0x14c - Intel 386 and compatible (32-bits)


4
1177846971 (Sun, 29 Apr 2007 11:42:51 UTC)
0
0
0xe0
0x10f (0000000100001111)
base relocations stripped
executable image
line numbers removed (deprecated)
local symbols removed (deprecated)
32-bit machine

$ pev -rp psftp.exe


Resources (.rsrc section):
Type:
Offset:
Type:
Offset:
Type:
Offset:
Product Version:

RT_ICON
0x28
RT_GROUP_ICON
0x68
RT_VERSION
0x80
0.60.0.0

$ pev -o psftp.exe | head


Optional (PE) header:
Magic number:
Linker major version:
Linker minor version:
Size of .code section:
Size of .data section:
Size of .bss section:
Entry point:
Address of .code section:
Address of .data section:

0x10b (PE32)
7
10
0x35000
0x1a000
0
0x2d812
0x1000
0x36000

TODO...
- Deteco de packers
- Disassembly de sees
- Formatao de sada (CSV, XML...)
- Extrao de resources
- Exibir imports e exports
- Deteco do compilador
- Deteco do idioma do binrio
- CRC32
- Deteco de strings inclusive XOReadas

Contedo: Fernando Mercs (CC 3.0)


baseado no paper "Construindo um
analisador de executveis".
Template: Frank Skibby Jensen
http://pev.sf.net
@MenteBinaria
www.mentebinaria.com.br
Perguntas?

Você também pode gostar