Zum Inhalt springen
Aback Tools Logo

Java-Bytecode-Viewer

Lade eine .class-Datei hoch oder füge Hex-Bytecode ein, um Java-Bytecode-Anweisungen, Constant-Pool-Einträge, Stack-Frames und Line-Number-Tables anzusehen. Parst JVM-Klassendateien und inspiziert Methoden-Bytecode-Mnemonics - alles in deinem Browser, ohne Server-Uploads.

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.

Warum unseren Java-Bytecode-Viewer verwenden?

  • Sofortige Java-Bytecode-Disassemblierung: Lade eine .class-Datei hoch oder füge Hex-Bytecode ein, um JVM-Klassendateien sofort zu parsen und zu disassemblieren. Der Viewer zeigt die vollständige Klassenstruktur inklusive Magic Number, Versionsinformationen, Constant-Pool-Einträgen, Access Flags, Felddeskriptoren und Methoden-Bytecode-Anweisungen mit Mnemonics für jeden JVM-Opcode. Die gesamte Verarbeitung ist lokal und sofort.
  • Vollständige Klassendatei-Inspektion: Inspiziere jeden Aspekt einer Java-Klassendatei: den Constant Pool mit allen Eintragstypen (Utf8, Class, Methodref, Fieldref, NameAndType usw.), Methoden-Bytecode-Anweisungen mit Operanden, Exception-Handler-Tabellen, Line-Number-Tables zur Quellzuordnung, Stack-Map-Frames und die vollständige Aufschlüsselung der Access Flags. Das Tool bietet einen umfassenden Einblick in die Klassendateistruktur.
  • Umfassende Bytecode-Viewer-Funktionen: Navigiere zwischen den Tabs Übersicht, Constant Pool, Felder und Methoden. Jede Methode zeigt ihre Bytecode-Anweisungssequenz mit Offset, Opcode, Mnemonic, Operanden und Kommentaren. Sieh dir max stack/locals, Exception-Tabellen, Line-Number-Tables und Stack-Map-Frames an. Der Constant-Pool-Tab listet jeden Eintrag mit seinem Tag-Typ und aufgelösten Werten.
  • Java-Bytecode-Viewer online - keine Installation: Nutze den Java-Bytecode-Viewer direkt in jedem modernen Browser ohne Downloads, Apps oder Plugins. Lade .class-Dateien hoch, füge Hex-Bytecode ein oder lade Beispieldaten. Die gesamte Klassendatei-Analyse erfolgt lokal mit JavaScript - keine Server-Uploads, keine Datenlecks, vollständig privat.

Typische Anwendungsfälle des Java-Bytecode-Viewers

  • Analyse von Java-Malware und Payloads: Sicherheitsanalysten nutzen den Bytecode-Viewer, um Java-Malware, Dropper und Backdoors zu inspizieren, ohne sie auszuführen. Durch die direkte Ansicht des Constant Pools und des Methoden-Bytecodes können Analysten C2-URLs, Verschlüsselungsschlüssel und Konfigurationsstrings extrahieren, die im dekompilierten Java-Quellcode verschleiert sein können, aber als Konstanten in der Klassendatei sichtbar sind.
  • Verschleierten Java-Code verstehen: Wenn dekompilierter Output von Tools wie CFR, Procyon oder Fernflower verwirrenden Code erzeugt, offenbart die Ansicht des rohen Bytecodes die tatsächlichen Anweisungen, die die JVM ausführt. Dies hilft Reverse Engineers zu verstehen, was verschleierte Methoden tatsächlich tun, insbesondere bei Control-Flow-Flattening, undurchsichtigen Prädikaten und String-Verschlüsselung.
  • Analyse der Umgehung von Lizenz- und DRM-Validierung: Forscher, die Lizenz- und DRM-Implementierungen von Java-Anwendungen analysieren, nutzen den Bytecode-Viewer, um Lizenzvalidierungsmethoden zu inspizieren. Der Constant Pool offenbart hartcodierte Lizenzschlüsselformate, Konstanten von Validierungsalgorithmen und Fingerabdrücke digitaler Zertifikate, die in der Lizenzlogik verwendet werden.
  • Forensische Analyse von Minecraft-Mods und -Plugins: Minecraft-Mod-Analysten nutzen den Bytecode-Viewer, um verschleierte Forge-, Fabric- und Bukkit/Spigot-Plugins zu inspizieren. Das Tool hilft, versteckte API-Aufrufe, Premium-Feature-Sperren, Telemetrie-Endpunkte und hartcodierte Anmeldedaten zu identifizieren, die im dekompilierten Quellcode unsichtbar sein können, im Bytecode-Constant-Pool jedoch klar sichtbar sind.
  • Audit und Compliance von Enterprise-Java-Code: Sicherheitsauditoren, die kompilierte Java-Enterprise-Anwendungen inspizieren, nutzen den Bytecode-Viewer, um zu überprüfen, dass sensible Vorgänge die richtigen Berechtigungen verwenden, dass kryptografische Vorgänge die erwarteten Algorithmen einsetzen und dass keine unbefugten API-Aufrufe erfolgen. Die Rohbytecode-Ansicht liefert unwiderlegbare Beweise für den tatsächlich ausgeführten Code.
  • Ausbildung und Lernen des JVM-Bytecodes: Informatikstudierende und Java-Entwickler, die den JVM-Befehlssatz lernen, nutzen den Bytecode-Viewer als Lehrmittel. Durch das Kompilieren einfachen Java-Codes und die Ansicht des resultierenden Bytecodes können sie verstehen, wie High-Level-Java-Konstrukte in JVM-Anweisungen, Stack-Operationen und Methoden-Dispatch übersetzt werden.

Was ist Java-Bytecode?

Java-Bytecode ist die Zwischendarstellung von Java-Quellcode, die auf der Java Virtual Machine (JVM) ausgeführt wird. Wenn du eine .java-Datei mit javac kompilierst, erzeugt der Compiler eine .class-Datei mit plattformunabhängigen Bytecode-Anweisungen. Anders als Quellcode, der auf menschliche Lesbarkeit ausgelegt ist, ist Bytecode auf effiziente Ausführung durch die JVM ausgelegt und behält dennoch genug Struktur für Laufzeitfunktionen wie Reflection, dynamisches Laden von Klassen und Garbage Collection.

Eine Java-Klassendatei hat ein striktes Binärformat, das von der JVM-Spezifikation definiert wird. Sie beginnt mit der Magic Number 0xCAFEBABE, gefolgt von Versionsinformationen, dem Constant Pool (einer Tabelle aller in der Klasse verwendeten Konstanten), Access Flags, Informationen zur Klassenhierarchie, Felddefinitionen, Methodendefinitionen mit Bytecode und Klassenattributen.

So funktioniert unser Java-Bytecode-Viewer

  1. 1. Bytecode hochladen oder einfügen: Lade entweder eine kompilierte .class-Datei durch Klicken auf die Schaltfläche „Hochladen“ hoch oder füge die Hex-Darstellung einer Klassendatei in das Textfeld ein. Das Tool akzeptiert rohe Hex-Bytes, die mit der Magic Number CAFEBABE beginnen. Du kannst auch auf „Beispiel-Hex laden“ klicken, um eine vorgefertigte Beispiel-Klassendatei zu parsen und ihre Struktur zu erkunden.
  2. 2. Klassendatei-Parsing: Der JavaScript-basierte Parser liest das binäre Klassendateiformat Schritt für Schritt: Er validiert Magic Number und Version, dekodiert den Constant Pool (bis zu 65535 Einträge), parst Access Flags (ACC_PUBLIC, ACC_STATIC, ACC_FINAL usw.), löst die Klassenhierarchie auf, zählt Felder mit ihren Deskriptoren auf und verarbeitet jede Methode einschließlich ihres Code-Attributs mit Bytecode-Anweisungssequenzen, Exception-Handler-Tabellen, Line-Number-Tables und Stack-Map-Frames. Der Parser verarbeitet alle 17+ Constant-Pool-Eintragstypen.
  3. 3. Struktur erkunden: Nutze die tab-basierte Navigation, um zwischen den Ansichten Übersicht, Constant Pool, Felder und Methoden zu wechseln. Klicke auf eine beliebige Methode, um sie zu erweitern und ihre vollständige Bytecode-Anweisungsliste, max stack/locals, Exception-Handler, Line-Number-Zuordnungen und Stack-Map-Frames zu sehen. Jede Bytecode-Anweisung zeigt ihren Offset, Opcode-Wert, Mnemonic-Namen, Operanden und aufgelösten Constant-Pool-Referenzen.

Java-Klassendateistruktur erklärt

  • Magic Number und Version: Jede gültige Klassendatei beginnt mit der 4-Byte-Magic-Number 0xCAFEBABE. Die nächsten 4 Bytes enthalten die Minor- und Major-Versionsnummern, die die Java-Version identifizieren, mit der diese Klasse kompiliert wurde (z. B. Major 61 = Java 17, Major 52 = Java 8).
  • Constant Pool: Eine Tabelle variabler Länge mit Konstanten, die in der gesamten Klassendatei verwendet werden. Einträge umfassen UTF-8-Strings, Klassenreferenzen, Methoden-/Feldreferenzen, numerische Konstanten, Name-and-Type-Deskriptoren und dynamische Aufrufstellen. Jeder Eintrag hat ein 1-Byte-Tag, das seinen Typ identifiziert, und die Einträge werden ab 1 indiziert (Index 0 ist als null reserviert).
  • Felder und Methoden: Jedes Feld und jede Methode wird mit Access Flags (public, private, static, final usw.), einem Namensindex in den Constant Pool, einem Deskriptorstring (z. B. (Ljava/lang/String;)V für eine Methode, die einen String nimmt und void zurückgibt) und Attributen definiert. Das Code-Attribut jeder Methode enthält die eigentlichen Bytecode-Anweisungen, max stack/locals, Exception-Handler und optionale Debug-Attribute.
  • Bytecode-Anweisungen: Jede JVM-Anweisung ist ein 1-Byte-Opcode, gefolgt von 0 oder mehr Operandenbytes. Die Anweisungen reichen von einfachen Stack-Operationen (iconst_0, dup) bis zu komplexen Methodenaufrufen (invokevirtual, invokespecial, invokeinterface, invokedynamic), Feldzugriffen (getfield, putstatic), Kontrollfluss (ifeq, goto, tableswitch) und Objektoperationen (new, checkcast, instanceof).
  • Stack-Map-Frames: Ein Verifikationsattribut, das für Java-7+-Klassendateien erforderlich ist. StackMapTable-Einträge beschreiben den Typzustand des Operandenstapels und der lokalen Variablen an bestimmten Bytecode-Offsets, sodass die JVM die Typsicherheit ohne aufwändige Datenflussanalyse verifizieren kann. Zu den Frame-Typen gehören same, same_locals_1_stack_item, chop, append und vollständige Frames.

Datenschutz, Sicherheit und Verfügbarkeit

Das Tool Java-Bytecode-Viewer ist 100 % kostenlos und ohne Anmeldung. Die gesamte Klassendatei-Analyse erfolgt lokal in deinem Browser mit JavaScript - deine .class-Dateien und Bytecode-Daten verlassen niemals dein Gerät. Es gibt keine Nutzungsgrenzen oder Einschränkungen. Das Tool unterstützt den Upload von .class-Dateien und das Einfügen hexadezimal codierten Bytecodes mit vollständiger Inspektion der Klassendateistruktur, einschließlich Constant Pool, Felder, Methoden, Bytecode-Mnemonics, Exception-Tabellen, Line-Number-Tables und Stack-Map-Frames.

Häufig gestellte Fragen

Der Viewer unterstützt das vollständige JVM-Klassendateiformat (Versionen 45.0 bis 67+). Er parst den Constant Pool mit allen 17+ Eintragstypen, Access Flags, die Klassenhierarchie, Interfaces, Felder mit Deskriptoren, Methoden mit Bytecode-Anweisungen, Exception-Handler-Tabellen, Line-Number-Tables und Stack-Map-Frames.

Ja. Obfuskierungs-Tools benennen Klassen-, Methoden- und Feldnamen um, aber die Bytecode-Anweisungen selbst können nicht verschleiert werden. Unser Viewer zeigt die tatsächlichen Anweisungen, die von der JVM ausgeführt werden, und offenbart die Logik auch dann, wenn Namen verschleiert sind.

Der Viewer unterstützt alle Standard-JVM-Bytecode-Anweisungen (Opcodes 0x00 bis 0xC9) mit korrekten Mnemonic-Namen und Operanden-Dekodierung. Dazu gehören Stack-, Arithmetik-, Kontrollfluss-, Feldzugriffs-, Methodenaufruf- und Objektoperationen.

Ja. Der Viewer dekodiert invokedynamic-Anweisungen und ihre zugehörigen Constant-Pool-Einträge (InvokeDynamic- und MethodHandle-Einträge) korrekt. Mit javac kompilierte Lambda-Ausdrücke verwenden invokedynamic mit Bootstrap-Methoden, auf die im Constant Pool verwiesen wird.

Absolut. Der Java-Bytecode-Viewer läuft ausschließlich in deinem Browser. Deine .class-Datei oder der eingefügte Hex-Bytecode wird niemals auf einen Server hochgeladen. Die gesamte Analyse erfolgt lokal auf deinem Gerät. Keine API-Aufrufe, keine Analysen, keine Datenerfassung.

Der Constant Pool enthält String-Literale, Klassennamen, Methodenreferenzen, Feldreferenzen, numerische Konstanten, Typdeskriptoren, Method Handles für invokedynamic, Modul-/Paketinformationen für Java-9+-Module und Name-and-Type-Paare.

Android-Apps verwenden DEX-Bytecode, nicht den Standard-JVM-Bytecode. Unser Viewer parst nur standardmäßige Java-.class-Dateien. Wenn du jedoch eine DEX-Datei in Java-Quellcode dekompilierst und mit javac kompilierst, kannst du den resultierenden Bytecode mit diesem Tool ansehen.

Line-Number-Tables werden von javac erzeugt, wenn Klassen mit der Option -g oder den Standard-Debug-Informationen kompiliert werden. Sie ordnen Bytecode-Offsets den Zeilennummern der Quelldatei zu. Verschleierte Builds entfernen diese Tabellen oft.

Ja - 100 % kostenlos, ohne Anmeldung, ohne Konto und ohne Nutzungsgrenzen. Parse so viele Klassendateien, wie du brauchst, so oft du willst. Keine versteckten Kosten, Premium-Stufen oder Nutzungsobergrenzen.