Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
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
readable-thrift — Human-friendly Thrift encoder/decoder | Kitploit
Herramientas/GitHubGitHub/nccgroup/readable-thrift
Web Proxies & InterceptionReverse EngineeringWeb Application ExploitationPenetration TestingUtilities & Frameworks
GitHubnccgroup/readable-thrift

readable-thrift

Human-friendly Thrift encoder/decoder

Ver Repositorio
2410hace 4 añosRevisado 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

Readable Thrift

Readable Thrift facilita el trabajo con mensajes binarios del protocolo Thrift, convirtiéndolos a y desde un formato legible para humanos. Esto hace que el análisis manual y la manipulación de mensajes Thrift en formato binario sean tan sencillos como trabajar con protocolos de texto plano como HTTP.

La librería está implementada en Java, lo que permite su integración con extensiones para populares herramientas de pruebas de aplicaciones web que se ejecutan en la JVM, como Burp y ZAP. Todo lo que hay que hacer para poner en marcha una herramienta de análisis o manipulación es extraer los bytes apropiados y pasarlos al códec.

Uso de la librería

La librería readablethrift es un paquete Maven basado en Gradle que puede instalarse e incluirse como dependencia en otros proyectos. Expone cuatro métodos sencillos para codificar y decodificar, ya sea en forma binaria cruda o codificada en Base64.

Nota: Actualmente solo se admite el formato estándar de protocolo binario. El binario compacto y JSON (diferente del JSON legible producido por el códec) aún no son compatibles.

Decodificación de mensajes - Thrift binario a JSON

  • El método ThriftCodec::decode crea una instancia descriptiva de org.json.JSONObject directamente a partir de un buffer de bytes crudos que contiene un mensaje Thrift binario.
  • El método estático ThriftCodec::decodeB64String decodifica una cadena Base64 y luego llama a decode sobre ella.

Codificación de mensajes - JSON a Thrift binario

  • El método ThriftCodec::encode convierte una instancia descriptiva de org.json.JSONObject a un buffer de bytes crudos que contiene el mensaje Thrift binario equivalente.
  • El método estático ThriftCodec::b64encodeJson convierte un objeto JSON al formato binario Thrift y codifica el resultado en Base64.

Extensibilidad

La clase ThriftCodec está diseñada para ser extensible, de modo que pueda manejar modificaciones o extensiones del formato de protocolo binario Thrift, como cabeceras adicionales del formato binario o encapsulamiento.

Uso desde línea de comandos

Para usar la interfaz interactiva de línea de comandos incluida en la librería, utilice la tarea Gradle predeterminada para compilar un JAR y luego ejecútelo con java -jar:

root@kitploit:~
$ ./gradlew

BUILD SUCCESSFUL in 1s
2 actionable tasks: 2 executed
$ java -jar build/libs/readablethrift-1.0.0-all.jar 
Enter Base64 encoded message or JSON object (or q to quit): 

Demostración

Para demostrar cómo se verá el JSON legible para humanos, tomemos un blob binario codificado en Base64 de ejemplo extraído de algún tráfico de aplicación:

root@kitploit:~
$ base64 -D | hexdump
gAEAAQAAAAVsb2dpbgAAAAAMAAALAAAAAAAIY29vbHVzZXILAAEAAAALcGFzc3dvcmQxMjMAAA==
00000000: 8001 0001 0000 0005 6c6f 6769 6e00 0000  ........login...
00000010: 000c 0000 0b00 0000 0000 0863 6f6f 6c75  ...........coolu
00000020: 7365 720b 0001 0000 000b 7061 7373 776f  ser.......passwo
00000030: 7264 3132 3300 00                        rd123..

Las cadenas "login", nombre de usuario y contraseña sugieren que se trata de una solicitud de autenticación. Si alguien quisiera manipular este mensaje sobre la marcha, tendría que buscar los detalles internos del analizador del formato binario del protocolo Thrift, averiguar la estructura del mensaje con un editor hexadecimal y luego actualizar manualmente cada campo. En el caso de las cadenas de nombre de usuario y contraseña, también sería necesario actualizar los valores de longitud prefijados además de las cadenas en sí. Este sería un proceso tedioso, propenso a errores y que consume mucho tiempo. Readable Thrift simplifica este proceso; aquí está el mismo mensaje cuando se le pasa a la herramienta:

root@kitploit:~
Enter Base64 encoded message or JSON object (or q to quit): gAEAAQAAAAVsb2dpbgAAAAAMAAALAAAAAAAIY29vbHVzZXILAAEAAAALcGFzc3dvcmQxMjMAAA==
root@kitploit:~
{"message": {
    "name": "login",
    "type": "call",
    "fields": [{
        "id": 0,
        "type": "struct",
        "value": [
            {
                "id": 0,
                "type": "string",
                "value": "cooluser"
            },
            {
                "id": 1,
                "type": "string",
                "value": "password123"
            }
        ]
    }],
    "seqid": 0
}}

Ahora podemos verificar fácilmente que el mensaje describe una llamada al método "login", con una estructura que contiene dos valores de cadena como argumento. Actualizar los valores de las cadenas es tan simple como editar los campos value del JSON y pasar el nuevo texto JSON de vuelta al códec. Todos los prefijos de longitud y demás detalles del formato binario se manejarán automáticamente.

También es posible añadir nuevos campos para probar posibles parámetros opcionales. ¿Quizás hay un indicador booleano de administrador o depuración? ¿O una lista de IDs de permisos? Describa un nuevo campo con un id, type y value, y luego agréguelo al array fields:

root@kitploit:~
Enter Base64 encoded message or JSON object (or q to quit): {"message": {
    "name": "login",
    "type": "call",
    "fields": [{
        "id": 0,
        "type": "struct",
        "value": [
            {
                "id": 0,
                "type": "string",
                "value": "differentuser"
            },
            {
                "id": 1,
                "type": "string",
                "value": "differentpassword!"
            }
        ]
    },
    {"id": 1, "type": "bool", "value": true},
    {"id": 2, "type": "list", "value":
        {
            "elemType": "i32",
            "list": [1, 2, 3]
        }
    },
    {"id": 3, "type": "map", "value":
        {
            "keyType": "string",
            "valueType": "string",
            "map": {
                "dog": "bark",
                "cat": "meow"
            }
        }
    }],
    "seqid": 0
}}
root@kitploit:~
gAEAAQAAAAVsb2dpbgAAAAAMAAALAAAAAAANZGlmZmVyZW50dXNlcgsAAQAAABJkaWZmZXJlbnRwYXNzd29yZCEAAgABAQ8AAggAAAADAAAAAQAAAAIAAAADDQADCwsAAAACAAAAA2NhdAAAAARtZW93AAAAA2RvZwAAAARiYXJrAA==

A continuación se muestra el mensaje actualizado convertido de vuelta al protocolo binario Thrift:

root@kitploit:~
$ base64 -D | hexdump
gAEAAQAAAAVsb2dpbgAAAAAMAAALAAAAAAANZGlmZmVyZW50dXNlcgsAAQAAABJkaWZmZXJlbnRwYXNzd29yZCEAAgABAQ8AAggAAAADAAAAAQAAAAIAAAADDQADCwsAAAACAAAAA2NhdAAAAARtZW93AAAAA2RvZwAAAARiYXJrAA==
00000000: 8001 0001 0000 0005 6c6f 6769 6e00 0000  ........login...
00000010: 000c 0000 0b00 0000 0000 0d64 6966 6665  ...........diffe
00000020: 7265 6e74 7573 6572 0b00 0100 0000 1264  rentuser.......d
00000030: 6966 6665 7265 6e74 7061 7373 776f 7264  ifferentpassword
00000040: 2100 0200 0101 0f00 0208 0000 0003 0000  !...............
00000050: 0001 0000 0002 0000 0003 0d00 030b 0b00  ................
00000060: 0000 0200 0000 0363 6174 0000 0004 6d65  .......cat....me
00000070: 6f77 0000 0003 646f 6700 0000 0462 6172  ow....dog....bar
00000080: 6b00
Descargar herramienta