Pular para o conteúdo
Skillpedia
Diversos35 mil · #5451

analyzing-golang-malware-with-ghidra

Ajuda seu agente a entender programas feitos em Go, mesmo que estejam escondidos. Ele recupera nomes de funções e informações sobre as partes usadas no programa.

O que ela faz

Esta ferramenta ajuda a analisar programas feitos na linguagem Go (Golang) que podem ser maliciosos. Ela extrai informações importantes como nomes de funções e bibliotecas usadas, mesmo que o programa tente esconder esses detalhes.

Quando usar

  • ✓Ao investigar um programa suspeito feito em Go.
  • ✓Quando você precisa entender quais bibliotecas um programa Go está usando.
  • ✓Para recuperar nomes de funções que foram escondidos em um programa Go.

Exemplo do que pedir para a IA

“Analise este programa Go suspeito e me diga quais bibliotecas ele usa e tente recuperar os nomes das funções.”

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-golang-malware-with-ghidra/SKILL.md

Mensagem pronta para colar

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

A ferramenta procura por informações específicas dentro do programa Go. Ela lê estruturas de dados como 'pclntab' e 'buildinfo' para encontrar nomes de funções e detalhes sobre as bibliotecas que o programa utiliza.

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-golang-malware-with-ghidra

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/mukul975/Anthropic-Cybersecurity-Skills/main/skills/analyzing-golang-malware-with-ghidra/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 Golang com Ghidra

Visão Geral

Go (Golang) tornou-se uma linguagem popular para autores de malware devido às suas capacidades de compilação cruzada, linkagem estática que produz binários autossuficientes e a complexidade que introduz para engenharia reversa. Binários Go contêm todo o runtime, biblioteca padrão e todas as dependências linkadas estaticamente, resultando em binários grandes (frequentemente 5-15MB) com milhares de funções. O Ghidra luta com formatos de string específicos de Go (não terminados em nulo), nomes de função removidos e padrões de concorrência de goroutine. Ferramentas especializadas como GoResolver (Volexity, 2025) usam similaridade de grafo de fluxo de controle para desofuscar automaticamente e recuperar nomes de função em binários Go removidos ou ofuscados.

Quando Usar

  • Ao investigar incidentes de segurança que exigem a análise de malware golang com ghidra
  • Ao construir regras de detecção ou consultas de caça a ameaças para este domínio
  • Quando analistas de SOC precisam de procedimentos estruturados para este tipo de análise
  • Ao validar a cobertura de monitoramento de segurança para técnicas de ataque relacionadas

Pré-requisitos

  • Ghidra 11.0+ com JDK 17+
  • Plugin GoResolver (para recuperação de nomes de função)
  • Kit de Ferramentas de Engenharia Reversa Go (go-re.tk)
  • Python 3.9+ para scripts auxiliares
  • Compreensão dos internos do runtime Go (goroutines, canais, interfaces)
  • Familiaridade com a estrutura binária Go (pclntab, moduledata, itab)

Conceitos Chave

Estrutura Binária Go

Binários Go incorporam metadados ricos na estrutura pclntab (Tabela de Linha de PC), que mapeia contadores de programa para nomes de função, arquivos de origem e números de linha. Mesmo binários com símbolos removidos retêm esses metadados. A estrutura moduledata contém ponteiros para informações de tipo, itabs (tabelas de interface) e o próprio pclntab. Strings Go são armazenadas como um par ponteiro-comprimento em vez de strings C terminadas em nulo.

Recuperação de Função em Binários Removidos

Apesar da remoção de tabelas de símbolos, binários Go retêm nomes de função dentro do pclntab. No entanto, ferramentas de ofuscação como garble renomeiam funções para strings aleatórias. O GoResolver aborda isso computando assinaturas de grafo de fluxo de controle de funções ofuscadas e combinando-as com um banco de dados de funções conhecidas da biblioteca padrão Go e pacotes de terceiros.

Extração de Crate/Dependência

O gerenciamento de dependências do Go incorpora caminhos de módulo e strings de versão no binário. A extração desses revela as dependências de terceiros do malware (bibliotecas HTTP, pacotes de criptografia, frameworks C2), o que fornece insights sobre as capacidades sem engenharia reversa completa.

Fluxo de Trabalho

Etapa 1: Análise Binária Inicial

#!/usr/bin/env python3
"""Analisa metadados de binários Go para análise de malware."""
import struct
import sys
import re


def find_go_build_info(data):
    """Extrai informações de build Go do binário."""
    # Magia de informações de build Go: \xff Go buildinf:
    magic = b'\xff Go buildinf:'
    offset = data.find(magic)
    if offset == -1:
        return None

    print(f"[+] Informações de build Go no offset 0x{offset:x}")

    # Extrai a string de versão Go próxima
    go_version = re.search(rb'go\d+\.\d+(?:\.\d+)?', data[offset:offset+256])
    if go_version:
        print(f"  Versão Go: {go_version.group().decode()}")

    return offset


def find_pclntab(data):
    """Localiza a estrutura pclntab (Tabela de Linha de PC)."""
    # Bytes mágicos do pclntab variam por versão Go
    magics = {
        b'\xfb\xff\xff\xff\x00\x00': "Go 1.2-1.15",
        b'\xfa\xff\xff\xff\x00\x00': "Go 1.16-1.17",
        b'\xf1\xff\xff\xff\x00\x00': "Go 1.18-1.19",
        b'\xf0\xff\xff\xff\x00\x00': "Go 1.20+",
    }

    for magic, version in magics.items():
        offset = data.find(magic)
        if offset != -1:
            print(f"[+] pclntab encontrado em 0x{offset:x} ({version})")
            return offset, version

    return None, None


def extract_function_names(data, pclntab_offset):
    """Extrai nomes de função do pclntab."""
    if pclntab_offset is None:
        return []

    functions = []
    # Strings de nome de função seguem padrões específicos
    func_pattern = re.compile(
        rb'(?:main|runtime|fmt|net|os|crypto|encoding|io|sync|'
        rb'syscall|reflect|strings|bytes|path|time|math|sort|'
        rb'github\.com|golang\.org)[/\.][\w/.]+',
    )

    for match in func_pattern.finditer(data):
        name = match.group().decode('utf-8', errors='replace')
        if len(name) > 4 and len(name) < 200:
            functions.append(name)

    return sorted(set(functions))



…
Perguntas frequentes

O que é Ghidra?

Ghidra é uma ferramenta gratuita de engenharia reversa que ajuda a entender como programas funcionam, mesmo sem o código original.

O que significa 'engenharia reversa'?

É o processo de desmontar um programa para entender seu funcionamento interno, como se estivesse desmontando um aparelho para ver suas peças.

Por que Go é usado para criar malware?

Go é popular porque cria programas que funcionam em muitos sistemas sem precisar de muitas outras partes (estaticamente compilados) e pode ser mais difícil de analisar.

Detalhes

Descrição original do autor

Reverse engineer Go-compiled malware in Ghidra by parsing Go buildinfo and pclntab structures, recovering stripped/obfuscated function names (e.g. via GoResolver), and extracting embedded module/dependency strings and types from Go binaries. Use when analyzing a Go-language malware sample, deobfuscating a garble-packed Go binary, or recovering function names and third-party dependencies from a str

repo: mukul975/Anthropic-Cybersecurity-Skills

Popularidade

Estrelas no GitHub
35 mil
Posição no ranking
#5451
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