Pular para o conteúdo
Aback Tools Logo

Visualizador de bytecode Java

Envie um arquivo .class ou cole bytecode em hexadecimal para ver instruções de bytecode Java, entradas do pool de constantes, frames de pilha e tabelas de números de linha. Analise arquivos de classe da JVM e inspecione mnemônicos de bytecode de métodos - tudo no seu navegador sem envios a servidores.

Java Bytecode Viewer

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 que usar nosso Visualizador de bytecode Java?

  • Desmontagem instantânea de bytecode Java: envie um arquivo .class ou cole bytecode em hexadecimal para analisar e desmontar instantaneamente arquivos de classe da JVM. O visualizador mostra a estrutura completa da classe, incluindo número mágico, informações de versão, entradas do pool de constantes, flags de acesso, descritores de campos e instruções de bytecode de métodos com mnemônicos para cada opcode da JVM. Todo o processamento é local e instantâneo.
  • Inspeção completa do arquivo de classe: inspecione cada aspecto de um arquivo de classe Java: o pool de constantes com todos os tipos de entrada (Utf8, Class, Methodref, Fieldref, NameAndType, etc.), instruções de bytecode de métodos com operandos, tabelas de manipuladores de exceções, tabelas de números de linha para mapeamento com o código-fonte, frames de stack map e o detalhamento completo das flags de acesso. A ferramenta oferece uma visão abrangente da estrutura do arquivo de classe.
  • Recursos completos do visualizador de bytecode: navegue entre as abas Visão geral, Pool de constantes, Campos e Métodos. Cada método mostra sua sequência de instruções de bytecode com deslocamento, opcode, mnemônico, operandos e comentários. Veja max stack/locals, tabelas de exceções, tabelas de números de linha e frames de stack map. A aba do pool de constantes lista cada entrada com seu tipo de etiqueta e valores resolvidos.
  • Visualizador de bytecode Java online - sem instalação: use o visualizador de bytecode Java diretamente em qualquer navegador moderno, sem downloads, aplicativos ou plugins. Envie arquivos .class, cole bytecode em hexadecimal ou carregue dados de exemplo. Toda a análise de arquivos de classe acontece localmente com JavaScript - sem envios a servidores, sem vazamentos de dados, totalmente privado.

Casos de uso comuns do Visualizador de bytecode Java

  • Análise de malware e payloads Java: analistas de segurança usam o visualizador de bytecode para inspecionar malware, droppers e backdoors Java sem executá-los. Ao ver o pool de constantes e o bytecode dos métodos diretamente, os analistas podem extrair URLs de C2, chaves de criptografia e strings de configuração que podem estar ofuscadas no código Java descompilado, mas são visíveis como constantes no arquivo de classe.
  • Entender código Java ofuscado: quando a saída descompilada de ferramentas como CFR, Procyon ou Fernflower produz código confuso, ver o bytecode bruto revela as instruções reais que a JVM executa. Isso ajuda engenheiros reversos a entender o que os métodos ofuscados realmente fazem, especialmente com achatamento de fluxo de controle, predicados opacos e criptografia de strings.
  • Análise de contorno de licenças e DRM: pesquisadores que analisam implementações de licenciamento e DRM de aplicativos Java usam o visualizador de bytecode para inspecionar métodos de validação de licença. O pool de constantes revela formatos de chaves de licença codificados, constantes de algoritmos de validação e impressões digitais de certificados digitais usados na lógica de licenciamento.
  • Análise forense de mods e plugins do Minecraft: analistas de mods do Minecraft usam o visualizador de bytecode para inspecionar plugins ofuscados de Forge, Fabric e Bukkit/Spigot. A ferramenta ajuda a identificar chamadas de API ocultas, bloqueios de recursos premium, endpoints de telemetria e credenciais codificadas que podem ser invisíveis no código descompilado, mas claramente visíveis no pool de constantes do bytecode.
  • Auditoria e conformidade de código Java corporativo: auditores de segurança que inspecionam aplicativos Java corporativos compilados usam o visualizador de bytecode para verificar se operações sensíveis usam as permissões corretas, se operações criptográficas empregam os algoritmos esperados e se nenhuma chamada de API não autorizada é feita. A visualização do bytecode bruto fornece evidência incontestável do código realmente executado.
  • Educação e aprendizado do bytecode da JVM: estudantes de ciência da computação e desenvolvedores Java que aprendem o conjunto de instruções da JVM usam o visualizador de bytecode como ferramenta educacional. Ao compilar código Java simples e ver o bytecode resultante, eles podem entender como construções Java de alto nível se traduzem em instruções da JVM, operações de pilha e despacho de métodos.

O que é bytecode Java?

Bytecode Java é a representação intermediária do código-fonte Java que roda na Máquina Virtual Java (JVM). Quando você compila um arquivo .java com javac, o compilador produz um arquivo .class contendo instruções de bytecode independentes de plataforma. Diferentemente do código-fonte, projetado para legibilidade humana, o bytecode é projetado para execução eficiente pela JVM, mantendo estrutura suficiente para recursos de runtime como reflexão, carregamento dinâmico de classes e coleta de lixo.

Um arquivo de classe Java tem um formato binário estrito definido pela Especificação da JVM. Ele começa com o número mágico 0xCAFEBABE, seguido de informações de versão, o pool de constantes (uma tabela de todas as constantes usadas na classe), flags de acesso, informações da hierarquia de classes, definições de campos, definições de métodos com bytecode e atributos de classe.

Como funciona nosso Visualizador de bytecode Java

  1. 1. Envie ou cole o bytecode: envie um arquivo .class compilado clicando no botão Enviar, ou cole a representação hexadecimal de um arquivo de classe na área de texto. A ferramenta aceita bytes hexadecimais brutos começando com o número mágico CAFEBABE. Você também pode clicar em «Carregar hex de exemplo» para analisar um arquivo de classe de exemplo pré-construído e explorar sua estrutura.
  2. 2. Análise do arquivo de classe: o analisador baseado em JavaScript lê o formato binário do arquivo de classe passo a passo: valida o número mágico e a versão, decodifica o pool de constantes (até 65535 entradas), analisa as flags de acesso (ACC_PUBLIC, ACC_STATIC, ACC_FINAL, etc.), resolve a hierarquia de classes, enumera os campos com seus descritores e processa cada método, incluindo seu atributo Code com sequências de instruções de bytecode, tabelas de manipuladores de exceções, tabelas de números de linha e frames de stack map. O analisador lida com todos os 17+ tipos de entrada do pool de constantes.
  3. 3. Explore a estrutura: use a navegação por abas para alternar entre as visualizações Visão geral, Pool de constantes, Campos e Métodos. Clique em qualquer método para expandi-lo e ver sua listagem completa de instruções de bytecode, max stack/locals, manipuladores de exceções, mapeamentos de números de linha e frames de stack map. Cada instrução de bytecode mostra seu deslocamento, valor de opcode, nome mnemônico, operandos e referências resolvidas do pool de constantes.

Estrutura do arquivo de classe Java explicada

  • Número mágico e versão: todo arquivo de classe válido começa com o número mágico de 4 bytes 0xCAFEBABE. Os próximos 4 bytes contêm os números de versão menor e maior, que identificam a versão do Java que compilou esta classe (por exemplo, major 61 = Java 17, major 52 = Java 8).
  • Pool de constantes: uma tabela de comprimento variável de constantes usadas em todo o arquivo de classe. As entradas incluem strings UTF-8, referências de classe, referências de método/campo, constantes numéricas, descritores nome-e-tipo e pontos de chamada dinâmicos. Cada entrada tem uma etiqueta de 1 byte que identifica seu tipo, e as entradas são indexadas a partir de 1 (o índice 0 é reservado como nulo).
  • Campos e métodos: cada campo e método é definido com flags de acesso (public, private, static, final, etc.), um índice de nome no pool de constantes, uma string de descritor (por exemplo, (Ljava/lang/String;)V para um método que recebe uma String e retorna void) e atributos. O atributo Code de cada método contém as instruções de bytecode reais, max stack/locals, manipuladores de exceções e atributos de depuração opcionais.
  • Instruções de bytecode: cada instrução da JVM é um opcode de 1 byte seguido de 0 ou mais bytes de operandos. As instruções vão desde operações de pilha simples (iconst_0, dup) até invocações de métodos complexas (invokevirtual, invokespecial, invokeinterface, invokedynamic), acesso a campos (getfield, putstatic), fluxo de controle (ifeq, goto, tableswitch) e operações de objetos (new, checkcast, instanceof).
  • Frames de stack map: um atributo de verificação exigido para arquivos de classe Java 7+. As entradas StackMapTable descrevem o estado de tipos da pilha de operandos e das variáveis locais em deslocamentos de bytecode específicos, permitindo que a JVM verifique a segurança de tipos sem uma análise de fluxo de dados custosa. Os tipos de frame incluem same, same_locals_1_stack_item, chop, append e frames completos.

Privacidade, segurança e disponibilidade

A ferramenta Visualizador de bytecode Java é 100% grátis e sem cadastro. Toda a análise de arquivos de classe é realizada localmente no seu navegador usando JavaScript - seus arquivos .class e dados de bytecode nunca saem do seu dispositivo. Não há limites de uso nem restrições. A ferramenta suporta upload de arquivos .class e colagem de bytecode codificado em hexadecimal, com inspeção completa da estrutura do arquivo de classe, incluindo pool de constantes, campos, métodos, mnemônicos de bytecode, tabelas de exceções, tabelas de números de linha e frames de stack map.

Perguntas frequentes

O visualizador suporta o formato completo de arquivo de classe da JVM (versões 45.0 a 67+). Ele analisa o pool de constantes com todos os 17+ tipos de entrada, flags de acesso, hierarquia de classes, interfaces, campos com descritores, métodos com instruções de bytecode, tabelas de manipuladores de exceções, tabelas de números de linha e frames de stack map.

Sim. Ferramentas de ofuscação renomeiam nomes de classes, métodos e campos, mas as próprias instruções de bytecode não podem ser ofuscadas. Nosso visualizador mostra as instruções reais executadas pela JVM, revelando a lógica mesmo quando os nomes estão ofuscados.

O visualizador suporta todas as instruções de bytecode padrão da JVM (opcodes 0x00 a 0xC9) com nomes mnemônicos adequados e decodificação de operandos. Isso inclui operações de pilha, aritméticas, de fluxo de controle, de acesso a campos, de invocação de métodos e de objetos.

Sim. O visualizador decodifica corretamente as instruções invokedynamic e suas entradas associadas do pool de constantes (entradas InvokeDynamic e MethodHandle). Expressões lambda compiladas com javac usam invokedynamic com métodos bootstrap referenciados no pool de constantes.

Com certeza. O Visualizador de bytecode Java roda inteiramente no seu navegador. Seu arquivo .class ou o bytecode colado em hexadecimal nunca é enviado a qualquer servidor. Toda a análise acontece localmente no seu dispositivo. Sem chamadas de API, sem análises e sem coleta de dados.

O pool de constantes contém literais de string, nomes de classes, referências a métodos, referências a campos, constantes numéricas, descritores de tipos, method handles para invokedynamic, informações de módulo/pacote para módulos Java 9+ e pares nome-e-tipo.

Aplicativos Android usam bytecode DEX, não bytecode JVM padrão. Nosso visualizador só analisa arquivos .class padrão do Java. No entanto, se você descompilar um arquivo DEX para código-fonte Java e compilar com javac, poderá ver o bytecode resultante com esta ferramenta.

As tabelas de números de linha são geradas pelo javac quando as classes são compiladas com a opção -g ou com informações de depuração padrão. Elas mapeiam deslocamentos de bytecode para números de linha do arquivo-fonte. Builds ofuscados costumam remover essas tabelas.

Sim - 100% grátis, sem cadastro, sem conta e sem limites de uso. Analise quantos arquivos de classe precisar, quantas vezes quiser. Sem cobranças ocultas, níveis premium ou limites de uso.