Pular para o conteúdo
Skillpedia
Análise e planilhas35 mil · #5479

analyzing-packed-malware-with-upx-unpacker

Faz seu agente identificar e descompactar programas maliciosos que foram 'empacotados'. Isso permite analisar o código original do programa.

O que ela faz

Esta ferramenta ajuda a descompactar programas que foram 'empacotados' com uma ferramenta chamada UPX. Isso é útil quando um programa malicioso (vírus) é disfarçado e você precisa ver o código original dele para análise.

Quando usar

  • ✓Quando um programa parece suspeito e tem poucas informações visíveis.
  • ✓Quando outras ferramentas indicam que o programa está 'empacotado' com UPX.
  • ✓Quando você precisa analisar o código original de um programa para fins de segurança.

Exemplo do que pedir para a IA

“Descompacte este arquivo suspeito para que eu possa analisá-lo.”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/mukul975/Anthropic-Cybersecurity-Skills/blob/main/skills/analyzing-packed-malware-with-upx-unpacker/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/mukul975/Anthropic-Cybersecurity-Skills/blob/main/skills/analyzing-packed-malware-with-upx-unpacker/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

A ferramenta tenta descompactar o arquivo usando o UPX. Se isso falhar porque o 'empacotador' foi modificado, ela tenta corrigir as partes alteradas antes de descompactar novamente.

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add mukul975/Anthropic-Cybersecurity-Skills --skill analyzing-packed-malware-with-upx-unpacker

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/mukul975/Anthropic-Cybersecurity-Skills/main/skills/analyzing-packed-malware-with-upx-unpacker/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

Analisando Malware Empacotado com Desempacotador UPX

Quando Usar

  • Análise estática revela seções de alta entropia e importações mínimas, indicando que o binário está empacotado
  • PEiD, Detect It Easy ou PEStudio identificam UPX ou outro empacotador conhecido
  • A tabela de importação contém apenas LoadLibrary e GetProcAddress (resolução de importação em tempo de execução típica de binários empacotados)
  • Você precisa recuperar o binário original para desassemblagem e descompilação adequadas em Ghidra ou IDA
  • A descompressão automática de UPX falha porque o autor do malware modificou os bytes mágicos ou cabeçalhos do UPX

Não use ao lidar com empacotadores personalizados, protetores baseados em VM (Themida, VMProtect) ou amostras onde a descompressão dinâmica via depuração é mais apropriada.

Pré-requisitos

  • UPX (Ultimate Packer for eXecutables) instalado (apt install upx-ucl ou baixe em https://upx.github.io/)
  • Detect It Easy (DIE) para identificação de empacotador
  • Python 3.8+ com a biblioteca pefile para reparo manual de cabeçalhos
  • x64dbg ou x32dbg para descompressão manual quando ferramentas automatizadas falham
  • PE-bear ou CFF Explorer para inspeção e reparo de cabeçalhos PE
  • VM de análise isolada sem conectividade de rede

Fluxo de Trabalho

Passo 1: Identificar o Empacotador

Determine se a amostra está empacotada e identifique o empacotador:

# Check with Detect It Easy
diec suspect.exe

# Check with UPX (test without unpacking)
upx -t suspect.exe

# Python-based entropy and packer detection
python3 << 'PYEOF'
import pefile
import math

pe = pefile.PE("suspect.exe")

print("Section Analysis:")
for section in pe.sections:
    name = section.Name.decode().rstrip('\x00')
    entropy = section.get_entropy()
    raw = section.SizeOfRawData
    virtual = section.Misc_VirtualSize
    print(f"  {name:8s} Entropy: {entropy:.2f}  Raw: {raw:>8}  Virtual: {virtual:>8}")

# Check for UPX section names
section_names = [s.Name.decode().rstrip('\x00') for s in pe.sections]
if 'UPX0' in section_names or 'UPX1' in section_names:
    print("\n[!] UPX section names detected")
elif '.upx' in [s.lower() for s in section_names]:
    print("\n[!] UPX variant section names detected")

# Check import count (packed binaries have very few)
if hasattr(pe, 'DIRECTORY_ENTRY_IMPORT'):
    total_imports = sum(len(e.imports) for e in pe.DIRECTORY_ENTRY_IMPORT)
    print(f"\nTotal imports: {total_imports}")
    if total_imports < 10:
        print("[!] Very few imports - likely packed")
else:
    print("\n[!] No import directory - heavily packed")
PYEOF

Passo 2: Tentar Descompressão Padrão do UPX

Tente a descompressão integrada do UPX:

# Standard UPX decompress
upx -d suspect.exe -o unpacked.exe

# If UPX fails with "not packed by UPX" error, the headers may be modified
# Verbose output for debugging
upx -d suspect.exe -o unpacked.exe -v 2>&1

# Verify the unpacked file
file unpacked.exe
diec unpacked.exe

Passo 3: Reparar Cabeçalhos UPX Modificados

Se a descompressão padrão falhar, repare os bytes mágicos adulterados:

# Reparar cabeçalhos UPX modificados
import struct

with open("suspect.exe", "rb") as f:
    data = bytearray(f.read())

# Bytes mágicos do UPX: "UPX!" (0x55505821)
# Autores de malware comumente modificam estes para impedir descompressão automática

# Procurar por assinaturas UPX modificadas
upx_magic = b"UPX!"
modified_patterns = [b"UPX0", b"UPX\x00", b"\x00PX!", b"UPx!"]

# Encontrar e restaurar nomes de seção
pe_offset = struct.unpack_from("<I", data, 0x3C)[0]
num_sections = struct.unpack_from("<H", data, pe_offset + 6)[0]
section_table_offset = pe_offset + 0x18 + struct.unpack_from("<H", data, pe_offset + 0x14)[0]

print(f"Offset PE: 0x{pe_offset:X}")
print(f"Número de seções: {num_sections}")
print(f"Offset da tabela de seções: 0x{section_table_offset:X}")

for i in range(num_sections):
    offset = section_table_offset + (i * 40)
    name = data[offset:offset+8]
    print(f"Seção {i}: {name}")

# Restaurar bytes mágicos do UPX no binário
# Procurar pela localização da assinatura do cabeçalho UPX (geralmente perto do final dos dados empacotados)
for i in range(len(data) - 4):
    if data[i:i+3] == b"UPX" and data[i+3] != ord("!"):
        print(f"Encontrado magic UPX modificado no offset 0x{i:X}: {data[i:i+4]}")
        data[i:i+4] = b"UPX!"
        print(f"Restaurado para: UPX!")

# Também restaurar nomes de seção se modificados
for i in range(num_sections):
    offset = section_table_offset + (i * 40)
    name = data[offset:offset+8].rstrip(b'\x00')
    if name in [b"UPX0", b"UPX1", b"UPX2"]:
        continue  # Já está correto
    # Verificar modificações comuns

…
Perguntas frequentes

O que é 'empacotar' um programa?

É como colocar um programa dentro de uma caixa especial para torná-lo menor ou mais difícil de entender. O UPX é uma ferramenta comum para isso.

Por que descompactar um programa malicioso?

Para que os especialistas em segurança possam ver o código original e entender como ele funciona, quais danos ele pode causar e como combatê-lo.

O que são 'magic bytes' modificados?

São códigos especiais no início de um arquivo que identificam o tipo de 'empacotador' usado. Se eles forem alterados, as ferramentas normais podem não reconhecer o arquivo como empacotado com UPX.

Detalhes

Descrição original do autor

Identifies and unpacks UPX-packed malware samples, including binaries with modified UPX magic bytes or headers that block automated decompression, to recover the original executable for static analysis. Use when a sample shows high entropy, minimal imports, or only LoadLibrary/GetProcAddress in its import table, or when preparing a packed binary for disassembly in Ghidra or IDA. '

repo: mukul975/Anthropic-Cybersecurity-Skills

Popularidade

Estrelas no GitHub
35 mil
Posição no ranking
#5479
Licença
Apache-2.0
Atualizada em
31/08/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas