Анализатор class-dump и протоколов iOS
Вставьте код заголовков Objective-C или вывод class-dump для анализа интерфейсов классов, цепочек наследования, протоколов (с методами @required и @optional), категорий, сигнатур методов и объявлений свойств. Анализатор визуализирует полную поверхность API кода iOS-приложения с разворачиваемыми детальными представлениями, построением цепочек наследования и фильтрацией по вкладкам по типу объявления. Вся обработка выполняется локально и приватно.
Paste Objective-C header code above to analyze class interfaces, protocols, and categories. The parser extracts inheritance chains, method signatures, property declarations, and protocol conformity. Try loading an example to see how it works!
Возможности
- Полный разбор заголовков ObjC: разбирает весь спектр объявлений Objective-C: блоки @interface с наследованием (:), соответствием протоколам (<...>), @protocol с секциями @required и @optional, категории (@interface ClassName (Category)), объявления @property с атрибутами (nonatomic, strong, copy, readonly), методы экземпляра (-) и класса (+), а также переменные экземпляра. Обрабатывает сложные сигнатуры типов, включая блоки, дженерики (NSArray<NSString *>) и типы, квалифицированные протоколами.
- Визуализация цепочек наследования и протоколов: автоматически строит цепочки наследования, показывая полную иерархию классов из разобранных интерфейсов. Каждый класс отображает свой суперкласс и принятые протоколы в виде кликабельных значков. Зависимости протоколов показаны со ссылками на родительские протоколы. Представление наследования упрощает понимание иерархии классов любого iOS-фреймворка, библиотеки или кодовой базы приложения.
- Детальные представления сигнатур методов и свойств: разворачивайте любой интерфейс класса, чтобы увидеть полную поверхность API: свойства с атрибутами и типами, методы экземпляра с типами возврата и сигнатурами параметров, методы класса (фабричные методы, синглтоны) и переменные экземпляра. Протоколы показывают методы @required против @optional с тем же уровнем детализации. Категории показывают свои методы расширения рядом с именем исходного класса.
- 100 % локально в браузере и приватно: весь разбор и анализ выполняются исключительно в вашем браузере. Код заголовков Objective-C, который вы вставляете, а также все разобранные интерфейсы, протоколы, категории, сигнатуры методов и объявления свойств никогда не загружаются на сервер. Никаких обращений к API, никакого сбора данных, никакого отслеживания. Полностью безопасно для анализа проприетарного кода iOS, сторонних библиотек или конфиденциальных заголовков приложений.
Сценарии использования
- Реверс-инжиниринг и анализ iOS-приложений: анализируйте заголовки iOS-приложений, извлечённые через class-dump или другие инструменты анализа Mach-O. Понимайте полную иерархию классов любого iOS-приложения, включая приватные фреймворки, сторонние SDK и основной бинарник приложения. Определяйте все классы, их суперклассы, принимаемые протоколы, реализуемые методы и экспонируемые свойства.
- Исследование и документирование приватных API: изучайте заголовки приватных фреймворков iOS/macOS, чтобы обнаружить недокументированные классы, методы и свойства. Анализатор помогает исследователям понять структуру приватных фреймворков вроде SpringBoardServices, MobileCoreServices и GraphicsServices, разбирая вывод class-dump и представляя поверхность API в чистом, удобном для навигации формате.
- Планирование интеграции SDK и библиотек: при интеграции сторонних SDK или библиотек iOS вставляйте файлы заголовков в анализатор, чтобы быстро понять поверхность API. Смотрите иерархию наследования, принятые протоколы и полные списки методов/свойств с одного взгляда. Сравнивайте похожие классы между разными версиями SDK, чтобы выявить изменения API.
- Разработка tweak'ов для джейлбрейка и Theos: разработчики джейлбрейка активно используют class-dump, чтобы понять классы, которые нужно перехватить для tweak'ов. Анализатор упрощает навигацию по объявлениям интерфейсов, поиск нужных методов для сваizzling и понимание типов свойств для перехвата с помощью Theos или Cydia Substrate. Необходим для реверс-инжиниринга iOS с ограниченным бюджетом.
- Изучение runtime и паттернов Objective-C: студенты-информатики и iOS-разработчики используют анализатор для изучения паттернов runtime Objective-C. Смотрите, как Apple проектирует иерархии классов с протокол-ориентированным программированием, как паттерны делегирования объявляются через формальные протоколы и как категории расширяют классы без наследования.
- Обнаружение структуры обфусцированных классов: при анализе обфусцированных iOS-приложений вывод class-dump раскрывает структуру классов, даже когда имена символов перемешаны. Анализатор помогает выявить ключевые классы, понять архитектуру вопреки обфускации и построить граф объектов приложения по оставшейся структурной информации.
Что такое class-dump и почему это важно?
class-dump — это инструмент командной строки, который исследует сегмент Objective-C бинарников Mach-O (исполняемые файлы iOS/macOS) и генерирует соответствующие файлы заголовков Objective-C. Он работает потому, что Objective-C — язык с высокой степенью интроспекции: имена классов, методов, свойств и протоколы хранятся как строки метаданных в секциях __objc_classlist, __objc_protolist и __objc_catlist бинарника. Наш анализатор class-dump и протоколов iOS имитирует это, разбирая вывод class-dump или сырые файлы заголовков Objective-C и представляя иерархию классов, определения протоколов и поверхность API в чистом, удобном для навигации интерфейсе. Это необходимо для понимания внутренней работы iOS-фреймворков, анализа сторонних приложений и реверс-инжиниринга iOS-ПО.
Как работает наш анализатор class-dump
- Вставьте или загрузите данные заголовков: вставьте код заголовков Objective-C из вывода class-dump, извлечённых заголовков или вашего собственного исходного кода. Парсер обрабатывает объявления @interface, @protocol и @category с полным наследованием и соответствием протоколам.
- Автоматический разбор и извлечение: анализатор читает все объявления и извлекает имена классов, суперклассы, принятые протоколы, методы (как экземпляра, так и класса), объявления свойств с атрибутами и типами, переменные экземпляра и опциональные против обязательных методов протокола. Цепочки наследования строятся автоматически.
- Изучайте и анализируйте результаты: просматривайте все объявления через фильтруемые вкладки (Все, Классы, Протоколы, Категории). Разворачивайте любой класс, чтобы увидеть полную поверхность API. Смотрите цепочки наследования, иерархии протоколов и сигнатуры методов с типами возврата и именами параметров. Копируйте отчёт анализа для документации.
Понимание типов объявлений Objective-C
- @interface (интерфейс класса): объявляет класс с его суперклассом (наследование через синтаксис двоеточия) и принятыми протоколами (в угловых скобках). Содержит переменные экземпляра в фигурных скобках, объявления @property для публичного API и объявления методов с типами возврата и параметрами.
- @protocol (определение протокола): объявляет формальный протокол, который могут принять классы. Методы, помеченные @required, должны быть реализованы соответствующими классами, тогда как методы @optional можно реализовывать выборочно. Протоколы также могут объявлять требования @property.
- @interface (категория): расширяет существующий класс дополнительными методами без создания подкласса. Записывается как @interface ClassName (CategoryName); категории могут добавлять методы и свойства к любому классу — включая классы фреймворков, исходный код которых у вас отсутствует.
- Объявления методов и свойств: методы экземпляра имеют префикс -, методы класса — +. Сигнатуры методов используют двоеточия для параметров с описательными метками. Свойства используют @property с атрибутами в скобках (nonatomic, strong, copy, readonly, assign, weak, getter, setter), за которыми следуют тип и имя.
Приватность, безопасность и примечания по использованию
Анализатор class-dump и протоколов iOS обрабатывает все данные исключительно в вашем браузере с помощью JavaScript. Никакой код заголовков Objective-C никогда не загружается на сервер, не сохраняется в базах данных и не передаётся третьим лицам. Нет ограничений на размер файла. Инструмент полностью бесплатный, без регистрации, без ограничений на использование и без премиум-уровня. Используйте его для любых целей — личных, коммерческих, образовательных или исследовательских — бесплатно. Анализатор создан для образовательных и исследовательских целей, чтобы помочь разработчикам понять структуру iOS-приложений и поведение runtime Objective-C.
Часто задаваемые вопросы
class-dump — это инструмент командной строки, который генерирует файлы заголовков Objective-C из бинарников Mach-O (исполняемые файлы .app для iOS/macOS, .dylib, пакеты .framework). Он работает, разбирая секции метаданных Objective-C, хранящиеся в сегменте __DATA бинарника: __objc_classlist, __objc_protolist, __objc_catlist и __objc_selrefs. Поскольку Objective-C — язык с динамическим runtime, все имена классов, методов, свойств и информация о соответствии протоколам хранятся в бинарнике в виде строк. class-dump читает эти метаданные и восстанавливает исходные объявления @interface, @protocol и @category вместе с их методами и свойствами.
Нет. Это анализатор на основе браузера, который разбирает текст заголовков Objective-C — он не запускает сам инструмент class-dump на скомпилированных бинарниках Mach-O. Чтобы воспользоваться этим инструментом, сначала нужно запустить class-dump (или похожий инструмент вроде Hopper, Ghidra или otool) на бинарнике iOS/macOS, чтобы получить вывод заголовков Objective-C, а затем вставить этот вывод в наш анализатор. Анализатор затем визуализирует и упорядочивает разобранные объявления в чистом, удобном для навигации интерфейсе.
Анализатор разбирает три основных типа объявлений. Блоки @interface ... @end для объявлений классов, включая наследование (: SuperClass) и соответствие протоколам (<Protocol1, Protocol2>), с переменными экземпляра, объявлениями @property и методами экземпляра/класса. Блоки @protocol ... @end для определений протоколов с секциями @required и @optional, объявлениями методов и требованиями @property. Блоки @interface ClassName (CategoryName) ... @end для категорий, расширяющих существующие классы.
Анализатор автоматически строит цепочки наследования, следуя объявлению суперкласса (: SuperClass) каждого @interface. Например, если у вас есть @interface MyViewController : UIViewController, @interface UIViewController : UIResponder и @interface UIResponder : NSObject, анализатор покажет: MyViewController → UIViewController → UIResponder → NSObject. Это позволяет легко понять полную иерархию классов.
Косвенно. Классы Swift, наследуемые от NSObject или использующие атрибут @objc, доступны runtime Objective-C и появятся в выводе class-dump с совместимыми с Objective-C сигнатурами. Однако чистые классы Swift без моста Objective-C не появятся в выводе class-dump. Наш анализатор рассчитан на синтаксис заголовков Objective-C. Для анализа чистого кода Swift используйте вместо этого наш инструмент «Деобфускатор Swift».
Для запуска class-dump нужен iOS-устройство с джейлбрейком или расшифрованный IPA. В macOS установите class-dump через Homebrew (brew install class-dump), затем выполните: class-dump -H /путь/к/ВашемуБинарнику -o /каталог/вывода/. Для бинарников iOS сначала нужно расшифровать бинарник из App Store с помощью инструмента вроде dumpdecrypted или Clutch. Сгенерированные .h-файлы затем можно вставить в наш анализатор для визуализации и навигации.
В протоколах Objective-C методы @required должны быть реализованы любым классом, принимающим протокол, тогда как методы @optional можно реализовывать выборочно. Директива @required является значением по умолчанию. При анализе вывода протокола анализатор разделяет обязательные и опциональные методы на отдельные секции, ясно показывая, какие методы обязательны для соответствия протоколу, а какие являются опциональными расширениями.
Да — 100 % бесплатно, без регистрации, без аккаунта и без ограничений на использование. Анализируйте столько заголовков Objective-C, сколько нужно, сколько угодно раз. Нет премиум-уровней, скрытых платежей и ограничений по частоте. Инструмент работает исключительно в вашем браузере — ваш код никогда не покидает устройство.