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
javajive — Descompilador de Java y operador de serialización en Go puro | Kitploit
Herramientas/GitHubGitHub/yaklang/javajive
Análisis EstáticoAnálisis de CódigoIngeniería InversaScripting y AutomatizaciónAnálisis de MalwareUtilidades y FrameworksAnálisis de Binarios
GitHubyaklang/javajive

javajive

Descompilador de Java y operador de serialización en Go puro

Ver Repositorio
1844hace 1 díaAún no revisado
Sitio web

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

JavaJive — Pure-Go Java Toolkit: Decompile, Class Parse, Serialization

JavaJive

CI Pages Go Reference License: MIT

English | 简体中文 | Website

Un kit de herramientas Java portátil y puro en Go — extraído y recortado de yaklang — que hace tres cosas y nada más:

  • Decompilar — .class / .jar / .war / → código fuente Java legible.
Descargar herramienta
.zip
  • Analizar clases — inspeccionar la estructura de un archivo .class (pool de constantes, campos, métodos, versión, flags de acceso).
  • (De)serializar — analizar y volver a serializar el formato de cable de la serialización Java (ObjectStream) con fidelidad de bytes, y convertirlo a/desde JSON.
  • Diseñado para portabilidad e integración:

    • Go puro, binario único — sin JDK, sin cgo, sin runtime de ANTLR, sin bibliotecas nativas. Compilación cruzada para linux / macOS / windows en amd64 y arm64.
    • Una sola importación — un paquete fachada unificado javajive envuelve las tres capacidades; los subpaquetes siguen disponibles para uso avanzado.
    • CLI de primera clase — subcomandos decompile, classinfo y serial, construidos sobre la biblioteca estándar.
    • Probado de forma cruzada contra un JDK real — CI compila .class / .jar reales y blobs serializados por el JDK con javac/java, y luego verifica JavaJive contra ellos (ver HARNESS-WORKFLOW.md).
    • Grafo de dependencias recortado — utils / codec / log / go-funk están reimplementados como un núcleo internal/ mínimo y autocontenido.

    Validación de v0.4.0

    La auditoría diferencial completa de 38 JAR registra cero regresiones contra la línea base fija: los 20 JAR previamente compilables sin errores se conservan y 26 ahora compilan en su totalidad. Los defectos de la línea base y 4 stubs de métodos existentes permanecen visibles. Ver los resultados por JAR y reproducción.

    250 round trips semánticos aislados registran compilación, verificación de la JVM, stubs e igualdad en tiempo de ejecución por separado; las clases de la aplicación original están ausentes de los classpaths reconstruidos. CI ejecuta la auditoría semántica en JDK 17 y 21, la comparación histórica completa, y las matrices de OS/Go y de race. Estas comprobaciones no demuestran la equivalencia de todos los métodos de las bibliotecas. Ver la implementación y límites restantes.

    Benchmarks históricos (v0.3.0)

    Las siguientes cifras se reportaron para v0.3.0 el 2026-09-05. No son resultados de aceptación de la versión actual ni prueba de equivalencia de comportamiento.

    Medido en 34 jars del mundo real (18,759 unidades aplanadas) mediante decompile → recompilación con javac --release 8 → reempaquetado → verificación de la JVM:

    • Tasa de unidades limpias del 100% — 18,759 / 18,759 unidades aplanadas (Outer$Inner.java) recompilan con cero errores de javac, y 0 errores de sintaxis en los 34 jars (una aserción estricta aplicada por CI, de modo que ningún error de tipo puede ocultarse tras un fallo del lexer).
    • Las 34 bibliotecas completan el round-trip — decompile → recompilar → reempaquetar → verificación externa por clase con -Xverify:all de la JVM pasa de extremo a extremo (el codec es idéntico byte a byte al jar original bajo un diferencial de llamadas). Fijado en provenClean.
    • 14 / 14 algoritmos autoalojados (MD5 · SHA-256 · CRC32 · quicksort · Base64 · HeapSort · KMP · SwitchFSM · TryFinally · UnionFind · DiamondTryCatch · DiamondTryFinally · ForContinue · ComputeIfAbsent) hacen round-trip byte a byte.
    • #1 en una comparación justa de 3 vías sobre el conjunto original de 8 jars — tasa de unidades limpias 100% vs Vineflower 1.10.1 (90.8%) y CFR 0.152 (79.8%); ganando los 8 jars frente a ambos.

    Ver BENCHMARK.md para la metodología completa, tablas por jar y comandos de reproducción.

    Instalación

    root@kitploit:~
    # CLI
    go install github.com/yaklang/javajive/cmd/javajive@latest
    
    # Library
    go get github.com/yaklang/javajive@latest
    

    O compilar desde el código fuente:

    root@kitploit:~
    git clone https://github.com/yaklang/javajive
    cd javajive
    go build -o javajive ./cmd/javajive
    

    Requiere Go 1.22+.

    CLI

    root@kitploit:~
    javajive <command> [arguments]
    
    Commands:
      decompile   decompile .class/.jar/.war/.zip or a directory into Java source
      classinfo   print the structure of a .class file (version, fields, methods)
      serial      Java serialization tools (subcommands: tojson, fromjson)
      version     print the version
      help        show help
    

    decompile

    root@kitploit:~
    # Single class: prints to stdout by default, or -o to write a file.
    javajive decompile Foo.class
    javajive decompile Foo.class -o Foo.java
    
    # Archive: defaults to a "<input>.src" directory, or -o to choose one.
    javajive decompile app.jar
    javajive decompile app.war -o ./app-src
    
    # Directory: recursively decompile .class files (requires -o output dir).
    javajive decompile ./classes -o ./src
    

    classinfo

    root@kitploit:~
    javajive classinfo Foo.class
    
    root@kitploit:~
    class:      InvisibleAnnoSeed
    super:      java/lang/Object
    version:    61.0
    access:     public
    constants:  18
    
    fields (0):
    
    methods (2):
       <init>()V
       run()I
    

    serial

    root@kitploit:~
    # Serialized binary -> JSON. (-hex: input is a hex string, -: read from stdin)
    javajive serial tojson dump.bin
    printf 'aced000574000568656c6c6f' | javajive serial tojson -hex -
    
    # JSON -> serialized binary. (default prints hex; with -o writes raw bytes)
    javajive serial fromjson dump.json -o out.bin
    javajive serial fromjson dump.json          # prints hex
    

    Biblioteca

    Usa el paquete fachada unificado — una sola importación cubre las tres capacidades:

    root@kitploit:~
    import "github.com/yaklang/javajive"
    
    // Decompile a single class, or a whole archive into a directory.
    src, err := javajive.Decompile(classBytes)
    err = javajive.DecompileArchive("app.jar", "app-src")
    
    // Inspect class structure.
    obj, err := javajive.ParseClass(classBytes)
    _ = obj.GetClassName()
    
    // Java serialization: binary -> JSON -> binary.
    objs, _ := javajive.ParseSerialized(raw)          // or ParseSerializedHex(hexStr)
    jsonBytes, _ := javajive.SerializedToJSON(objs...)
    restored, _ := javajive.SerializedFromJSON(jsonBytes)
    out := javajive.MarshalSerialized(restored...)
    

    API unificada

    FunciónPropósito
    Decompile(classBytes) (string, error)Descompila los bytes de un .class
    DecompileFile(path) (string, error)Descompila un .class desde disco
    DecompileWithResolver(classBytes, resolve)Descompila con un resolvedor de bytes de clase
    DecompileArchive(src, dst) errorDescompila un .jar/.war/.zip en un directorio
    ParseClass(classBytes) (*ClassObject, error)Analiza los bytes de un .class
    ParseClassFile(path) (*ClassObject, error)Analiza un .class desde disco
    ParseSerialized(raw) ([]JavaSerializable, error)Analiza un flujo de serialización
    ParseSerializedHex(hexStr) ([]JavaSerializable, error)Analiza un flujo codificado en hex
    MarshalSerialized(objs...) []byteVuelve a codificar objetos al formato de cable
    MarshalSerializedHex(objs...) stringVuelve a codificar a hex
    SerializedToJSON(objs...) ([]byte, error)Convierte objetos a JSON
    SerializedFromJSON(raw) ([]JavaSerializable, error)Reconstruye objetos desde JSON

    Los subpaquetes también se exportan para uso avanzado: classparser, classparser/jarwar, serialization.

    Diferencias con el yaklang original

    Para mantenerse portátil y pequeño, JavaJive hace algunas concesiones deliberadas frente a yaklang. Ver MIGRATE.md para el mapeo completo y la guía de migración.

    Áreayaklang (original)JavaJive
    Red de seguridad ANTLR del decompiladorrevalida el código fuente volcado mediante una gramática Java de ANTLR; degrada miembros a stubs en caso de falloeliminada (dependencia pesada); la validación es un no-op, la salida se emite directamente
    Capa de soporte (utils / codec / log / go-funk)paquetes compartidos del monoreporeimplementaciones mínimas y autocontenidas bajo internal/
    Generador de gadgets ysoincluidono incluido
    Recuperación de charset de literales de cadena (MatchMIMEType)recuperación opcional de GBK/GB18030stub (no-op); comportamiento sin cambios para la gran mayoría de los casos

    Las dependencias de terceros se limitan a un pequeño conjunto de bibliotecas puras en Go (gobwas/glob, go-viper/mapstructure, samber/lo, tidwall/gjson, segmentio/ksuid, yeka/zip, y algunas golang.org/x/*).

    Pruebas

    root@kitploit:~
    go test ./...                 # unit tests + JDK cross-tests (skipped if no JDK)
    go test ./... -race           # data-race free (linux)
    go test ./test/cross/ -v      # Java cross-tests only (needs javac/java on PATH)
    

    Las pruebas cruzadas con JDK compilan artefactos Java reales en tiempo de prueba y los verifican contra JavaJive; hacen t.Skip automáticamente cuando no hay un JDK presente. Ver HARNESS-WORKFLOW.md para saber cómo funcionan el harness y CI.

    Estructura del proyecto

    root@kitploit:~
    javajive.go      unified facade package (import "github.com/yaklang/javajive")
    serialization/   Java serialization/deserialization (from yaklang common/yserx)
    classparser/     class parser + decompiler (from yaklang common/javaclassparser)
    cmd/javajive/    CLI entry point
    internal/        trimmed self-contained support layer (log / codec / funk / utils / filesys / ...)
    test/cross/      JDK-backed cross-tests (javac/java)
    site/            static landing page deployed to GitHub Pages
    

    Licencia

    MIT © 2026 VillanCh. JavaJive deriva de yaklang.