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
pbtk — Un conjunto de herramientas para ingeniería inversa y fuzzing de apps basadas en Protobuf | Kitploit
Herramientas/GitHubGitHub/marin-m/pbtk
Seguridad AndroidAnálisis Dinámico (Sandboxing)Generación de PayloadsIngeniería InversaSeguridad WebFuzzingSeguridad MóvilAnálisis de Binarios
GitHubmarin-m/pbtk

pbtk

Un conjunto de herramientas para ingeniería inversa y fuzzing de apps basadas en Protobuf

Ver Repositorio
1.7k20030hace 1 mesRevisado por Kitploit

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
Sitio web

pbtk - Ingeniería inversa de aplicaciones Protobuf

Protobuf es un formato de serialización desarrollado por Google y utilizado en un número creciente de aplicaciones Android, web, de escritorio y más. Consiste en un lenguaje para declarar estructuras de datos, que luego se compila a código u otro tipo de estructura según la implementación de destino.

pbtk (Protobuf toolkit) es un conjunto completo de scripts, accesible a través de una GUI unificada, que ofrece dos funcionalidades principales:

  • Extraer estructuras Protobuf de programas, convirtiéndolas de nuevo a .proto legibles, compatible con varias implementaciones:

    • Todos los runtimes principales de Java (base, Lite, Nano, Micro, J2ME), con soporte completo de Proguard, (2026: esto aún funciona bien pero principalmente con APKs antiguos)
    • Binarios que contienen metadatos de reflexión incrustados (normalmente C++, a veces Java y la mayoría de otros bindings), (2026: esto aún funciona bien)
    • Aplicaciones web que usan el runtime JsProtoUrl. (2026: necesita una actualización)
  • Editar, reproducir y fuzzear datos enviados a endpoints de red Protobuf, a través de una práctica interfaz gráfica que permite editar en vivo los campos de un mensaje Protobuf y ver el resultado.

La GUI del editor pbtk

Instalación

PBTK requiere Python ≥ 3.5, PySide 6, Python-Protobuf 3, y un puñado de programas ejecutables (chromium, jad, dex2jar...) para ejecutar los scripts de extracción.

Los usuarios de Ubuntu pueden instalarlo usando snap:

$ sudo snap install pbtk
$ pbtk

Los usuarios de Archlinux pueden instalarlo directamente a través del paquete:

$ yay -S pbtk-git
$ pbtk

En la mayoría de otras distribuciones, querrás ejecutarlo directamente:

# For Ubuntu/Debian testing derivates:
$ sudo apt install python3-pip git openjdk-8-jre python3-qtpy-pyside6

# Then, using UV:
$ sudo snap install --classic astral-uv
$ uv tool install pbtk
$ pbtk

# Or using pipx:
$ sudo apt install pipx
$ pipx install pbtk
$ pbtk

Windows también es compatible (con los mismos módulos requeridos). Una vez que ejecutes la GUI, te advertirá sobre lo que te falta dependiendo de lo que intentes hacer.

Uso desde línea de comandos (instalando a través del gestor de paquetes)

La GUI se puede lanzar mediante el script principal:

pbtk

Los siguientes scripts también se pueden usar de forma independiente, sin GUI:

pbtk-jar-extract [-h] input_file [output_dir]
pbtk-from-binary [-h] input_file [output_dir]
pbtk-web-extract [-h] input_url [output_dir] # Needs update to work as of 2026

Cuando se instala desde snap, los comandos exactos difieren:

pbtk.jar-extract [-h] input_file [output_dir]
pbtk.from-binary [-h] input_file [output_dir]
pbtk.web-extract [-h] input_url [output_dir]

Uso desde línea de comandos (local)

La GUI se puede lanzar mediante el script principal:

uv sync # Download dependencies to the .venv folder
source .venv/bin/activate # Put the local scripts in $PATH for the current shell session
uv tool install -e . # Put the local scripts in $PATH all time
pbtk

Los siguientes scripts también se pueden usar de forma independiente, sin GUI:

pbtk-jar-extract [-h] input_file [output_dir]
pbtk-from-binary [-h] input_file [output_dir]
pbtk-web-extract [-h] input_url [output_dir] # Needs update to work as of 2026

Flujo de trabajo típico

Supongamos que estás realizando ingeniería inversa de una aplicación Android. Exploraste un poco la aplicación con tu descompilador favorito y descubriste que transporta Protobuf como datos POST sobre HTTPS de forma típica.

Abres PBTK y te recibe de manera significativa:

La pantalla de bienvenida

El primer paso es obtener tus .protos en formato de texto. Si estás analizando una aplicación Android, ¡soltar un APK y esperar debería hacer el trabajo mágico! (a menos que sea una implementación realmente exótica)

Pantalla de finalizado

Hecho esto, te diriges a ~/.pbtk/protos/<nombre de tu APK> (ya sea a través de la línea de comandos o del botón en la parte inferior de la pantalla de bienvenida para abrir tu explorador de archivos, como prefieras). Todos los .protos de la aplicación están aquí.

De vuelta en tu descompilador, te topaste con la clase que construye los datos enviados al endpoint HTTPS que te interesa. Serializa el mensaje Protobuf llamando a una clase hecha de código generado.

Tu descompilador

Esta última clase debería tener una coincidencia perfecta dentro de tu directorio .protos (por ejemplo, com.foo.bar.a.b coincidirá con com/foo/bar/a/b.proto). De cualquier manera, buscar su nombre con grep debería permitirte referenciarla.

Eso es genial: lo siguiente es ir al Paso 2, seleccionar tu .proto de entrada deseado y completar algo de información sobre tu endpoint.

Formulario de creación de endpoint

También puedes proporcionar algunos datos Protobuf sin procesar de muestra, que fueron enviados a este endpoint, capturados a través de mitmproxy o Wireshark, y que pegarás en forma codificada en hexadecimal.

Paso 3 trata sobre la parte divertida de hacer clic en botones y ver qué sucede. Tienes una vista de árbol que representa cada campo en la estructura Protobuf (los campos repetidos tienen el sufijo "+", los campos requeridos no tienen casillas de verificación).

Formulario de creación de endpoint

Simplemente pasa el ratón sobre un campo para enfocarlo. Si el campo es de tipo entero, usa la rueda del ratón para incrementarlo/decrementarlo. La información del enum también aparece al pasar el ratón.

¡Ahí está! Puedes determinar el significado de cada campo con eso. Si extrajiste .protos de código minificado, puedes renombrar los campos según lo que notes que significan, haciendo clic en sus nombres.

¡Feliz ingeniería inversa! 👌 🎉

Almacenamiento de datos local

PBTK almacena la información extraída de .proto en ~/.pbtk/protos/ (o %APPDATA%\pbtk\protos en Windows).

Puedes mover, sacar, renombrar, editar o borrar datos de este directorio directamente a través de tu explorador de archivos y editor de texto habitual, es la forma esperada de hacerlo y no interferirá con PBTK.

Los endpoints basados en HTTP se almacenan en ~/.pbtk/endpoints/ como objetos JSON. Estos objetos son arreglos de pares de información de solicitud/respuesta, que se ven así:

[{
    "request": {
        "transport": "pburl",
        "proto": "www.google.com/VectorTown.proto",
        "url": "https://www.google.com/VectorTown",
        "pb_param": "pb",
        "samples": [{
            "pb": "!....",
            "hl": "fr"
        }]
    },
    "response": {
        "format": "other"
    }
}]

Estructura del código fuente

PBTK utiliza internamente dos tipos de módulos conectables: extractores y transportes.

  • Un extractor permite extraer estructuras .proto de una implementación o plataforma Protobuf de destino.

Los extractores se definen en src/pbtk/extractors/*.py. Se definen como un método precedido por un decorador, como esto:

Descargar herramienta