Visor de bytecode de Java
Sube un archivo .class o pega bytecode en hexadecimal para ver instrucciones de bytecode de Java, entradas del pool de constantes, marcos de pila y tablas de números de línea. Analiza archivos de clase de la JVM e inspecciona mnemónicos de bytecode de métodos, todo en tu navegador sin subir nada a ningún servidor.
Upload a .class file or paste hex bytecode to view Java bytecode instructions, constant pool entries, stack frames, and line number tables. Parse JVM class files and inspect method bytecode mnemonics, field descriptors, and class metadata — all in your browser with no server uploads.
Upload a .class file or paste hex bytecode to view the class structure, constant pool, and method bytecode instructions. The parser supports the full JVM class file format including constant pool, access flags, fields, methods, bytecode mnemonics, exception tables, line number tables, and stack map frames. Click Load example hex to try it with sample data.
¿Por qué usar nuestro Visor de bytecode de Java?
- Desensamblado instantáneo de bytecode de Java: sube un archivo .class o pega bytecode en hexadecimal para analizar y desensamblar al instante archivos de clase de la JVM. El visor muestra la estructura completa de la clase, incluidos el número mágico, la información de versión, las entradas del pool de constantes, los flags de acceso, los descriptores de campos y las instrucciones de bytecode de métodos con mnemónicos para cada opcode de la JVM. Todo el procesamiento es local e instantáneo.
- Inspección completa del archivo de clase: inspecciona cada aspecto de un archivo de clase Java: el pool de constantes con todos los tipos de entrada (Utf8, Class, Methodref, Fieldref, NameAndType, etc.), las instrucciones de bytecode de métodos con operandos, las tablas de manejadores de excepciones, las tablas de números de línea para el mapeo con el código fuente, los marcos de stack map y el desglose completo de flags de acceso. La herramienta ofrece una vista completa de la estructura del archivo de clase.
- Funciones completas del visor de bytecode: navega entre las pestañas de resumen, pool de constantes, campos y métodos. Cada método muestra su secuencia de instrucciones de bytecode con desplazamiento, opcode, mnemónico, operandos y comentarios. Consulta max stack/locals, tablas de excepciones, tablas de números de línea y marcos de stack map. La pestaña del pool de constantes lista cada entrada con su tipo de etiqueta y sus valores resueltos.
- Visor de bytecode de Java online - sin instalación: usa el visor de bytecode de Java directamente en cualquier navegador moderno, sin descargas, aplicaciones ni plugins. Sube archivos .class, pega bytecode en hexadecimal o carga datos de ejemplo. Todo el análisis de archivos de clase ocurre localmente con JavaScript: sin subidas a servidores, sin fugas de datos y totalmente privado.
Casos de uso comunes del Visor de bytecode de Java
- Análisis de malware y payloads de Java: los analistas de seguridad usan el visor de bytecode para inspeccionar malware, droppers y puertas traseras de Java sin ejecutarlos. Al ver el pool de constantes y el bytecode de los métodos directamente, los analistas pueden extraer URLs de C2, claves de cifrado y cadenas de configuración que podrían estar ofuscadas en el código Java descompilado, pero son visibles como constantes en el archivo de clase.
- Entender código Java ofuscado: cuando la salida descompilada de herramientas como CFR, Procyon o Fernflower produce código confuso, ver el bytecode sin procesar revela las instrucciones reales que ejecuta la JVM. Esto ayuda a los ingenieros inversos a entender qué hacen realmente los métodos ofuscados, especialmente con aplanamiento de flujo de control, predicados opacos y cifrado de cadenas.
- Análisis de elusión de licencias y DRM: los investigadores que analizan implementaciones de licencias y DRM de aplicaciones Java usan el visor de bytecode para inspeccionar los métodos de validación de licencias. El pool de constantes revela formatos de claves de licencia codificados, constantes de algoritmos de validación y huellas de certificados digitales usados en la lógica de licencias.
- Análisis forense de mods y plugins de Minecraft: los analistas de mods de Minecraft usan el visor de bytecode para inspeccionar plugins ofuscados de Forge, Fabric y Bukkit/Spigot. La herramienta ayuda a identificar llamadas a API ocultas, puertas de funciones premium, endpoints de telemetría y credenciales codificadas que pueden ser invisibles en el código descompilado pero claramente visibles en el pool de constantes del bytecode.
- Auditoría y cumplimiento de código Java empresarial: los auditores de seguridad que inspeccionan aplicaciones Java empresariales compiladas usan el visor de bytecode para verificar que las operaciones sensibles usen los permisos correctos, que las operaciones criptográficas empleen los algoritmos esperados y que no se realicen llamadas a API no autorizadas. La vista del bytecode sin procesar proporciona evidencia incontrovertible del código realmente ejecutado.
- Educación y aprendizaje del bytecode de la JVM: los estudiantes de informática y desarrolladores Java que aprenden el conjunto de instrucciones de la JVM usan el visor de bytecode como herramienta educativa. Al compilar código Java sencillo y ver el bytecode resultante, pueden entender cómo las construcciones de alto nivel de Java se traducen en instrucciones de la JVM, operaciones de pila y despacho de métodos.
¿Qué es el bytecode de Java?
El bytecode de Java es la representación intermedia del código fuente Java que se ejecuta en la Máquina Virtual de Java (JVM). Cuando compilas un archivo .java con javac, el compilador produce un archivo .class que contiene instrucciones de bytecode independientes de la plataforma. A diferencia del código fuente, diseñado para la legibilidad humana, el bytecode está diseñado para una ejecución eficiente por la JVM, a la vez que conserva suficiente estructura para características en tiempo de ejecución como la reflexión, la carga dinámica de clases y la recolección de basura.
Un archivo de clase Java tiene un formato binario estricto definido por la Especificación de la JVM. Comienza con el número mágico 0xCAFEBABE, seguido de la información de versión, el pool de constantes (una tabla de todas las constantes usadas en la clase), los flags de acceso, la información de la jerarquía de clases, las definiciones de campos, las definiciones de métodos con bytecode y los atributos de clase.
Cómo funciona nuestro Visor de bytecode de Java
- 1. Sube o pega el bytecode: sube un archivo .class compilado haciendo clic en el botón Subir, o pega la representación hexadecimal de un archivo de clase en el área de texto. La herramienta acepta bytes hexadecimales sin procesar que comiencen con el número mágico CAFEBABE. También puedes hacer clic en «Cargar hex de ejemplo» para analizar un archivo de clase de muestra predefinido y explorar su estructura.
- 2. Análisis del archivo de clase: el analizador basado en JavaScript lee el formato binario del archivo de clase paso a paso: valida el número mágico y la versión, decodifica el pool de constantes (hasta 65535 entradas), analiza los flags de acceso (ACC_PUBLIC, ACC_STATIC, ACC_FINAL, etc.), resuelve la jerarquía de clases, enumera los campos con sus descriptores y procesa cada método, incluido su atributo Code con secuencias de instrucciones de bytecode, tablas de manejadores de excepciones, tablas de números de línea y marcos de stack map. El analizador gestiona todos los más de 17 tipos de entrada del pool de constantes.
- 3. Explora la estructura: usa la navegación por pestañas para alternar entre las vistas Resumen, Pool de constantes, Campos y Métodos. Haz clic en cualquier método para expandirlo y ver su listado completo de instrucciones de bytecode, max stack/locals, manejadores de excepciones, mapeos de números de línea y marcos de stack map. Cada instrucción de bytecode muestra su desplazamiento, valor de opcode, nombre mnemónico, operandos y referencias resueltas al pool de constantes.
Estructura del archivo de clase Java explicada
- Número mágico y versión: todo archivo de clase válido comienza con el número mágico de 4 bytes 0xCAFEBABE. Los siguientes 4 bytes contienen los números de versión menor y mayor, que identifican la versión de Java que compiló esta clase (por ejemplo, major 61 = Java 17, major 52 = Java 8).
- Pool de constantes: una tabla de longitud variable de constantes usadas en todo el archivo de clase. Las entradas incluyen cadenas UTF-8, referencias a clases, referencias a métodos/campos, constantes numéricas, descriptores de nombre-y-tipo y sitios de llamada dinámicos. Cada entrada tiene una etiqueta de 1 byte que identifica su tipo, y las entradas se indexan empezando por 1 (el índice 0 está reservado como nulo).
- Campos y métodos: cada campo y método se define con flags de acceso (public, private, static, final, etc.), un índice de nombre en el pool de constantes, una cadena de descriptor (por ejemplo, (Ljava/lang/String;)V para un método que recibe un String y devuelve void) y atributos. El atributo Code de cada método contiene las instrucciones de bytecode reales, max stack/locals, manejadores de excepciones y atributos de depuración opcionales.
- Instrucciones de bytecode: cada instrucción de la JVM es un opcode de 1 byte seguido de 0 o más bytes de operandos. Las instrucciones van desde operaciones de pila simples (iconst_0, dup) hasta invocaciones de métodos complejas (invokevirtual, invokespecial, invokeinterface, invokedynamic), acceso a campos (getfield, putstatic), flujo de control (ifeq, goto, tableswitch) y operaciones de objetos (new, checkcast, instanceof).
- Marcos de stack map: un atributo de verificación requerido para archivos de clase de Java 7+. Las entradas de StackMapTable describen el estado de tipos de la pila de operandos y las variables locales en desplazamientos de bytecode específicos, lo que permite a la JVM verificar la seguridad de tipos sin un costoso análisis de flujo de datos. Los tipos de marco incluyen same, same_locals_1_stack_item, chop, append y marcos completos.
Privacidad, seguridad y disponibilidad
La herramienta Visor de bytecode de Java es 100 % gratis y sin registro. Todo el análisis de archivos de clase se realiza localmente en tu navegador con JavaScript: tus archivos .class y los datos de bytecode nunca salen de tu dispositivo. No hay límites de uso ni restricciones. La herramienta admite la subida de archivos .class y el pegado de bytecode codificado en hexadecimal, con inspección completa de la estructura del archivo de clase, incluidos el pool de constantes, campos, métodos, mnemónicos de bytecode, tablas de excepciones, tablas de números de línea y marcos de stack map.
Preguntas frecuentes
El visor admite el formato completo de archivo de clase de la JVM (versiones 45.0 a 67+). Analiza el pool de constantes con sus más de 17 tipos de entrada, los flags de acceso, la jerarquía de clases, las interfaces, los campos con descriptores, los métodos con instrucciones de bytecode, las tablas de manejadores de excepciones, las tablas de números de línea y los marcos de stack map.
Sí. Las herramientas de ofuscación cambian los nombres de clases, métodos y campos, pero las instrucciones de bytecode en sí no se pueden ofuscar. Nuestro visor muestra las instrucciones reales que ejecuta la JVM, revelando la lógica incluso cuando los nombres están ofuscados.
El visor admite todas las instrucciones de bytecode estándar de la JVM (opcodes 0x00 a 0xC9) con nombres mnemónicos adecuados y decodificación de operandos. Esto incluye operaciones de pila, aritméticas, de flujo de control, de acceso a campos, de invocación de métodos y de objetos.
Sí. El visor decodifica correctamente las instrucciones invokedynamic y sus entradas asociadas del pool de constantes (entradas InvokeDynamic y MethodHandle). Las expresiones lambda compiladas con javac usan invokedynamic con métodos bootstrap que se referencian en el pool de constantes.
Por supuesto. El Visor de bytecode de Java se ejecuta íntegramente en tu navegador. Tu archivo .class o el bytecode pegado en hexadecimal nunca se sube a ningún servidor. Todo el análisis ocurre localmente en tu dispositivo. Sin llamadas a API, sin analíticas y sin recopilación de datos.
El pool de constantes contiene literales de cadena, nombres de clases, referencias a métodos, referencias a campos, constantes numéricas, descriptores de tipos, method handles para invokedynamic, información de módulos/paquetes para módulos de Java 9+ y pares nombre-y-tipo.
Las aplicaciones Android usan bytecode DEX, no bytecode estándar de la JVM. Nuestro visor solo analiza archivos .class estándar de Java. Sin embargo, si descompilas un archivo DEX a código fuente Java y lo compilas con javac, puedes ver el bytecode resultante con esta herramienta.
Las tablas de números de línea las genera javac cuando las clases se compilan con la opción -g o con la información de depuración predeterminada. Asignan desplazamientos de bytecode a números de línea del archivo fuente. Las compilaciones ofuscadas a menudo eliminan estas tablas.
Sí, 100 % gratis, sin registro, sin cuenta y sin límites de uso. Analiza tantos archivos de clase como necesites, tantas veces como quieras. Sin cargos ocultos, niveles premium ni límites de uso.