Анализатор пула констант Java
Загрузите .class-файл Java, чтобы извлечь и проанализировать все константы из пула констант. Просматривайте строки, ссылки на классы, сигнатуры методов, ссылки на поля и числовые константы, упорядоченные по категориям, с подробными описаниями и сырыми hex-данными. Вся обработка выполняется локально и приватно.
Upload a Java .class file
Drag and drop or click to browse. All processing is local and private.
Почему стоит использовать наш анализатор пула констант Java?
- Полное извлечение пула констант: анализатор пула констант Java разбирает все записи пула констант из любого .class-файла: UTF-8 строки, ссылки на классы, ссылки на методы, ссылки на поля, ссылки на методы интерфейсов, дескрипторы name-and-type, целочисленные, float, long и double константы, method handles, типы методов, записи invoke dynamic и информацию о модулях/пакетах.
- Анализ иерархии классов и методов: мгновенно определяйте этот класс и суперкласс с их полными именами во внутреннем (com/example/MyClass) и Java-формате (com.example.MyClass). Просматривайте все упомянутые классы, сигнатуры методов, сигнатуры полей и строковые литералы, извлечённые из пула констант.
- Умная фильтрация и поиск: фильтруйте записи пула констант по категориям: строки, классы, ссылки (метод/поле/интерфейс), числовые константы и дескрипторы типов. Ищите по всем записям по индексу, имени тега или тексту описания. Анализатор пула констант упрощает поиск нужного в файлах с сотнями записей.
- 100 % приватно — без загрузки данных: весь анализ файлов классов выполняется локально в вашем браузере на JavaScript. Ваши .class-файлы никогда не покидают устройство. Аккаунт не требуется, отслеживания нет, данные нигде не хранятся. Экспортируйте таблицу пула констант в TSV для дальнейшего анализа в электронных таблицах.
Типичные сценарии использования анализатора пула констант Java
- Реверс-инжиниринг и анализ вредоносного ПО: специалисты по безопасности используют анализ пула констант для понимания обфусцированных или защищённых Java-приложений. Извлекайте все строковые литералы, имена классов и ссылки на методы из неизвестных .class-файлов, чтобы восстановить структуру приложения и выявить подозрительные вызовы API или использование библиотек.
- Обнаружение и анализ обфускации: инструменты обфускации Java переименовывают классы, методы и поля в бессмысленные имена. Анализатор пула констант раскрывает эти переименованные идентификаторы и показывает полное сопоставление ссылок. ProGuard, DashO и другие попытки обфускации становятся заметны по необычным шаблонам имён в пуле констант.
- Отладка конфликтов зависимостей: при отладке конфликтов classpath или исключений NoSuchMethodError наш анализатор пула констант помогает определить, против какой версии библиотеки был скомпилирован .class-файл. Сигнатуры методов и ссылки на поля в пуле констант раскрывают точную поверхность API, ожидаемую скомпилированным кодом.
- Проверка и совместимость файлов классов: убеждайтесь, что .class-файлы корректно сформированы, и проверяйте совместимость с версией Java. Анализатор пула констант проверяет magic-число (0xCAFEBABE), разбирает информацию о версии и структурно читает все записи пула констант. Обнаруживайте повреждённые или подделанные файлы классов до развёртывания.
- Изучение формата файла класса Java: студенты-информатики и Java-разработчики используют анализатор пула констант для понимания формата файла класса Java. Смотрите, как JVM хранит классы, методы, поля и строковые константы. Изучайте структуру пула констант интерактивно, чтобы развить интуицию о байт-коде и загрузке классов.
- Извлечение строк и ресурсов: извлекайте все зашитые строки из скомпилированных Java-файлов классов без необходимости в полном декомпиляторе. Анализатор пула констант показывает все строковые литералы, имена классов и дескрипторы типов — бесценно для быстрого анализа скомпилированного кода, строк локализации или констант конфигурации, встроенных в .class-файлы.
Что такое пул констант Java?
Пул констант — критическая структура данных в каждом Java-.class-файле. Он служит таблицей символов, содержащей все константы, имена классов, методов, полей, дескрипторы типов и строковые литералы, на которые ссылается байт-код. Расположенный сразу после заголовка версии файла класса, пул констант индексируется начиная с 1 и используется во всём остальном файле класса. JVM использует этот пул при загрузке классов и выполнении байт-кода для разрешения символьных ссылок в их фактические значения времени выполнения. Наш анализатор пула констант делает всё это видимым и доступным для поиска.
Как работает наш анализатор пула констант Java
- Загрузите .class-файл: просто загрузите любой скомпилированный файл класса Java. Анализатор читает сырые байты и проверяет magic-число (0xCAFEBABE) и заголовок версии, чтобы подтвердить корректный формат файла класса Java.
- Автоматический разбор пула констант: анализатор перебирает все записи пула констант, декодируя каждую согласно её типу тега. Каждая запись классифицируется как строка, ссылка на класс, ссылка на метод/поле, дескриптор типа, числовая константа или другой тип записи. Все записи индексируются с их сырыми hex-данными для проверки.
- Изучайте и фильтруйте результаты: просматривайте полную таблицу пула констант с умной фильтрацией по категориям. Ищите по всем записям, смотрите сводную статистику, включая количество записей по типам, упомянутые классы, сигнатуры методов и извлечённые строковые литералы. Копируйте таблицу для дальнейшего анализа.
Типы записей пула констант: объяснение
- Utf8 (CONSTANT_Utf8): самый распространённый тип записи, представляющий строки в кодировке UTF-8 для имён классов, методов, полей и дескрипторов типов. Они образуют строительные блоки всех остальных типов ссылок в пуле констант.
- Ссылки на классы и строки: записи Class указывают на UTF-8 строки с внутренними именами классов (например, java/lang/Object). Записи String ссылаются на UTF-8 строки, представляющие литеральные строковые константы, используемые в байт-коде.
- Ссылки на методы, поля и методы интерфейсов: эти записи с тройным индексом объединяют ссылку Class, дескриптор NameAndType и тип тега, чтобы полностью квалифицировать доступ к члену. MethodRef представляют вызовы виртуальных методов, а InterfaceMethodRef — диспетчеризацию интерфейсов.
- NameAndType: объединяет имя члена (например, «toString») с его дескриптором типа (например, «()Ljava/lang/String;»), чтобы однозначно идентифицировать поле или метод без указания класса-владельца. На них ссылаются записи Fieldref, Methodref и InterfaceMethodref.
Приватность, безопасность и примечания по использованию
Анализатор пула констант Java обрабатывает все данные исключительно в вашем браузере с помощью JavaScript. Никакие .class-файлы никогда не загружаются на сервер, не сохраняются в базах данных и не передаются третьим лицам. Нет ограничения на размер файла, кроме доступной памяти вашего браузера. Файлы классов любого размера можно анализировать мгновенно. Инструмент полностью бесплатный, без регистрации, без ограничений на использование и без премиум-уровня. Используйте его для любых целей — личных, коммерческих, образовательных или исследовательских — бесплатно.
Часто задаваемые вопросы
Пул констант — это таблица констант, символических ссылок и строковых литералов, хранящаяся в каждом Java-.class-файле. Он служит таблицей символов времени выполнения для JVM и содержит имена классов, методов, полей, дескрипторы типов, строковые константы и числовые константы. Все инструкции байт-кода ссылаются на записи пула констант по их индексу, что делает его важнейшей структурой данных формата файла класса.
Анализатор извлекает все типы записей пула констант: UTF-8 строки (имена классов, методов, дескрипторы), ссылки на классы, ссылки на методы, ссылки на поля, ссылки на методы интерфейсов, дескрипторы name-and-type, целочисленные/float/long/double числовые константы, method handles, типы методов, записи invoke dynamic и ссылки на модули/пакеты. Каждая запись включает индекс, тип тега, понятное описание и сырые hex-данные.
Нет, анализатор пула констант не является декомпилятором. Он извлекает таблицу символов из файла класса, показывая все значения констант, ссылки на классы и сигнатуры методов. Он не восстанавливает инструкции байт-кода и не декомпилирует тела методов. Для полной декомпиляции понадобится такой инструмент, как CFR, Procyon или JD-GUI.
0xCAFEBABE — это magic-число, идентифицирующее корректные файлы классов Java. Каждый .class-файл должен начинаться с этих четырёх байтов. Если файл не начинается с 0xCAFEBABE, это не корректный файл класса Java. Анализатор пула констант сначала проверяет это magic-число и сообщает об ошибке при его отсутствии, предотвращая анализ не-классовых файлов или повреждённых данных.
Внутренние имена классов используют косые черты как разделители пакетов (например, java/lang/String), тогда как исходный код Java использует точки (java.lang.String). Пул констант хранит имена классов во внутреннем формате. Наш анализатор отображает оба формата: сырое внутреннее имя в таблице и Java-формат с точками в сводке информации о классе.
В формате файла класса Java записи CONSTANT_Long и CONSTANT_Double занимают два последовательных индекса пула констант. Это унаследованное решение ранних спецификаций JVM, связанное с требованиями к 8-байтовому хранению. Когда вы видите пропуски в нумерации индексов пула констант, вероятно, была прочитана запись Long или Double, занявшая два слота.
Безусловно. Анализатор пула констант Java обрабатывает всё локально в вашем браузере с помощью JavaScript. Ваши .class-файлы никогда не загружаются на сервер, не сохраняются в базах данных и не передаются по сети. Весь разбор происходит на вашем устройстве для полной приватности. Это делает безопасным анализ проприетарного кода, конфиденциальных библиотек или обфусцированных приложений.
Да — 100 % бесплатно, без регистрации, без аккаунта и без ограничений на использование. Анализируйте столько .class-файлов, сколько нужно, сколько угодно раз. Нет премиум-уровней, скрытых платежей и ограничений по частоте. Инструмент работает исключительно в вашем браузере — ваши файлы никогда не покидают устройство.