Анализатор нативных библиотек Android (.so)
Анализируйте .so-файлы Android онлайн и бесплатно. Наш анализатор нативных библиотек разбирает заголовки ELF, таблицы символов, функции JNI, импорт, экспорт и заголовки секций. Быстро, безопасно и без регистрации.
Upload an Android .so File to Begin
Upload any Android native library (.so file) to analyze its ELF structure, symbol tables, JNI functions, imports and exports, section headers, and detect symbol stripping. All processing is completely local in your browser.
Почему стоит использовать наш анализатор нативных библиотек Android (.so)?
- Полный разбор заголовка ELF: анализатор нативных библиотек разбирает всю структуру заголовка ELF: магию идентификации, класс (32/64 бита), кодировку данных (порядок байтов), ОС/ABI (Linux, Android, System V), тип машины (ARM, AArch64, x86, x86-64), тип файла, адрес точки входа и расположение таблиц заголовков программы и секций. Все поля декодируются в читаемые подписи, а шестнадцатеричные значения показываются рядом.
- Комплексный анализ таблицы символов: извлекайте и просматривайте все символы из таблиц .symtab и .dynsym с их именами, типами (FUNC, OBJECT, NOTYPE), привязками (LOCAL, GLOBAL, WEAK), видимостью (DEFAULT, HIDDEN, PROTECTED), адресами, размерами и связанными секциями. Фильтруйте по экспорту, импорту, функциям JNI или всем символам в интерфейсе с поиском.
- Определение и анализ функций JNI: автоматически определяйте функции JNI (Java Native Interface) по соглашению об именовании Java_. Каждая функция JNI выделяется специальным значком с полным JNI-именем. Анализатор извлекает компоненты пакета, класса и метода из каждого имени Java_, что упрощает работу при обратной разработке.
- Анализ удаления символов и безопасности: определяйте, были ли из .so-файла удалены имена символов - распространённый приём обфускации как в легальных релизных сборках, так и во вредоносном ПО. Анализатор также выявляет ключевые механизмы защиты: заголовки программы GNU_RELRO (релокация только для чтения), секции GOT/PLT, локальное хранилище потока, таблицы обработки исключений и конструкторы .init_array.
Типичные сценарии использования анализатора нативных библиотек Android
- Анализ вредоносного ПО и шпионских программ Android: исследователи разбирают .so-файлы из подозрительных APK, чтобы обнаружить вредоносный нативный код. Вредоносное ПО часто использует нативные библиотеки для запуска полезной нагрузки, антианализа и повышения привилегий. Анализатор нативных библиотек показывает функции JNI с подозрительными именами, обфусцированные таблицы символов и импортированные системные функции, указывающие на вредоносное поведение.
- Аудит безопасности приложений и пентест: аудиторы проверяют нативные библиотеки, чтобы убедиться, что релизные сборки корректно stripped, отладочные символы удалены, а имена чувствительных функций не раскрыты. Анализатор помогает выявить оставшиеся символы разработчика, функции JNI, раскрывающие логику серверного API, и импортированные функции, которые можно использовать для повреждения памяти.
- Проверка сторонних SDK: анализируйте нативные компоненты сторонних Android SDK перед интеграцией. Анализатор показывает, какие системные функции импортирует SDK, какие JNI-колбэки регистрирует и есть ли неожиданные экспорты. Это критично для SDK, работающих с чувствительными данными: рекламными идентификаторами, отпечатками устройств или аналитикой.
- Разработка и отладка с NDK: разработчики Android NDK используют анализатор, чтобы проверить, что их скомпилированные .so-файлы имеют правильную архитектуру (arm64-v8a, armeabi-v7a, x86_64), нужные экспорты функций JNI и ожидаемую видимость символов. Это помогает отлаживать проблемы компоновки, отсутствующие экспорты и случайное раскрытие символов до релиза.
- Исследование уязвимостей и разработка эксплойтов: исследователи изучают .so-файлы на предмет информации о версии, определяют конкретные сборки библиотек и анализируют импортированные функции, чтобы понять поверхность атаки. Анализ заголовков секций выявляет записываемые и исполняемые сегменты, отсутствие защиты RELRO и другие уязвимости повреждения памяти.
- Изучение формата ELF: студенты, изучающие спецификацию ELF (Executable and Linkable Format), могут увидеть реально разобранный ELF-файл со всеми заголовками, секциями и символами. Анализатор сопоставляет каждое поле структуры ELF с его определением в спецификации, что делает его отличным учебным инструментом для понимания работы разделяемых библиотек в Linux и Android.
Что такое .so-файл Android?
.so-файл (Shared Object) - это аналог динамической библиотеки Linux в Android. Приложения Android используют нативные библиотеки на C или C++ через Android NDK (Native Development Kit) для критичного по производительности кода, игровых движков, криптографии, обработки сигналов и сторонних SDK. Эти библиотеки следуют спецификации ELF (Executable and Linkable Format) - тому же формату, что и исполняемые файлы и разделяемые библиотеки Linux. Каждый .so-файл содержит машинный код, скомпилированный под конкретную архитектуру процессора - ARM, ARM64, x86 или x86-64, - и загружается в процесс приложения во время выполнения через System.loadLibrary(). Анализатор нативных библиотек разбирает эту структуру ELF, показывая заголовки, секции, символы и функции JNI.
Как работает анализатор нативных библиотек Android
- Загрузите .so-файл: выберите любую нативную библиотеку Android для анализа. Анализатор читает необработанные двоичные данные ELF прямо в вашем браузере без отправки на сервер - вся обработка локальна.
- Разбор ELF: инструмент читает магию идентификации ELF (\x7fELF), определяет класс (32 или 64 бита) и порядок байтов, а затем разбирает весь заголовок ELF, включая заголовки программы (сегменты) и заголовки секций. Он следует таблице строк заголовков секций, чтобы разрешить имена вроде .text, .data, .bss, .dynsym и .init_array.
- Извлечение и анализ символов: анализатор разбирает как секцию .symtab (таблица символов), так и .dynsym (таблица динамических символов), разрешая имена символов через соответствующие таблицы строк (.strtab и .dynstr). Каждый символ классифицируется по типу, привязке и видимости. Функции JNI (с префиксом Java_) определяются и помечаются автоматически, а библиотека проверяется на удаление символов.
Ключевые структуры ELF, которые вы увидите
- Заголовок ELF: заголовок размером 52-64 байта в начале каждого .so-файла, содержащий магическое число, класс (32/64 бита), порядок байтов, ОС/ABI, тип машины (ARM, AArch64, x86) и указатели на таблицы заголовков программы и секций.
- Заголовки программы: описывают сегменты, загружаемые в память во время выполнения. Сегменты LOAD отображаются в адресное пространство процесса. DYNAMIC содержит информацию о динамической компоновке. GNU_RELRO делает данные релокации доступными только для чтения после загрузки. INTERP указывает путь к динамическому линкеру/загрузчику.
- Заголовки секций: описывают расположение файла на этапе компоновки, включая .text (исполняемый код), .data (инициализированные данные), .bss (неинициализированные данные), .dynsym/.dynstr (динамические символы), .init_array/.fini_array (функции-конструкторы/деструкторы), .got/.got.plt (глобальная таблица смещений), .plt (таблица компоновки процедур) и .ARM.exidx (индекс исключений ARM).
- Таблицы символов: содержат имена функций и переменных с их адресами, размерами, типами (FUNC, OBJECT, NOTYPE) и привязками (LOCAL, GLOBAL, WEAK). Динамические символы используются для компоновки во время выполнения, а обычные символы - для отладки и могут быть удалены в релизных сборках.
Приватность, безопасность и примечания по использованию
Анализатор нативных библиотек Android обрабатывает все файлы полностью в вашем браузере на JavaScript. Данные файлов никогда не загружаются на сервер, не сохраняются в базе данных и не передаются третьим лицам. Ограничений по размеру нет, кроме возможностей вашего браузера: файлы более 100 МБ могут обрабатываться дольше, но никогда не покинут ваше устройство. Весь разбор ELF, извлечение таблиц символов, определение JNI и анализ секций выполняются локально. Экспортируйте отчёты анализа в JSON, чтобы поделиться результатами с командой или сохранить их.
Часто задаваемые вопросы
.so-файл (Shared Object) - это нативная библиотека, которую приложения Android используют для критичного по производительности кода на C или C++. Анализ .so-файлов раскрывает структуру ELF, импортированные и экспортированные функции, методы JNI, вызываемые из Java/Kotlin, и потенциальные проблемы безопасности. Поскольку нативный код имеет прямой доступ к памяти, анализ .so-файлов критически важен для аудита безопасности и анализа вредоносного ПО.
Android поддерживает четыре основные архитектуры для нативных библиотек: arm64-v8a (64-битный ARM, большинство современных устройств), armeabi-v7a (32-битный ARM, старые устройства), x86_64 (64-битные эмуляторы Intel/AMD и некоторые планшеты) и x86 (32-битный x86, старые эмуляторы). Анализатор нативных библиотек Android автоматически определяет архитектуру по полю типа машины в заголовке ELF.
Функции JNI (Java Native Interface) - это функции C/C++, вызываемые из Java или Kotlin по соглашению об именовании Java_packagename_Class_method. Они связывают приложение Android с нативным кодом. Анализатор определяет все функции JNI по префиксу Java_, что позволяет легко увидеть полную поверхность нативного API любого .so-файла.
В stripped-библиотеке имена символов удалены из секции .symtab, но секция .dynsym сохранена для динамической компоновки во время выполнения. Это стандартно для релизных сборок, но усложняет обратную разработку. Анализатор определяет удаление символов по наличию именованных символов в таблице символов.
Безусловно. Весь разбор ELF, извлечение таблиц символов, определение JNI и анализ секций выполняются локально в вашем браузере на JavaScript. Ваши .so-файлы никогда не загружаются на сервер, не сохраняются в базе данных и не передаются по сети.
GOT (Global Offset Table) и PLT (Procedure Linkage Table) - это секции ELF, обеспечивающие динамическую компоновку во время выполнения. GOT содержит адреса глобальных переменных и функций, импортированных из других библиотек. PLT содержит заглушки, которые разрешают адреса функций при первом вызове (ленивое связывание).
GNU_RELRO (Relocation Read-Only) - это заголовок программы, который помечает данные релокации как доступные только для чтения после того, как динамический линкер их разрешил. Это не даёт атакующим перезаписать записи GOT, чтобы перехватить поток управления. Анализатор нативных библиотек проверяет наличие этой защиты.
Да, анализатор предлагает два варианта экспорта: «Копировать отчёт» формирует сводку в виде обычного текста с информацией о заголовке ELF, количестве символов, числе функций JNI и статусе удаления символов. «Экспорт JSON» создаёт структурированный JSON-файл со всеми разобранными данными для дальнейшего анализа.
Секция .init_array содержит указатели на функции-конструкторы, которые выполняются при загрузке библиотеки. Вредоносное ПО часто использует .init_array для процедур инициализации или расшифровки полезной нагрузки. Секция .fini_array содержит деструкторы, вызываемые при выгрузке библиотеки. Анализатор определяет наличие обеих секций.