Просмотрщик байт-кода Java
Загрузите .class-файл или вставьте hex-байт-код, чтобы увидеть инструкции байт-кода Java, записи пула констант, кадры стека и таблицы номеров строк. Разбирайте файлы классов JVM и изучайте мнемоники байт-кода методов — всё в вашем браузере без загрузок на сервер.
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.
Почему стоит использовать наш просмотрщик байт-кода Java?
- Мгновенный дизассемблер байт-кода Java: загрузите .class-файл или вставьте hex-байт-код, чтобы мгновенно разобрать и дизассемблировать файлы классов JVM. Просмотрщик показывает полную структуру класса, включая magic-число, информацию о версии, записи пула констант, флаги доступа, дескрипторы полей и инструкции байт-кода методов с мнемониками для каждого опкода JVM. Вся обработка локальна и мгновенна.
- Полный просмотр файла класса: изучайте каждый аспект файла класса Java: пул констант со всеми типами записей (Utf8, Class, Methodref, Fieldref, NameAndType и др.), инструкции байт-кода методов с операндами, таблицы обработчиков исключений, таблицы номеров строк для сопоставления с исходником, кадры stack map и полную разбивку флагов доступа. Инструмент даёт всесторонний обзор структуры файла класса.
- Комплексные возможности просмотрщика байт-кода: переключайтесь между вкладками «Обзор», «Пул констант», «Поля» и «Методы». Каждый метод показывает последовательность инструкций байт-кода со смещением, опкодом, мнемоникой, операндами и комментариями. Смотрите max stack/locals, таблицы исключений, таблицы номеров строк и кадры stack map. Вкладка пула констант перечисляет каждую запись с типом тега и разрешёнными значениями.
- Просмотрщик байт-кода Java онлайн без установки: используйте просмотрщик байт-кода Java прямо в любом современном браузере без загрузок, приложений и плагинов. Загружайте .class-файлы, вставляйте hex-байт-код или загружайте примеры данных. Весь разбор файлов классов выполняется локально на JavaScript — без загрузок на сервер, без утечек данных, полностью приватно.
Типичные сценарии использования просмотрщика байт-кода Java
- Анализ вредоносного ПО и полезных нагрузок Java: специалисты по безопасности используют просмотрщик байт-кода для изучения вредоносного ПО, дропперов и бэкдоров Java без их запуска. Просматривая пул констант и байт-код методов напрямую, аналитики могут извлечь URL C2, ключи шифрования и строки конфигурации, которые могут быть обфусцированы в декомпилированном исходном коде Java, но видны как константы в файле класса.
- Понимание обфусцированного кода Java: когда декомпилированный вывод таких инструментов, как CFR, Procyon или Fernflower, даёт непонятный код, просмотр сырого байт-кода раскрывает фактические инструкции, выполняемые JVM. Это помогает реверс-инженерам понять, что на самом деле делают обфусцированные методы, особенно при выравнивании потока управления, непрозрачных предикатах и шифровании строк.
- Анализ обхода проверки лицензий и DRM: исследователи, анализирующие реализации лицензирования и DRM в приложениях Java, используют просмотрщик байт-кода для изучения методов проверки лицензий. Пул констант раскрывает зашитые форматы лицензионных ключей, константы алгоритмов проверки и отпечатки цифровых сертификатов, используемые в логике лицензирования.
- Форензика модов и плагинов Minecraft: аналитики модов Minecraft используют просмотрщик байт-кода для изучения обфусцированных плагинов Forge, Fabric и Bukkit/Spigot. Инструмент помогает выявить скрытые вызовы API, блокировки премиум-функций, эндпоинты телеметрии и зашитые учётные данные, которые могут быть невидимы в декомпилированном исходнике, но ясно видны в пуле констант байт-кода.
- Аудит и соответствие корпоративного кода Java: аудиторы безопасности, проверяющие скомпилированные корпоративные Java-приложения, используют просмотрщик байт-кода, чтобы убедиться, что чувствительные операции используют правильные разрешения, криптографические операции применяют ожидаемые алгоритмы и не совершается несанкционированных вызовов API. Просмотр сырого байт-кода даёт неопровержимое доказательство фактически выполняемого кода.
- Обучение и изучение байт-кода JVM: студенты-информатики и Java-разработчики, изучающие набор инструкций JVM, используют просмотрщик байт-кода как учебный инструмент. Компилируя простой Java-код и просматривая получившийся байт-код, они могут понять, как высокоуровневые конструкции Java переводятся в инструкции JVM, операции со стеком и диспетчеризацию методов.
Что такое байт-код Java?
Байт-код Java — это промежуточное представление исходного кода Java, выполняемое на Java Virtual Machine (JVM). Когда вы компилируете .java-файл с помощью javac, компилятор создаёт .class-файл с платформенно-независимыми инструкциями байт-кода. В отличие от исходного кода, рассчитанного на читаемость человеком, байт-код рассчитан на эффективное выполнение JVM и при этом сохраняет достаточно структуры для таких возможностей времени выполнения, как рефлексия, динамическая загрузка классов и сборка мусора.
Файл класса Java имеет строгий бинарный формат, определённый спецификацией JVM. Он начинается с magic-числа 0xCAFEBABE, за которым следуют информация о версии, пул констант (таблица всех констант, используемых в классе), флаги доступа, информация об иерархии классов, определения полей, определения методов с байт-кодом и атрибуты класса.
Как работает наш просмотрщик байт-кода Java
- 1. Загрузите или вставьте байт-код: загрузите скомпилированный .class-файл, нажав кнопку «Загрузить», либо вставьте hex-представление файла класса в текстовое поле. Инструмент принимает необработанные hex-байты, начинающиеся с magic-числа CAFEBABE. Также можно нажать «Загрузить пример hex», чтобы разобрать заранее подготовленный образец файла класса и изучить его структуру.
- 2. Разбор файла класса: парсер на JavaScript читает бинарный формат файла класса шаг за шагом: проверяет magic-число и версию, декодирует пул констант (до 65535 записей), разбирает флаги доступа (ACC_PUBLIC, ACC_STATIC, ACC_FINAL и др.), разрешает иерархию классов, перечисляет поля с их дескрипторами и обрабатывает каждый метод, включая его атрибут Code с последовательностями инструкций байт-кода, таблицами обработчиков исключений, таблицами номеров строк и кадрами stack map. Парсер обрабатывает все 17+ типов записей пула констант.
- 3. Изучите структуру: используйте навигацию по вкладкам для переключения между представлениями «Обзор», «Пул констант», «Поля» и «Методы». Нажмите на любой метод, чтобы развернуть его и увидеть полный список инструкций байт-кода, max stack/locals, обработчики исключений, сопоставления номеров строк и кадры stack map. Каждая инструкция байт-кода показывает своё смещение, значение опкода, мнемоническое имя, операнды и разрешённые ссылки на пул констант.
Структура файла класса Java: объяснение
- Magic-число и версия: каждый корректный файл класса начинается с 4-байтного magic-числа 0xCAFEBABE. Следующие 4 байта содержат номера младшей и старшей версий, которые указывают версию Java, скомпилировавшую этот класс (например, major 61 = Java 17, major 52 = Java 8).
- Пул констант: таблица констант переменной длины, используемых во всём файле класса. Записи включают строки UTF-8, ссылки на классы, ссылки на методы/поля, числовые константы, дескрипторы name-and-type и точки динамического вызова. Каждая запись имеет 1-байтный тег, определяющий её тип, а индексация записей начинается с 1 (индекс 0 зарезервирован как null).
- Поля и методы: каждое поле и метод определяются с флагами доступа (public, private, static, final и др.), индексом имени в пуле констант, строкой дескриптора (например, (Ljava/lang/String;)V для метода, принимающего String и возвращающего void) и атрибутами. Атрибут Code каждого метода содержит фактические инструкции байт-кода, max stack/locals, обработчики исключений и необязательные отладочные атрибуты.
- Инструкции байт-кода: каждая инструкция JVM — это 1-байтный опкод, за которым следует 0 или более байтов операндов. Инструкции варьируются от простых операций со стеком (iconst_0, dup) до сложных вызовов методов (invokevirtual, invokespecial, invokeinterface, invokedynamic), доступа к полям (getfield, putstatic), управления потоком (ifeq, goto, tableswitch) и операций с объектами (new, checkcast, instanceof).
- Кадры stack map: атрибут верификации, обязательный для файлов классов Java 7+. Записи StackMapTable описывают типовое состояние стека операндов и локальных переменных на определённых смещениях байт-кода, позволяя JVM проверять типобезопасность без дорогостоящего анализа потоков данных. Типы кадров включают same, same_locals_1_stack_item, chop, append и полные кадры.
Приватность, безопасность и доступность
Инструмент «Просмотрщик байт-кода Java» на 100 % бесплатный и не требует регистрации. Весь разбор файлов классов выполняется локально в вашем браузере с помощью JavaScript — ваши .class-файлы и данные байт-кода никогда не покидают устройство. Нет ограничений на использование. Инструмент поддерживает загрузку .class-файлов и вставку hex-байт-кода с полным просмотром структуры файла класса, включая пул констант, поля, методы, мнемоники байт-кода, таблицы исключений, таблицы номеров строк и кадры stack map.
Часто задаваемые вопросы
Просмотрщик поддерживает полный формат файла класса JVM (версии 45.0–67+). Он разбирает пул констант со всеми 17+ типами записей, флаги доступа, иерархию классов, интерфейсы, поля с дескрипторами, методы с инструкциями байт-кода, таблицы обработчиков исключений, таблицы номеров строк и кадры stack map.
Да. Инструменты обфускации переименовывают классы, методы и поля, но сами инструкции байт-кода обфусцировать нельзя. Наш просмотрщик показывает фактические инструкции, выполняемые JVM, раскрывая логику даже при обфусцированных именах.
Просмотрщик поддерживает все стандартные инструкции байт-кода JVM (опкоды 0x00–0xC9) с корректными мнемоническими именами и декодированием операндов. Это включает операции со стеком, арифметические, управления потоком, доступа к полям, вызова методов и работы с объектами.
Да. Просмотрщик корректно декодирует инструкции invokedynamic и связанные с ними записи пула констант (записи InvokeDynamic и MethodHandle). Лямбда-выражения, скомпилированные javac, используют invokedynamic с bootstrap-методами, на которые ссылается пул констант.
Безусловно. Просмотрщик байт-кода Java работает исключительно в вашем браузере. Ваш .class-файл или вставленный hex-байт-код никогда не загружается на сервер. Весь разбор происходит локально на вашем устройстве. Никаких обращений к API, аналитики и сбора данных.
Пул констант содержит строковые литералы, имена классов, ссылки на методы, ссылки на поля, числовые константы, дескрипторы типов, method handles для invokedynamic, информацию о модулях/пакетах для модулей Java 9+ и пары name-and-type.
Приложения Android используют байт-код DEX, а не стандартный байт-код JVM. Наш просмотрщик разбирает только стандартные .class-файлы Java. Однако если вы декомпилируете DEX-файл в исходный код Java и скомпилируете его с помощью javac, вы сможете просмотреть полученный байт-код этим инструментом.
Таблицы номеров строк создаёт javac при компиляции классов с опцией -g или со стандартной отладочной информацией. Они сопоставляют смещения байт-кода с номерами строк исходного файла. Обфусцированные сборки часто удаляют эти таблицы.
Да — 100 % бесплатно, без регистрации, без аккаунта и без ограничений на использование. Разбирайте столько файлов классов, сколько нужно, сколько угодно раз. Нет скрытых платежей, премиум-уровней и лимитов.