Investigação com strings e hexadecimal
Encontre artefatos de malware.
Investigação com strings e hexadecimal é uma aula grátis de Cyber Security Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Cyber Security Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Cyber Security Academy inclui 4 aulas no total.
Da amostra à regra
A busca começa com uma amostra. Você extrai artefatos característicos, decide quais são duráveis e os codifica em uma regra que detecta a família sem sinalizar arquivos benignos.
O fluxo de trabalho é: fazer a triagem da amostra, extrair cadeias de texto e características estruturais, separar o sinal do ruído, elaborar a regra e depois testá-la tanto contra a família quanto contra um conjunto de arquivos limpos antes da implantação.
Extração de cadeias de texto candidatas
Comece pelo utilitário strings para listar sequências imprimíveis, capturando texto ASCII e UTF-16 (em formato amplo). Softwares maliciosos do Windows frequentemente armazenam cadeias de texto em formato amplo.
Examine a saída em busca de endereços de C2, nomes de objetos de exclusão mútua, caminhos do registro, mensagens de erro personalizadas, caminhos PDB e textos incomumente específicos. Ignore cadeias genéricas de execução e do compilador.
strings -a sample.bin > ascii.txt
strings -e l sample.bin > wide.txt # UTF-16LE
grep -iE 'http|mutex|\\\\pipe\\\\|\.pdb' ascii.txt wide.txtEscolha de cadeias duráveis
Nem toda cadeia de texto pertence a uma regra. Dê preferência a artefatos que o autor não possa alterar sem esforço:
- Nomes de objetos de exclusão mútua ou canais codificados diretamente, exclusivos da família
- Marcadores personalizados de protocolo ou chaves de configuração
- Mensagens incomuns de depuração ou pânico
- Caminhos PDB incorporados que revelam o ambiente de compilação
Evite código padrão de bibliotecas, nomes comuns de interfaces de programação e cadeias de versão compartilhadas por softwares legítimos, pois eles geram falsos positivos.
strings:
$mutex = "Global\\Zx7yQ_lock" wide
$cfgkey = "x0r_cfg_begin" ascii
$pdb = "C:\\build\\loader\\release\\loader.pdb"Superação de ofuscação simples
Muitas famílias usam XOR ou codificam levemente as cadeias de texto de outras formas. Se houver poucas cadeias de texto em claro, procure a forma codificada ou a rotina de decodificação.
Você pode calcular os bytes codificados com XOR de um texto claro conhecido e fazer a correspondência com eles, ou usar o modificador xor do YARA para fazer automaticamente a correspondência de uma cadeia de texto usando qualquer chave XOR de um único byte.
strings:
// matches "http://" under any single-byte XOR key
$u = "http://" xor
// or a fixed key range
$k = "config" xor(0x01-0xff)Busca com padrões hexadecimais
Quando as cadeias de texto estão ofuscadas, mas o código não, faça a correspondência com padrões de bytes da própria lógica do software malicioso: uma rotina de descriptografia, um laço de descompactação ou uma constante exclusiva.
Desmonte a amostra, encontre uma sequência de instruções característica e converta os códigos de operação em uma cadeia hexadecimal. Substitua por curingas os bytes que variam (endereços e valores imediatos) para que o padrão sobreviva à recompilação.
strings:
// XOR decrypt loop with wildcarded counter/address
$decrypt = { 8A ?? 34 ?? 88 ?? 4? 4? 75 ?? }Curingas e saltos na prática
A arte da busca hexadecimal consiste em escolher o que substituir por curingas. Se for rígido demais, uma recompilação invalida a regra; se for flexível demais, ela corresponderá a tudo.
- Substitua por curingas os deslocamentos relativos e valores imediatos que o compilador altera
- Mantenha os códigos de operação fixos, pois o algoritmo é estável
- Use saltos
[n-m]quando os comprimentos das instruções variarem
Procure um padrão longo o bastante para ser exclusivo (geralmente 8 ou mais bytes relevantes), mas flexível onde for necessário.
strings:
$stub = { 55 8B EC 83 EC [1-4] E8 ?? ?? ?? ?? 33 C0 }Indicadores estruturais e de PE
Características estáticas além dos bytes brutos produzem condições fortes e com pouco ruído. Usando o módulo pe, você pode fazer correspondências com:
- imphash — resumo da tabela de imports, geralmente estável entre as compilações de uma família
- nomes de seção — empacotadores personalizados acrescentam seções reveladoras
- imports específicos — VirtualAllocEx + WriteProcessMemory + CreateRemoteThread sinalizam injeção
import "pe"
condition:
pe.imphash() == "4e3a9f..." or
for any s in pe.sections : ( s.name == ".x0rsec" )Entropia como sinal
Regiões compactadas ou criptografadas têm alta entropy. O módulo math mede isso, permitindo sinalizar amostras cuja seção de carga útil parece criptografada, uma característica marcante de empacotadores.
Entropy sozinha é pouco específica (instaladores compactados também têm alta entropy), portanto combine-a com outros indicadores em vez de gerar um alerta com base apenas nela.
import "math"
condition:
math.entropy(0, filesize) >= 7.2 and $loader_stubCombinação de indicadores
As regras mais fortes exigem vários indicadores independentes, para que nenhuma coincidência isolada gere uma correspondência. Combine uma cadeia de texto, um padrão de código e uma característica estrutural.
Essa condição em camadas resiste tanto a falsos positivos (todas as partes precisam concordar) quanto à evasão (o autor precisa alterar várias características de uma só vez).
condition:
uint16(0) == 0x5A4D and
filesize < 800KB and
$mutex and
$decrypt and
pe.imports("kernel32.dll", "CreateRemoteThread")Nomenclatura, metadados e versionamento
Uma regra de busca só é útil se outras pessoas puderem confiar nela e mantê-la. Dê a cada regra um nome claro, com espaço de nomes, e um meta completo.
- Registre os resumos criptográficos das amostras a partir das quais a regra foi criada
- Informe a família, o autor, a data e uma referência
- Incremente um campo de versão quando aprimorar a lógica
Quando a regra for acionada meses depois, esses metadados informarão ao responsável pela resposta o que ela significa e quanto se pode confiar nela, transformando uma busca pontual em uma detecção durável e compartilhável.
meta:
family = "X0rLoader"
author = "ir-team"
date = "2026-06-04"
hash = "9f1c...e2"
version = "2"Teste antes de confiar
Sempre valide uma regra nova com dois conjuntos de arquivos:
- Verdadeiros positivos — toda amostra conhecida da família deve corresponder
- Software legítimo — um grande conjunto limpo (binários do sistema, aplicativos comuns) não deve gerar correspondência (NOT)
Um único falso positivo em uma DLL do Windows pode colocar arquivos críticos de todo o ambiente em quarentena. Execute, conte, analise as não correspondências e as correspondências e depois refine a regra antes de implantá-la amplamente.
yara -r family.yar /malware_corpus/ # expect all to hit
yara -r family.yar /clean_corpus/ # expect zero hitsVerificação rápida
Escolha o indicador mais resistente.
Recapitulação
Busca prática com YARA, de ponta a ponta:
- Extraia cadeias ASCII e em formato amplo; mantenha artefatos duráveis (objetos de exclusão mútua, chaves de configuração e caminhos PDB)
- Supere a ofuscação leve com o modificador XOR ou padrões codificados
- Faça a correspondência com padrões de bytes de código (rotinas de descriptografia/descompactação) quando as cadeias de texto estiverem ocultas
- Substitua bytes voláteis por curingas, mantenha os códigos de operação fixos e use saltos para comprimentos variáveis
- Use PE imphash, seções, imports e entropy como sinais estruturais
- Combine vários indicadores para resistir a falsos positivos e à evasão
- Sempre teste com conjuntos de arquivos da família e de software legítimo antes da implantação
A seguir: executar essas regras em todo o ambiente.
Perguntas Frequentes
A aula “Investigação com strings e hexadecimal” é grátis?
Sim — o texto completo de “Investigação com strings e hexadecimal” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Cyber Security Academy, atualize para CoddyKit PRO. O curso de Cyber Security Academy inclui 4 aulas no total.
O que vou aprender em “Investigação com strings e hexadecimal”?
Encontre artefatos de malware. Você pratica Cyber Security Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Cyber Security Academy?
Nenhuma experiência prévia é necessária. Cyber Security Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Investigação com strings e hexadecimal”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Cyber Security Academy?
Sim. Cada aula de Cyber Security Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Para que serve YARA
- Sintaxe de regras YARA
- Investigação com strings e hexadecimal
- Dimensionando e automatizando varreduras