SlideShare uma empresa Scribd logo
1 de 20
Baixar para ler offline
CONSTRUINDO UM
 ANALISADOR DE
  EXECUTÁVEIS
    Fernando Mercês
 Vale Security Conference 2011
  São José dos Campos - SP
$ whoami

- Consultor de projetos com software livre na 4Linux
- Bacharelando em Ciência da Computação
- Foco em infraestrutura e segurança da aplicações
- 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 Binária (http://www.mentebinaria.com.br)
- Criador do pev (analisador de arquivos PE)
- Criador do USBForce (antivírus para pen-drive)
- Mantenedor do T50 (ferramenta para stress em redes)
Agenda

- O que faz um analisador
- O executável
- Estudo do formato
- pev
- Perguntas
O que faz um
 analisador?
Interpreta o formato do executável para
exibir informações do tipo:

- Entrypoint (início do programa)
- Arquitetura alvo / tipo do executável
- Requisitos para execução
- Seções
- Proteções
- E qualquer outra informação útil para
quem analisa
Como todo arquivo, não passa de uma
sequência de bits. A diferença está em
como interpretamos:

       Binário    01010101
       Decimal    85
       Hexa       55
       ASM x86    PUSH EBP
       ASCII      U
O executável
- Além do código, contém informações
para ser devidamente executado no SO
alvo.

- Pode ser editado como qualquer outro

- Possui um formato / especificação

- Documentação do formato disponível na
internet. Mais usados são ELF e PE.
Estudo do
 formato
- Busca da disposição dos campos no
executável.

- Digamos que a documentação
especifique:

 -> Um arquivo PE válido começa com
um campo de dois bytes chamado magic
number, onde o primeiro byte é o 0x4D e o
segundo é o 0x5A, sempre.
Então 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("%xn", checksum);
- Para facilitar, é bem possível 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 opção de mostrar os valores dos
campos para o usuário.

- É possível detectar proteções como
packers, crypters etc.

- Existe muita informação dentro de um
binário executável. 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 cabeçalhos do PE

- Detecta TLS callback, ASLR e DEP/NX

- Exibe resources no primeiro nível
$ pev -c psftp.exe 
COFF header:
 Machine:                   0x14c - Intel 386 and compatible (32-bits)
 Number of sections:        4
 Date/time stamp:           1177846971 (Sun, 29 Apr 2007 11:42:51 UTC)
 Symbol Table offset:       0
 Number of symbols:         0
 Size of optional header:   0xe0
 Characteristics:           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:                       RT_ICON
 Offset:                     0x28
 Type:                       RT_GROUP_ICON
 Offset:                     0x68
 Type:                       RT_VERSION
 Offset:                     0x80
  Product Version:           0.60.0.0


$ pev -o psftp.exe  | head
Optional (PE) header:
 Magic number:               0x10b (PE32)
 Linker major version:       7
 Linker minor version:       10
 Size of .code section:      0x35000
 Size of .data section:      0x1a000
 Size of .bss section:       0
 Entry point:                0x2d812
 Address of .code section:   0x1000
 Address of .data section:   0x36000
TODO...

- Detecção de packers
- Disassembly de seções
- Formatação de saída (CSV, XML...)
- Extração de resources
- Exibir imports e exports
- Detecção do compilador
- Detecção do idioma do binário
- CRC32
- Detecção de strings inclusive XOReadas
Conteúdo: Fernando Mercês (CC 3.0)
baseado no paper "Construindo um
analisador de executáveis".

Template: Frank Skibby Jensen

http://pev.sf.net
@MenteBinaria
www.mentebinaria.com.br

Perguntas?

Mais conteúdo relacionado

Mais procurados

Mais procurados (16)

Controle lpt em_c_sharp
Controle lpt em_c_sharpControle lpt em_c_sharp
Controle lpt em_c_sharp
 
Ficheiros texto
Ficheiros textoFicheiros texto
Ficheiros texto
 
How stuff works
How stuff worksHow stuff works
How stuff works
 
PHPSC Conference 2010 - Desenvolvimento de Extensões PECL
PHPSC Conference 2010 - Desenvolvimento de Extensões PECLPHPSC Conference 2010 - Desenvolvimento de Extensões PECL
PHPSC Conference 2010 - Desenvolvimento de Extensões PECL
 
Filas encadeadas
Filas encadeadasFilas encadeadas
Filas encadeadas
 
A Linguagem Lua - Uma abordagem inicial
A Linguagem Lua - Uma abordagem inicialA Linguagem Lua - Uma abordagem inicial
A Linguagem Lua - Uma abordagem inicial
 
PL/Python: Programando em Python no PostgreSQL
PL/Python: Programando em Python no PostgreSQLPL/Python: Programando em Python no PostgreSQL
PL/Python: Programando em Python no PostgreSQL
 
Ficheiros em JAVA
Ficheiros em JAVAFicheiros em JAVA
Ficheiros em JAVA
 
Sapo Sessions PHP
Sapo Sessions PHPSapo Sessions PHP
Sapo Sessions PHP
 
1001 Execuções de Código Remoto
1001 Execuções de Código Remoto1001 Execuções de Código Remoto
1001 Execuções de Código Remoto
 
Unix Sockets
Unix SocketsUnix Sockets
Unix Sockets
 
Pilhas encadeadas
Pilhas encadeadasPilhas encadeadas
Pilhas encadeadas
 
Java 15
Java 15Java 15
Java 15
 
Linguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo LuaLinguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo Lua
 
Files e File System PHP (Português)
Files e File System PHP (Português)Files e File System PHP (Português)
Files e File System PHP (Português)
 
Introdução a Exploração de Software
Introdução a Exploração de SoftwareIntrodução a Exploração de Software
Introdução a Exploração de Software
 

Destaque

SlackShow 2010: Monitorando servidores com o Twitter
SlackShow 2010: Monitorando servidores com o TwitterSlackShow 2010: Monitorando servidores com o Twitter
SlackShow 2010: Monitorando servidores com o TwitterFernando Mercês
 
Criando um site com LAMP e Joomla em 30 minutos
Criando um site com LAMP e Joomla em 30 minutosCriando um site com LAMP e Joomla em 30 minutos
Criando um site com LAMP e Joomla em 30 minutosFernando Mercês
 
FISL11: Protegendo webservers na intranet contra ataques Man-In-The-Middle
FISL11: Protegendo webservers na intranet contra ataques Man-In-The-MiddleFISL11: Protegendo webservers na intranet contra ataques Man-In-The-Middle
FISL11: Protegendo webservers na intranet contra ataques Man-In-The-MiddleFernando Mercês
 
FISL11: Análise de binários ELF
FISL11: Análise de binários ELFFISL11: Análise de binários ELF
FISL11: Análise de binários ELFFernando Mercês
 
(Un)Protecting USB Storage Media
(Un)Protecting USB Storage Media(Un)Protecting USB Storage Media
(Un)Protecting USB Storage MediaFernando Mercês
 
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux Systems
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux SystemsLinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux Systems
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux SystemsFernando Mercês
 
Disparando eventos com Asterisk
Disparando eventos com AsteriskDisparando eventos com Asterisk
Disparando eventos com AsteriskFernando Mercês
 
Engenharia Reversa no Linux
Engenharia Reversa no LinuxEngenharia Reversa no Linux
Engenharia Reversa no LinuxFernando Mercês
 

Destaque (9)

SlackShow 2010: Monitorando servidores com o Twitter
SlackShow 2010: Monitorando servidores com o TwitterSlackShow 2010: Monitorando servidores com o Twitter
SlackShow 2010: Monitorando servidores com o Twitter
 
Criando um site com LAMP e Joomla em 30 minutos
Criando um site com LAMP e Joomla em 30 minutosCriando um site com LAMP e Joomla em 30 minutos
Criando um site com LAMP e Joomla em 30 minutos
 
FISL11: Protegendo webservers na intranet contra ataques Man-In-The-Middle
FISL11: Protegendo webservers na intranet contra ataques Man-In-The-MiddleFISL11: Protegendo webservers na intranet contra ataques Man-In-The-Middle
FISL11: Protegendo webservers na intranet contra ataques Man-In-The-Middle
 
FISL11: Análise de binários ELF
FISL11: Análise de binários ELFFISL11: Análise de binários ELF
FISL11: Análise de binários ELF
 
Entendendo os pacotes DEB
Entendendo os pacotes DEBEntendendo os pacotes DEB
Entendendo os pacotes DEB
 
(Un)Protecting USB Storage Media
(Un)Protecting USB Storage Media(Un)Protecting USB Storage Media
(Un)Protecting USB Storage Media
 
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux Systems
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux SystemsLinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux Systems
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux Systems
 
Disparando eventos com Asterisk
Disparando eventos com AsteriskDisparando eventos com Asterisk
Disparando eventos com Asterisk
 
Engenharia Reversa no Linux
Engenharia Reversa no LinuxEngenharia Reversa no Linux
Engenharia Reversa no Linux
 

Semelhante a Construindo um analisador de executáveis

Análise de Código Malicioso no Linux
Análise de Código Malicioso no LinuxAnálise de Código Malicioso no Linux
Análise de Código Malicioso no Linuxcrimesciberneticos
 
Python e Linux para a criação de ferramentas para pentest
Python e Linux para a criação de ferramentas para pentestPython e Linux para a criação de ferramentas para pentest
Python e Linux para a criação de ferramentas para pentestEdson Celio
 
Principais conceitos técnicas e modelos de programação paralela
Principais conceitos técnicas e modelos de programação paralelaPrincipais conceitos técnicas e modelos de programação paralela
Principais conceitos técnicas e modelos de programação paralelaIntel Software Brasil
 
software tipos.ppt
software tipos.pptsoftware tipos.ppt
software tipos.pptLinaKelly3
 
Cherrypy - um framework para desenvolvimento rápido de aplicações web
Cherrypy - um framework para desenvolvimento rápido de aplicações webCherrypy - um framework para desenvolvimento rápido de aplicações web
Cherrypy - um framework para desenvolvimento rápido de aplicações webAlvaro Oliveira
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...tdc-globalcode
 
Análise de malware com software livre
Análise de malware com software livreAnálise de malware com software livre
Análise de malware com software livreDiego Santos
 
Tecnologias para mineração de dados nas nuvens
Tecnologias para mineração de dados nas nuvensTecnologias para mineração de dados nas nuvens
Tecnologias para mineração de dados nas nuvensAlessandro Binhara
 
pgBouncer: um aglomerador de conexões para PostgreSQL
pgBouncer: um aglomerador de conexões para PostgreSQLpgBouncer: um aglomerador de conexões para PostgreSQL
pgBouncer: um aglomerador de conexões para PostgreSQLelliando dias
 
Slide curso metasploit
Slide curso metasploitSlide curso metasploit
Slide curso metasploitRoberto Soares
 
Aula 7 conjunto de instrucoes
Aula 7   conjunto de instrucoesAula 7   conjunto de instrucoes
Aula 7 conjunto de instrucoesCratuscb
 
Aula - Comandos Linux - Parte 1
Aula - Comandos Linux - Parte 1Aula - Comandos Linux - Parte 1
Aula - Comandos Linux - Parte 1Leo Amorim
 
Comandos Linux Parte 1
Comandos Linux Parte 1Comandos Linux Parte 1
Comandos Linux Parte 1Leo Amorim
 
Introdução à Programacao em Processing
Introdução à Programacao em Processing Introdução à Programacao em Processing
Introdução à Programacao em Processing Jorge Cardoso
 
I Workshop de Redes do Iespes
I Workshop de Redes do IespesI Workshop de Redes do Iespes
I Workshop de Redes do Iespesluizfelipemz
 
Linux4all#2
Linux4all#2Linux4all#2
Linux4all#2Daniel
 

Semelhante a Construindo um analisador de executáveis (20)

Análise de Código Malicioso no Linux
Análise de Código Malicioso no LinuxAnálise de Código Malicioso no Linux
Análise de Código Malicioso no Linux
 
Python e Linux para a criação de ferramentas para pentest
Python e Linux para a criação de ferramentas para pentestPython e Linux para a criação de ferramentas para pentest
Python e Linux para a criação de ferramentas para pentest
 
Principais conceitos técnicas e modelos de programação paralela
Principais conceitos técnicas e modelos de programação paralelaPrincipais conceitos técnicas e modelos de programação paralela
Principais conceitos técnicas e modelos de programação paralela
 
Ud2
Ud2Ud2
Ud2
 
software tipos.ppt
software tipos.pptsoftware tipos.ppt
software tipos.ppt
 
Resumo x86
Resumo x86Resumo x86
Resumo x86
 
LEON3 e KIT ALTERA.
LEON3 e KIT ALTERA.LEON3 e KIT ALTERA.
LEON3 e KIT ALTERA.
 
Cherrypy - um framework para desenvolvimento rápido de aplicações web
Cherrypy - um framework para desenvolvimento rápido de aplicações webCherrypy - um framework para desenvolvimento rápido de aplicações web
Cherrypy - um framework para desenvolvimento rápido de aplicações web
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
Análise de malware com software livre
Análise de malware com software livreAnálise de malware com software livre
Análise de malware com software livre
 
Tecnologias para mineração de dados nas nuvens
Tecnologias para mineração de dados nas nuvensTecnologias para mineração de dados nas nuvens
Tecnologias para mineração de dados nas nuvens
 
pgBouncer: um aglomerador de conexões para PostgreSQL
pgBouncer: um aglomerador de conexões para PostgreSQLpgBouncer: um aglomerador de conexões para PostgreSQL
pgBouncer: um aglomerador de conexões para PostgreSQL
 
Slide curso metasploit
Slide curso metasploitSlide curso metasploit
Slide curso metasploit
 
Aula 7 conjunto de instrucoes
Aula 7   conjunto de instrucoesAula 7   conjunto de instrucoes
Aula 7 conjunto de instrucoes
 
Aula - Comandos Linux - Parte 1
Aula - Comandos Linux - Parte 1Aula - Comandos Linux - Parte 1
Aula - Comandos Linux - Parte 1
 
Comandos Linux Parte 1
Comandos Linux Parte 1Comandos Linux Parte 1
Comandos Linux Parte 1
 
Workshop Python
Workshop PythonWorkshop Python
Workshop Python
 
Introdução à Programacao em Processing
Introdução à Programacao em Processing Introdução à Programacao em Processing
Introdução à Programacao em Processing
 
I Workshop de Redes do Iespes
I Workshop de Redes do IespesI Workshop de Redes do Iespes
I Workshop de Redes do Iespes
 
Linux4all#2
Linux4all#2Linux4all#2
Linux4all#2
 

Construindo um analisador de executáveis

  • 1. CONSTRUINDO UM ANALISADOR DE EXECUTÁVEIS Fernando Mercês Vale Security Conference 2011 São José dos Campos - SP
  • 2. $ whoami - Consultor de projetos com software livre na 4Linux - Bacharelando em Ciência da Computação - Foco em infraestrutura e segurança da aplicações - 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 Binária (http://www.mentebinaria.com.br) - Criador do pev (analisador de arquivos PE) - Criador do USBForce (antivírus para pen-drive) - Mantenedor do T50 (ferramenta para stress em redes)
  • 3. Agenda - O que faz um analisador - O executável - Estudo do formato - pev - Perguntas
  • 4. O que faz um analisador?
  • 5. Interpreta o formato do executável para exibir informações do tipo: - Entrypoint (início do programa) - Arquitetura alvo / tipo do executável - Requisitos para execução - Seções - Proteções - E qualquer outra informação útil para quem analisa
  • 6. Como todo arquivo, não passa de uma sequência de bits. A diferença está em como interpretamos: Binário 01010101 Decimal 85 Hexa 55 ASM x86 PUSH EBP ASCII U
  • 8. - Além do código, contém informações para ser devidamente executado no SO alvo. - Pode ser editado como qualquer outro - Possui um formato / especificação - Documentação do formato disponível na internet. Mais usados são ELF e PE.
  • 10. - Busca da disposição dos campos no executável. - Digamos que a documentação especifique: -> Um arquivo PE válido começa com um campo de dois bytes chamado magic number, onde o primeiro byte é o 0x4D e o segundo é o 0x5A, sempre.
  • 11. Então 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; }
  • 12. -> 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("%xn", checksum);
  • 13. - Para facilitar, é bem possível 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;
  • 14. - Depois de ler as estruturas, o analisador deve dar opção de mostrar os valores dos campos para o usuário. - É possível detectar proteções como packers, crypters etc. - Existe muita informação dentro de um binário executável. Tudo o que o analisador precisa fazer é interpretar os bytes brutos (raw).
  • 15. pev the pe file analyzer
  • 16. - Software livre (GPLv3) - Multiplataforma (ANSI C) - Suporte a PE32/PE32+ - Imprime todos os cabeçalhos do PE - Detecta TLS callback, ASLR e DEP/NX - Exibe resources no primeiro nível
  • 17. $ pev -c psftp.exe  COFF header:  Machine: 0x14c - Intel 386 and compatible (32-bits)  Number of sections: 4  Date/time stamp: 1177846971 (Sun, 29 Apr 2007 11:42:51 UTC)  Symbol Table offset: 0  Number of symbols: 0  Size of optional header: 0xe0  Characteristics: 0x10f (0000000100001111) base relocations stripped executable image line numbers removed (deprecated) local symbols removed (deprecated) 32-bit machine
  • 18. $ pev -rp psftp.exe  Resources (.rsrc section): Type: RT_ICON Offset: 0x28 Type: RT_GROUP_ICON  Offset: 0x68  Type: RT_VERSION  Offset: 0x80   Product Version: 0.60.0.0 $ pev -o psftp.exe  | head Optional (PE) header:  Magic number: 0x10b (PE32)  Linker major version: 7  Linker minor version: 10  Size of .code section: 0x35000  Size of .data section: 0x1a000  Size of .bss section: 0  Entry point: 0x2d812  Address of .code section: 0x1000  Address of .data section: 0x36000
  • 19. TODO... - Detecção de packers - Disassembly de seções - Formatação de saída (CSV, XML...) - Extração de resources - Exibir imports e exports - Detecção do compilador - Detecção do idioma do binário - CRC32 - Detecção de strings inclusive XOReadas
  • 20. Conteúdo: Fernando Mercês (CC 3.0) baseado no paper "Construindo um analisador de executáveis". Template: Frank Skibby Jensen http://pev.sf.net @MenteBinaria www.mentebinaria.com.br Perguntas?