Ferramenta de analise estatica de arquivos PE para estudos de Threat Intelligence, Malware Analysis e engenharia reversa defensiva.
O projeto foi implementado em Go e examina executaveis Windows sem executar nenhum byte do binario analisado.
O static-malware-analyzer ajuda a fazer triagem inicial de arquivos .exe, .dll e .sys, gerando indicadores tecnicos e um score de risco baseado em heuristicas defensivas.
Ele foi desenhado para ser simples de compilar, facil de auditar e util em laboratorio, estudos, portifolio e pipelines basicos de triagem.
- Parsing PE com
debug/pe - Hashes MD5, SHA1 e SHA256
- Metadados PE: arquitetura, machine type, subsystem, image base, entry point e timestamp de compilacao
- Secoes com tamanho bruto, tamanho virtual, offset, flags e entropia
- Deteccao de secoes suspeitas
- Imports agrupados por DLL
- Imports suspeitos mapeados para comportamentos
- Import hash aproximado para clustering
- Extracao de strings ASCII
- Deteccao de URLs, PowerShell e termos comuns em ransom notes
- Execucao de regras YARA
- Fallback interno para regras YARA simples quando o binario
yaranao esta instalado - Enriquecimento opcional com VirusTotal
- Deteccao de overlay
- Indicadores de packers, como UPX e secoes de alta entropia
- Findings normalizados com severidade
- Score de risco e verdict final
- Relatorios JSON por amostra
- Modo batch para diretorios
- Exportacao CSV de resumo
- Configuracao opcional via arquivo YAML simples
| Comportamento | Exemplo | ATT&CK |
|---|---|---|
| Process Injection | VirtualAllocEx, WriteProcessMemory, CreateRemoteThread |
T1055 |
| Ransomware | strings de resgate, CryptEncrypt, Bitcoin |
T1486 |
| Keylogging | SetWindowsHookEx, GetAsyncKeyState |
T1056 |
| Anti Debug | IsDebuggerPresent, NtQueryInformationProcess |
T1622 |
| Persistencia | CreateServiceA |
T1547 |
| Beacon/C2 | InternetOpenA, HttpSendRequestA, URLs |
T1071 |
| Execucao | CreateProcessA |
T1106 |
- Go 1.26 ou superior
- Opcional:
yarainstalado e disponivel noPATH - Opcional: chave da API do VirusTotal
O projeto nao depende de CGO e compila bem no Windows.
Linux/macOS:
go build -o static-malware-analyzer ./cmd/analyzerWindows PowerShell:
go build -o static-malware-analyzer.exe ./cmd/analyzerAnalise de um arquivo:
.\static-malware-analyzer.exe .\samples\malware.exeDefinindo diretorio de regras e saida:
.\static-malware-analyzer.exe .\samples\malware.exe --rules .\rules --output .\outputCom VirusTotal:
.\static-malware-analyzer.exe .\samples\malware.exe --vt-key SUA_API_KEYModo batch em um diretorio:
.\static-malware-analyzer.exe .\samples --output .\outputBatch com CSV:
.\static-malware-analyzer.exe .\samples --output .\output --csv .\output\summary.csvUsando config:
.\static-malware-analyzer.exe --config .\config.example.yml .\samples| Flag | Descricao | Padrao |
|---|---|---|
--rules |
Diretorio com regras .yar |
./rules |
--output |
Diretorio dos relatorios JSON | ./output |
--vt-key |
API key do VirusTotal | vazio |
--min-string-len |
Tamanho minimo para strings ASCII | 6 |
--csv |
Caminho opcional para resumo CSV | vazio |
--config |
Arquivo YAML simples de configuracao | vazio |
Exemplo:
rules_dir: ./rules
output_dir: ./output
min_string_len: 6
csv_path: ./output/summary.csv
# vt_key: SUA_API_KEYFlags passadas pela CLI sobrescrevem valores do arquivo de configuracao.
Cada amostra gera um relatorio em output/report_<sha256-prefix>.json.
Campos principais:
filename,path,sizeeanalyzed_athashespestringsyara_matchesvirustotalrisk
Exemplo resumido:
{
"filename": "sample.exe",
"hashes": {
"sha256": "..."
},
"pe": {
"is_pe": true,
"architecture": "x64",
"import_hash": "...",
"packer_hints": ["high entropy section .text"]
},
"risk": {
"score": 75,
"verdict": "HIGH",
"reasons": ["process_injection: +40", "yara matches"]
}
}Se o binario yara estiver instalado no PATH, o analyzer usa o engine oficial via CLI.
Quando yara nao esta instalado, o projeto usa um avaliador interno simples compativel com as regras incluidas em rules/malware_patterns.yar.
O fallback cobre:
- strings textuais
nocaseany of them2 of themany of ($a,$b)$a and any of ($b,$c)
Para regras YARA avancadas, instale o YARA oficial.
O score e heuristico e vai de 0 a 100.
| Score | Verdict |
|---|---|
0-14 |
LOW |
15-39 |
SUSPICIOUS |
40-69 |
MEDIUM |
70-100 |
HIGH |
Fatores considerados:
- comportamentos inferidos por imports
- secoes com alta entropia
- strings suspeitas
- matches YARA
- deteccoes do VirusTotal
- overlay
- packer hints
- findings PE
go test ./...- Analise completamente estatica; nao detecta comportamento em runtime.
- Import hash e aproximado, nao equivalente perfeito ao
imphashdo pefile. - O fallback YARA nao implementa a linguagem YARA completa.
- O score e uma heuristica de triagem, nao uma classificacao definitiva.
- VirusTotal depende de conectividade, cota e chave valida.
- Export HTML
- Detalhes de resources e version info
- Authenticode parsing completo
- Rich Header
- TLS callbacks
- Assinaturas de packers adicionais
- Paralelismo no modo batch
- SARIF ou STIX/TAXII para integracoes defensivas
Uso exclusivamente educacional e defensivo.
Nao execute malware em ambientes reais. Analise amostras em laboratorio isolado, com snapshots e sem credenciais sensiveis.