Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
r2gopclntabParser — Un script de radare2 para analizar la gopclntab con el fin de facilitar la ingeniería inversa de binarios Go. | Kitploit
Herramientas/GitHubGitHub/asherdll/r2gopclntabparser
Análisis EstáticoIngeniería InversaDepuradoresAnálisis ForenseAnálisis de MalwareAnálisis de Binarios
GitHubasherdll/r2gopclntabparser

r2gopclntabParser

Un script de radare2 para analizar la gopclntab con el fin de facilitar la ingeniería inversa de binarios Go.

Ver Repositorio
1721hace 5 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

r2gopclntabParser

Nota: Esta funcionalidad ha sido implementada directamente en el núcleo de radare2 como plugin de análisis gopc

Un analizador de gopclntab para Go basado en radare2 que recupera símbolos de funciones de binarios Go, incluyendo aquellos completamente despojados. Soporta binarios ELF, Mach-O y PE en versiones de Go 1.2, 1.16, 1.18 y 1.20+.

Cada binario Go 1.2+ incorpora una región de datos llamada gopclntab (Program Counter Line Table) que el runtime de Go utiliza para trazas de pila, mensajes de pánico, recolección de basura y soporte al depurador. Es una de las fuentes más valiosas de información de símbolos en binarios Go.

r2gopclntabParser lee esta región a través de radare2, analiza las estructuras específicas de la versión, y ya sea imprime la lista de funciones recuperada (con direcciones, archivos fuente y números de línea) o aplica los nombres recuperados de vuelta a la sesión abierta de radare2 como definiciones de función, flags y comentarios.


Índice de contenido

  • Prerrequisitos
  • Inicio rápido
  • Referencia de CLI
  • Modos de salida y ejemplos
    • Modo predeterminado (Encabezado + Lista de funciones)
    • Modo detallado (-v)
    • Modo búsqueda (-n)
    • Salida JSON (--json)
    • Listado de archivos fuente (--files)
    • Modo aplicar (--apply)
  • Resumen de resultados: Mach-O (Binario de prueba despojado)
  • Prueba PE: Greenblood, un binario ransomware en Go
  • Casos de uso para ingeniería inversa
  • Plataformas y versiones de Go soportadas
  • Metodología
    • Estrategia de localización de secciones
    • textStart vs sección .text
    • Análisis de estructuras según la versión
    • Decodificación de datos PC
  • Limitaciones
  • Documentación adicional
  • Referencias

Prerrequisitos

DependenciaVersión mínima
Python 33.8+
radare25.0+ (probado en 6.0.9)
r2pipecualquiera

No se requieren otros paquetes de Python. El script usa solo la biblioteca estándar (struct, json, argparse, os, sys) más r2pipe.


Inicio 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

---

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

Obligatorio (uno de los dos)

IndicadorDescripción
-f ARCHIVO, --file ARCHIVORuta al binario Go a analizar. El script lanza su propia instancia de r2.
--r2pipeConectarse a una sesión de r2 ya en ejecución (para usar dentro de la consola de r2).

Opcional

IndicadorDescripción
-l, --listImprime cada función recuperada con su dirección.
-n NOMBRE, --funcname NOMBREImprime solo las funciones cuyo nombre contenga NOMBRE (coincidencia de subcadena). Si existe una coincidencia exacta, su dirección se imprime por separado.
-v, --verboseImprime mensajes de progreso, campos de cabecera analizados y desplazamientos internos.
--applyEscribe los nombres de funciones recuperados en la sesión de radare2 como definiciones de función (af+), banderas en el espacio de banderas go. y comentarios con el nombre Go original y la ubicación del código fuente.
--jsonGenera la cabecera y la lista completa de funciones como JSON a stdout.
--filesImprime la lista de rutas de archivos fuente extraídas de la tabla de archivos.
-h, --helpMuestra el mensaje de ayuda.

Los indicadores pueden combinarse libremente. Cuando no se proporciona ningún indicador de salida, el comportamiento predeterminado es imprimir la cabecera y la lista completa de funciones.


Modos de salida y ejemplos

Todos los ejemplos a continuación se ejecutaron contra un binario Go 1.26 Mach-O arm64 sin símbolos (compilado con -ldflags="-s -w"). El programa de prueba define main.main, main.fibonacci, main.helloWorld y main.addNumbers. El compilador insertó internamente helloWorld y addNumbers, por lo que no aparecen en gopclntab.

Modo predeterminado (cabecera + lista de funciones)

Ejecutar sin indicadores (o solo con -f) imprime la cabecera analizada seguida de la tabla completa de funciones:``` $ python3 r2_gopclntab.py -f ./gotest_stripped

(no content provided)```
============================================================
  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

Modo Verbose (-v)

Descargar herramienta