0Pricing
Cyber Security Academy · Aula

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.txt

Escolha 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_stub

Combinaçã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 hits

Verificaçã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

  1. Para que serve YARA
  2. Sintaxe de regras YARA
  3. Investigação com strings e hexadecimal
  4. Dimensionando e automatizando varreduras
← Voltar para Cyber Security Academy