Análise Estática Básica: Técnicas e Ferramentas
1. Antivírus Scanning (VirusTotal)
- Uso do VirusTotal para consultar bancos de dados de assinaturas.
- Análise do hash do arquivo para verificar se já é conhecido como malicioso.
- Além de hashes, o VirusTotal permite consultar URLs, IPs e domínios.
2. Encontrando Strings
- Strings revelam mensagens, URLs, nomes de arquivos e comandos legíveis dentro do binário.
- ASCII: 1 byte por caractere.
- Unicode: 2 bytes por caractere.
- Ambas terminam com um
NULL terminator(00) para indicar o fim da string. - Comando:
strings <arquivo>
3. Packed e Obfuscated (Empacotamento e Ofuscação)
- Ofuscado: O autor tenta esconder a lógica de execução.
- Packed: Subtipo de ofuscação onde o malware é comprimido. Ao ser executado, um small wrapper (descompactador) descomprime o programa real na memória.
- Programas legítimos costumam ter muitas strings; malwares empacotados têm pouquíssimas strings visíveis.
- Ferramenta para detecção: PEiD (detecta packers como UPX).
Portable Executable (PE) File Format
O PE é o “molde” padrão para executáveis no Windows (.exe, .dll). É uma estrutura de dados que informa ao loader do Windows como carregar o código.
Estrutura Básica do PE:
- DOS Header
- DOS Stub
- PE Header (NT Header)
- Section Header (Section Table)
- Sections:
.text: Instruções para a CPU (onde o código reside)..rdata: Importações e exportações. Dados apenas de leitura..data: Dados globais acessíveis em qualquer lugar..rsrc: Recursos não executáveis (ícones, imagens, strings de menus).
Analisando Headers com PEView
- Virtual Size: Tamanho da seção na memória.
- Size of Raw Data: Tamanho da seção no disco.
- Dica de Análise: Se o Virtual Size for muito maior que o Size of Raw Data, há grandes chances de o programa estar Packed.
Bibliotecas e Funções (Imports)
Listar os imports é valioso para entender a funcionalidade do programa.
Tipos de Linking:
- Static Linking: Comum em UNIX. O código da biblioteca é copiado para o executável (aumenta o tamanho do arquivo).
- Runtime Linking: Comum em malwares (especialmente os packed). Conecta-se às bibliotecas apenas quando as funções são chamadas.
- Dynamic Linking: O loader carrega as bibliotecas necessárias quando o programa inicia (armazenadas no cabeçalho PE). É o mais comum.
DLLs Comuns no Windows:
| DLL | Descrição |
|---|---|
Kernel32.dll | Core functionality (memória, arquivos, hardware). |
Advapi32.dll | Componentes avançados (Service Manager, Registry). |
User32.dll | Elementos de interface (botões, scroll bars). |
Gdi32.dll | Funções gráficas. |
Ntdll.dll | Interface com o Kernel do Windows (importada indiretamente). |
WSock32.dll / Ws2_32.dll | Networking (Rede). |
Wininet.dll | Funções de rede de alto nível (HTTP, FTP, NTP). |
Ferramentas: Dependency Walker (Windows), readelf (Linux), otool (MacOS).