druserx/scrutator

GitHub: druserx/scrutator

Stars: 0 | Forks: 0

# Scrutator **Analisador estático de PE para triagem de malware** escrito em C puro, sem dependências externas. O nome vem do latim *scrutator* — "aquele que examina a fundo". A ideia surgiu da necessidade de ter uma ferramenta rápida, portátil e sem dependência de bibliotecas externas (sem OpenSSL, sem libpe, nada) pra fazer triagem inicial de amostras em ambiente isolado. __ __ _____________ ___/ /_____ _/ /_____ _____ / ___/ ___/ / / __/ __/ __ `/ __/ __ \/ ___/ (__ ) /__/ /_/ /_/ /_/ /_/ / /_/ /_/ / / /____/\___/\__,_/\__/\__/\__,_/\__/\____/_/ static pe analyzer | v0.4.2 ## O que faz - **Hash SHA-256** implementado do zero (sem OpenSSL) - **Parse completo do formato PE** — DOS header, COFF, Optional Header (PE32 e PE32+), seções, imports, exports - **Entropia de Shannon por seção** — detecta packers, código cifrado e shellcode embutido - **Extração de strings** ASCII e UTF-16LE com identificação de padrões suspeitos - **Análise heurística** com 50+ APIs classificadas por categoria de ataque - **Detecção de técnicas ofensivas**: injeção de código, process hollowing, keylogging, persistência via registro, C2 via WinInet/WinHTTP, anti-debugging - **Score de risco 0-100** com classificação por nível (INFO / BAIXO / MÉDIO / ALTO / CRÍTICO) - Compila em Linux e Windows (analisa amostras Windows em qualquer plataforma) ## Compilando # Linux / WSL git clone https://github.com/druserx/scrutator cd scrutator make # Windows (MinGW) mingw32-make Sem dependências externas. Só precisa de `gcc` e `make`. ## Uso # análise básica ./scrutator amostra.exe # saída verbosa (inclui todas as strings extraídas) ./scrutator -v amostra.exe # salva relatório em arquivo de texto ./scrutator -o relatorio.txt amostra.exe # os dois juntos ./scrutator -v -o relatorio.txt ransomware.dll ## Exemplo de saída [ INFORMACOES GERAIS ] ───────────────────────────────────────────────────────────── Arquivo : sample_ransomware.exe Tamanho : 487424 bytes (476.0 KB) SHA-256 : 3a4b2c1d9e8f7a6b5c4d3e2f1a0b9c8d7e6f5a4b3c2d1e0f9a8b7c6d5e4f3a2b Arquitetura : 32-bit (x86 (i386)) Subsystem : Windows GUI Tipo : EXE Entry Point : 0x00012a40 Image Base : 0x0000000000400000 ASLR : nao DEP/NX : nao [ SECOES ] ───────────────────────────────────────────────────────────── .text 0x00001000 0x00062f10 0x00000400 0x00063000 X R H=6.91 .rdata 0x00064000 0x0000e4a8 0x00063400 0x0000e600 . R H=4.23 .data 0x00073000 0x00004210 0x00071a00 0x00003200 . RW H=3.87 UPX0 0x00078000 0x00040000 0x00000000 0x00000000 X RW H=0.00 UPX1 0x000b8000 0x0003e000 0x00075200 0x0003dc00 X RW H=7.94 [ INDICADORES DE COMPORTAMENTO ] ───────────────────────────────────────────────────────────── [CRITICO ] [injecao ] Trifeta classica de injecao de DLL: VirtualAllocEx + WriteProcessMemory + CreateRemoteThread [CRITICO ] [evasao ] Secao UPX1 executavel com entropia 7.94 - shellcode ou codigo cifrado [ALTO ] [rede ] URLDownloadToFileA — Baixa arquivo da internet [ALTO ] [persistencia] Referencia a chave Run do registro - padrao de persistencia [MEDIO ] [evasao ] IsDebuggerPresent — Detecta debugger [MEDIO ] [execucao ] Referencia a PowerShell - comum em loaders e droppers ═════════════════════════════════════════════════════════════ SCORE DE RISCO: 87/100 [########..] CLASSIFICACAO : CRITICO ═════════════════════════════════════════════════════════════ ## Estrutura do projeto scrutator/ ├── src/ │ ├── main.c # ponto de entrada, carregamento do arquivo │ ├── pe_parser.c # parse do formato PE (imports, exports, secoes) │ ├── sha256.c # SHA-256 implementado do zero (RFC 6234) │ ├── extrator.c # extração de strings ASCII e UTF-16LE │ ├── entropia.c # entropia de Shannon por seção │ ├── heuristicas.c # 50+ APIs classificadas + detecção de combos │ └── relatorio.c # output colorido no terminal + exportação txt ├── include/ │ ├── scrutator.h # tipos base, constantes, cores ANSI │ ├── pe_parser.h # estruturas do formato PE (sem windows.h) │ ├── sha256.h │ ├── extrator.h │ ├── entropia.h │ ├── heuristicas.h │ └── relatorio.h └── Makefile ## Como funciona ### Parser PE As estruturas do formato PE (`DOSHeader`, `COFFHeader`, `OptionalHeader32/64`, `SectionHeader`, etc.) são definidas manualmente em `pe_parser.h` usando `#pragma pack(push, 1)` — assim a ferramenta compila em Linux sem precisar de `windows.h` ou MinGW para analisar amostras. A conversão de RVA para offset físico percorre a section table manualmente, com bounds checking para não explodir em samples corrompidos ou manipulados. ### Entropia Usa a fórmula de Shannon: `H = -Σ(p_i × log₂(p_i))` calculada byte a byte por seção. Limiares: - `>= 7.0` — quase certamente cifrado ou comprimido - `>= 6.0` em seção executável — suspeito de shellcode ou packer ### Heurísticas Além de verificar APIs individualmente, detecta **combinações** que caracterizam técnicas específicas: - `VirtualAllocEx` + `WriteProcessMemory` + `CreateRemoteThread` → injeção de DLL clássica - `NtUnmapViewOfSection` + `VirtualAlloc` + `WriteProcessMemory` → process hollowing - `VirtualAlloc` + `VirtualProtect` → possível shellcode loader ## Limitações conhecidas - Análise estática apenas — não executa a amostra - Delay imports (`DDIR_DELAY_IMPORT`) listados mas não totalmente processados ainda - Amostras .NET precisam de análise separada (CIL bytecode, não código nativo) - Limite de 100MB por arquivo (na prática malware raramente ultrapassa isso) ## Referências - [PE Format Specification — Microsoft PECOFF v0.4](https://learn.microsoft.com/en-us/windows/win32/debug/pe-format) - [RFC 6234 — US Secure Hash Algorithms](https://www.rfc-editor.org/rfc/rfc6234) - [Shannon Entropy in Malware Analysis](https://practicalsecurityanalytics.com/file-entropy/) ## Licença MIT
标签:客户端加密