¡NUEVO!

Decompilador Java

Decompila archivos .class de Java a código fuente legible directamente en tu navegador. Visualiza estructura de clases, campos, métodos y bytecode.

100% Privado y Seguro

Todo el procesamiento ocurre localmente en tu navegador. Tus archivos nunca salen de tu dispositivo.

Procesamiento Local Sin Subidas al Servidor Sin Registro

Arrastra un archivo .class aquí o haz clic para subir

o
Prueba un ejemplo:
Código Fuente Decompilado
 

Palabras clave

decompilador javavisor de archivos classdesensamblador bytecodedecompilar javaanalizador classbytecode jvm

¿Necesitas algo más?

Cómo usar

1

Arrastra un archivo .class al área de carga o pega bytecode en formato hexadecimal.

2

El decompilador analiza el archivo class y reconstruye el código fuente Java automáticamente.

3

Activa 'Mostrar bytecode' para ver el desensamblado de instrucciones JVM dentro de los métodos.

4

Copia el código fuente decompilado o descárgalo como archivo .java.

Características

Analizador de Archivos Class

Lee el formato de archivos class de Java incluyendo el pool de constantes, campos, métodos, atributos y tablas de excepciones.

Desensamblado de Bytecode

Desensambla instrucciones de bytecode JVM con resolución simbólica de operandos desde el pool de constantes.

Reconstrucción de Código Fuente

Genera código Java legible con declaraciones de paquete, jerarquía de clases, tipos de campos y firmas de métodos.

100% en el Navegador

Toda la decompilación se ejecuta localmente en tu navegador. Tus archivos class y código propietario nunca abandonan tu dispositivo.

¿Por qué elegir esta herramienta?

Tu Código Nunca Sale de tu Dispositivo

A diferencia de los decompiladores basados en servidor que suben tus archivos class para procesarlos, esta herramienta se ejecuta completamente en tu navegador mediante JavaScript. El bytecode propietario, las bibliotecas internas y el código sensible de aplicaciones permanecen en tu máquina. Ningún dato se transmite, registra o almacena en ningún servidor — ideal para entornos corporativos con políticas estrictas de manejo de datos.

Decompilación Instantánea sin Configuración

Sin instalación de JDK, sin plugins de IDE, sin herramientas de línea de comandos. Arrastra un archivo .class y obtén código fuente decompilado en milisegundos. La herramienta funciona en cualquier dispositivo con un navegador moderno — escritorio, portátil o tablet — perfecta para inspecciones rápidas cuando no tienes un entorno de desarrollo completo disponible.

Visibilidad Completa del Bytecode

Activa el modo bytecode para ver las instrucciones JVM reales junto al código fuente reconstruido. Cada opcode está anotado con referencias al pool de constantes resueltas a nombres de clase, firmas de métodos y valores literales legibles. Este nivel de detalle es invaluable para análisis de rendimiento, auditoría de seguridad y comprensión de cómo el compilador traduce las construcciones Java.

Soporta Java 1.1 hasta Java 24

El analizador maneja archivos class de todas las versiones principales de Java, leyendo correctamente las entradas del pool de constantes incluyendo MethodHandle, InvokeDynamic, Module y Package introducidos en versiones recientes. Ya sea que estés analizando un archivo J2EE antiguo o un microservicio Spring Boot moderno, la herramienta lo maneja.

Bytecode Java y el Formato de Archivos Class: Guía Completa

Cada programa Java se compila mediante javac en uno o más archivos .class que contienen bytecode — una representación intermedia independiente de la plataforma que la Máquina Virtual Java (JVM) interpreta o compila JIT en tiempo de ejecución. La decompilación invierte este proceso, transformando el bytecode en código fuente Java legible. Comprender cómo funciona esto es esencial para auditores de seguridad, mantenedores de bibliotecas y desarrolladores que depuran dependencias opacas de terceros.

Anatomía de un Archivo .class

Un archivo class comienza con el número mágico 0xCAFEBABE, seguido de números de versión menor y mayor que identifican la versión de Java utilizada para compilarlo. A continuación viene el pool de constantes — una tabla de cadenas, nombres de clases, firmas de métodos, literales numéricos y referencias a métodos bootstrap que todas las demás estructuras del archivo indexan. El pool de constantes es la estructura más importante para la decompilación porque proporciona los nombres simbólicos que hacen legible el bytecode.

Después del pool de constantes, el archivo declara los flags de acceso de la clase (public, final, abstract, interface, enum), los nombres de clase y superclase, e interfaces implementadas. Luego vienen las tablas de campos y métodos, cada entrada conteniendo flags de acceso, un nombre, un descriptor de tipo y una lista de atributos. El atributo más importante es Code, que contiene las instrucciones de bytecode reales de un método.

Cómo Funcionan las Instrucciones de Bytecode

El bytecode JVM opera sobre una máquina de pila. En lugar de registros, los operandos se empujan y sacan de una pila de operandos. Instrucciones como iload_1 empujan una variable local a la pila; iadd saca dos enteros, los suma y empuja el resultado. Las invocaciones de métodos (invokevirtual, invokestatic, invokeinterface, invokedynamic) sacan argumentos de la pila, llaman al método destino y empujan el valor de retorno.

Las instrucciones de salto (ifeq, goto, tableswitch) controlan el flujo saltando a diferentes offsets de bytecode. Un decompilador reconstruye estructuras de control de alto nivel (if/else, for, while, switch) analizando estos patrones de salto — un proceso llamado análisis de flujo de control.

Por Qué la Decompilación es Posible

El bytecode Java retiene mucha más metadata que el código máquina nativo. Los nombres de clases, métodos, campos y descriptores de tipo se almacenan en el pool de constantes como cadenas de texto. Cuando se compila con información de depuración (javac -g), los nombres de variables locales y tablas de números de línea también se preservan. Esta rica metadata hace relativamente sencillo reconstruir la estructura del código fuente original.

Casos de Uso Prácticos

  • Auditoría de seguridad: Inspeccionar JARs de terceros en busca de vulnerabilidades conocidas, credenciales hardcodeadas o llamadas de red inesperadas sin necesitar el código fuente.
  • Depuración de dependencias: Cuando una biblioteca lanza una excepción inesperada, decompilar la clase relevante frecuentemente revela la causa raíz más rápido que leer la documentación.
  • Recuperación de código legacy: Recuperar código fuente de artefactos compilados cuando el repositorio original se ha perdido o corrompido.
  • Aprendizaje: Estudiar cómo javac traduce expresiones lambda, genéricos, try-with-resources y pattern matching a bytecode.

Limitaciones de la Decompilación

Los comentarios nunca se almacenan en el bytecode y no pueden recuperarse. El formato, los espacios en blanco y el orden de los imports se pierden. Los nombres de variables solo están disponibles cuando hay información de depuración presente. Las herramientas de ofuscación (ProGuard, R8) renombran clases y métodos a identificadores sin significado, integran código en línea y reestructuran el flujo de control, haciendo la salida decompilada más difícil de leer — aunque la lógica permanece funcionalmente equivalente.

El Pool de Constantes y su Importancia

El pool de constantes es la estructura más crítica para la decompilación. Contiene todas las referencias simbólicas del archivo class: nombres de clases, descriptores de métodos, cadenas literales, valores numéricos y referencias a métodos bootstrap para invokedynamic. Cada instrucción de bytecode que accede a un campo, invoca un método o carga una constante referencia una entrada del pool de constantes por su índice. Al resolver estas referencias, el decompilador puede reconstruir nombres legibles de clases, tipos de parámetros y valores de retorno, transformando instrucciones opacas como invokevirtual #42 en llamadas comprensibles como System.out.println().

Preguntas Frecuentes

¿Se suben mis archivos class a un servidor?

No. Toda la decompilación se ejecuta 100% en tu navegador usando JavaScript. Tus archivos .class nunca abandonan tu dispositivo. Ningún dato se transmite, registra o almacena en ningún servidor.

¿Qué versiones de Java soporta esta herramienta?

La herramienta soporta archivos class desde Java 1.1 (versión mayor 45) hasta Java 24 (versión mayor 68), cubriendo todos los tipos de tags del pool de constantes incluyendo MethodHandle, InvokeDynamic, Dynamic, Module y Package.

¿Recupera los nombres originales de las variables?

Los nombres de variables solo están disponibles si la clase fue compilada con información de depuración (javac -g). Sin información de depuración, la herramienta genera nombres placeholder como arg0, arg1. Los nombres de métodos y campos siempre se preservan en el pool de constantes.

¿Puede decompilar código ofuscado?

Sí, la herramienta puede analizar y decompilar archivos class ofuscados. Sin embargo, la salida contendrá identificadores ofuscados (ej. a.b.c en lugar de nombres significativos). La lógica del bytecode siempre es completamente recuperable independientemente de la ofuscación.

¿Cuál es la diferencia entre decompilación y desensamblado?

El desensamblado convierte bytecode en instrucciones JVM legibles (como javap -c). La decompilación va más allá, reconstruyendo código fuente Java de alto nivel con declaraciones de clases, firmas de métodos e información de tipos. Esta herramienta proporciona ambas funciones — activa 'Mostrar bytecode' para ver el desensamblado.

¿Puedo decompilar archivos JAR?

Esta herramienta procesa archivos .class individuales. Para decompilar un JAR, primero extráelo (un JAR es un archivo ZIP), luego sube archivos .class individuales. Cada archivo .class corresponde a una clase Java.

¿Qué tan precisa es la salida decompilada?

La herramienta reconstruye con precisión la estructura de clases, declaraciones de campos, firmas de métodos y manejadores de excepciones. Muestra desensamblado de bytecode con referencias al pool de constantes resueltas. Para decompilación completa a nivel de código fuente con flujo de control reconstruido, considera complementar con herramientas offline como CFR o Procyon.

¿Funciona sin conexión?

Sí. Una vez que la página está cargada, el decompilador funciona completamente sin conexión a internet.

¿Qué formatos de archivo soporta?

La herramienta acepta archivos .class de Java (formato binario que comienza con 0xCAFEBABE) y bytecode codificado en hexadecimal pegado directamente en el área de texto. No acepta archivos .java de código fuente ni archivos .jar directamente.

¿Es legal decompilar código Java?

La decompilación para interoperabilidad, investigación de seguridad y aprendizaje personal es generalmente legal en la mayoría de jurisdicciones. La Directiva de Software de la UE y la doctrina de uso justo de EE.UU. proporcionan protecciones. Sin embargo, siempre verifica las leyes locales y cualquier acuerdo de licencia que pueda restringir la ingeniería inversa de software específico.

Saber más