Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
r2gopclntabParser — Um script radare2 para analisar o gopclntab para facilitar a Engenharia Reversa de binários Go. | Kitploit
Ferramentas/GitHubGitHub/asherdll/r2gopclntabparser
Análise EstáticaEngenharia ReversaDepuradoresAnálise ForenseAnálise de MalwareAnálise de Binários
GitHubasherdll/r2gopclntabparser

r2gopclntabParser

Um script radare2 para analisar o gopclntab para facilitar a Engenharia Reversa de binários Go.

Ver Repositório
1721há 5 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

r2gopclntabParser

Nota: Esta funcionalidade foi implementada diretamente no núcleo do radare2 como plugin de análise gopc

Um analisador gopclntab baseado em radare2 para recuperar símbolos de funções de binários Go, incluindo os totalmente despojados (stripped). Suporta binários ELF, Mach-O e PE nas versões Go 1.2, 1.16, 1.18 e 1.20+.

Todo binário Go 1.2+ incorpora uma região de dados chamada gopclntab (Tabela de Linhas de Contadores de Programa) que o runtime Go usa para stack traces, mensagens de pânico, coleta de lixo e suporte ao depurador. É uma das fontes mais valiosas de informação de símbolos em binários Go.

r2gopclntabParser lê essa região através do radare2, analisa as estruturas específicas da versão e imprime a lista de funções recuperadas (com endereços, arquivos fonte e números de linha) ou aplica os nomes recuperados de volta na sessão aberta do radare2 como definições de funções, flags e comentários.


Índice

  • Pré-requisitos
  • Início Rápido
  • Referência da CLI
  • Modos de Saída e Exemplos
    • Modo Padrão (Cabeçalho + Lista de Funções)
    • Modo Verboso (-v)
    • Modo de Busca (-n)
    • Saída JSON (--json)
    • Listagem de Arquivos Fonte (--files)
    • Modo de Aplicação (--apply)
  • Resumo dos Resultados: Mach-O (Binário de Teste Despojado)
  • Teste PE: Greenblood, um Binário de Ransomware Go
  • Casos de Uso para Engenharia Reversa
  • Plataformas e Versões Go Suportadas
  • Metodologia
    • Estratégia de Localização de Seções
    • textStart vs. Seção .text
    • Análise de Estrutura Ciente da Versão
    • Decodificação de Dados PC
  • Limitações
  • Documentação Adicional
  • Referências

Pré-requisitos

DependênciaVersão Mínima
Python 33.8+
radare25.0+ (testado na 6.0.9)
r2pipequalquer

Nenhum outro pacote Python é necessário. O script usa apenas a biblioteca padrão (struct, json, argparse, os, sys) além do r2pipe.


Início Rápido```bash

List all functions recovered from a Go binary

python3 r2_gopclntab.py -f ./mybinary -l

Search for a specific function (substring match)

python3 r2_gopclntab.py -f ./mybinary -n main.main

Verbose header + function list

python3 r2_gopclntab.py -f ./mybinary -v -l

Apply recovered names into an r2 session

python3 r2_gopclntab.py -f ./mybinary --apply

JSON output

python3 r2_gopclntab.py -f ./mybinary --json

From within r2 (attach to running session)

#!pipe python3 r2_gopclntab.py --r2pipe --apply -v

---

## CLI Referência```
usage: r2_gopclntab.py [-h] [-f FILE] [-n FUNCNAME] [-v] [-l]
                       [--apply] [--json] [--files] [--r2pipe]

Obrigatório (um de)

FlagDescrição
-f FILE, --file FILECaminho para o binário Go a ser analisado. O script cria sua própria instância r2.
--r2pipeAnexar a uma sessão r2 já em execução (para uso dentro do console r2).

Opcional

FlagDescrição
-l, --listImprime todas as funções recuperadas com seus endereços.
-n NAME, --funcname NAMEImprime apenas funções cujo nome contenha NAME (correspondência de substring). Se houver uma correspondência exata, seu endereço é impresso separadamente.
-v, --verboseImprime mensagens de progresso, campos de cabeçalho analisados e offsets internos.
--applyEscreve os nomes de funções recuperados na sessão radare2 como definições de função (af+), flags no espaço de flags go. e comentários com o nome Go original e localização do código-fonte.
--jsonProduz o cabeçalho e a lista completa de funções como JSON na saída padrão.
--filesImprime a lista de caminhos de arquivos fonte extraídos da tabela de arquivos.
-h, --helpExibe a mensagem de ajuda.

As flags podem ser combinadas livremente. Quando nenhuma flag de saída é fornecida, o comportamento padrão é imprimir o cabeçalho e a lista completa de funções.


Modos de Saída e Exemplos

Todos os exemplos abaixo foram executados contra um binário Go 1.26 Mach-O arm64 stripado (compilado com -ldflags="-s -w"). O programa de teste define main.main, main.fibonacci, main.helloWorld e main.addNumbers. O compilador inlineou helloWorld e addNumbers, então eles não aparecem no gopclntab.

Modo Padrão (Cabeçalho + Lista de Funções)

Executar sem flags (ou apenas -f) imprime o cabeçalho analisado seguido pela tabela completa de funções:``` $ python3 r2_gopclntab.py -f ./gotest_stripped

Please provide the Markdown content to translate.```
============================================================
  Go pclntab Header
============================================================
  Magic:           0xFFFFFFF1
  Go version:      1.20+
  Pointer size:    8
  Min LC (quantum):4
  Num functions:   2030
  Num files:       261
  funcnameOffset:  0x48
  cuOffset:        0x14D20
  filetabOffset:   0x158D8
  pctabOffset:     0x19A98
  pclnOffset:      0x55E40
============================================================

ADDRESS       FUNCTION NAME
----------------------------------------------------------------------
0x100001000   go:buildid
0x100001070   internal/abi.BoundsDecode  (/opt/homebrew/Cellar/go/1.26.1/libexec/src/internal/abi/bounds.go:86)
0x100001150   internal/abi.NoEscape  (/opt/homebrew/Cellar/go/1.26.1/libexec/src/internal/abi/escape.go:19)
0x100001160   internal/abi.Kind.String  (/opt/homebrew/Cellar/go/1.26.1/libexec/src/internal/abi/type.go:143)
0x1000011E0   internal/abi.TypeOf  (/opt/homebrew/Cellar/go/1.26.1/libexec/src/internal/abi/type.go:181)
0x1000011F0   internal/abi.(*Type).ExportedMethods  (/opt/homebrew/Cellar/go/1.26.1/libexec/src/internal/abi/type.go:453)
...
0x1000A0BB0   main.fibonacci  (/tmp/gotest/main.go:13)
0x1000A0C20   main.main  (/tmp/gotest/main.go:20)
0x1000A0D20   go:textfipsstart
0x1000A0D30   go:textfipsend

[+] 2030 function(s) shown

Verbose Mode (-v)

Adiciona progresso da varredura de seção, detalhes de resolução de textStart e informações de offset internas:``` $ python3 r2_gopclntab.py -f ./gotest_stripped -v

![sttr](https://raw.githubusercontent.com/abhimanyu003/sttr/master/preview/demo.svg)```
[*] Running radare2 analysis...
[*] Binary format: mach0, endian: little, arch: arm, bits: 64
[*] Scanning binary for gopclntab magic bytes...
[*]   Scanning section '0.__TEXT.__text' (0x100001000, 0x9FD44)...
[*]   Scanning section '1.__TEXT.__symbol_stub1' (0x1000A0D60, 0x2B8)...
[*]   Scanning section '2.__TEXT.__rodata' (0x1000A1020, 0xACC2)...
[*]   Scanning section '3.__TEXT.__gopclntab' (0x1000ABCE8, 0xA48AE)...
[*]   Found magic at vaddr=0x1000ABCE8
[*] Parsed header: PcHeader(magic=0xFFFFFFF1, version=1.20+, ptrSize=8, minLC=4,
    nfunc=2030, nfiles=261, textStart=0x0)
[*] textStart is 0, using .text section vaddr: 0x100001000
[*] Parsed 2030 functions

============================================================
  Go pclntab Header
============================================================
  Magic:           0xFFFFFFF1
  Go version:      1.20+
  ...

Modo de Busca (-n)

Filtra a lista de funções por correspondência de substring. Se uma correspondência exata existir, seu endereço é impresso separadamente.

Baixar ferramenta