
Декомпилирует APK/XAPK/JAR/AAR файлы Android и извлекает HTTP API, шаблоны аутентификации и потоки вызовов с использованием jadx, с устойчивым к R8 восстановлением имен Kotlin для исследований безопасности и тестирования на проникновение.
Навык Claude Code, который декомпилирует файлы Android APK/XAPK/JAR/AAR и извлекает HTTP API, используемые приложением — эндпоинты Retrofit, вызовы OkHttp, жёстко закодированные URL, шаблоны аутентификации — чтобы вы могли документировать и воспроизводить их без исходного кода.
Полноценная поддержка Kotlin: современные Android-приложения написаны на Kotlin/KMP и сильно обфусцированы с помощью R8. Этот навык восстанавливает оригинальные имена классов Kotlin из метаданных, которые R8 не может удалить, и извлекает API из Ktor, Apollo (GraphQL) и Koin — не только из классического стека Retrofit/OkHttp. См. Восстановление имён Kotlin ниже.
Поддержка Windows / PowerShell (экспериментальная): скрипты
*.ps1наряду с bash-скриптами — это недавний вклад сообщества, который всё ещё стабилизируется. По любым вопросам, пожалуйста, открывайте issue в этом репозитории (а не в upstream-форках контрибьюторов): PowerShell-скрипты поддерживаются здесь @SimoneAvogadro.
| Возможность | Описание |
|---|---|
| Сначала фингерпринт (Фаза 0) | Быстрая сортировка APK/XAPK за секунды — определение фреймворка (Flutter / React Native / Cordova / Xamarin / native-Kotlin), HTTP-стека, уровня обфускации и нативных библиотек до траты времени на полную декомпиляцию |
| Декомпиляция | Файлы APK, XAPK, JAR и AAR с помощью jadx и Fernflower/Vineflower (один движок или сравнение бок о бок) |
| Восстановление имён Kotlin | Восстановление оригинальных имён классов *Repository / *ViewModel / *UseCase из обфусцированных R8 бинарников с использованием метаданных Kotlin, которые R8 не может удалить |
| Извлечение API | Retrofit, OkHttp, Volley и современные стеки Kotlin/KMP: Ktor, Apollo (GraphQL), Koin DI — эндпоинты, жёстко закодированные URL, заголовки аутентификации, токены и схемы подписи запросов HMAC |
| Трассировка потоков вызовов | От Activities/Fragments через ViewModels и репозитории вплоть до HTTP-вызовов |
| Анализ структуры | Манифест, пакеты, архитектурные паттерны |
| Работа с обфускацией | Устойчивое к R8 извлечение путей/URL плюс стратегии навигации по выводу ProGuard/R8 |
Обязательные:
Опциональные (рекомендуемые):
Подробные инструкции по установке см. в plugins/android-reverse-engineering/skills/android-reverse-engineering/references/setup-guide.md.
Внутри Claude Code выполните:
/plugin marketplace add SimoneAvogadro/android-reverse-engineering-skill
/plugin install android-reverse-engineering@android-reverse-engineering-skill
Навык будет постоянно доступен во всех будущих сессиях.
git clone https://github.com/SimoneAvogadro/android-reverse-engineering-skill.git
Затем в Claude Code:
/plugin marketplace add /path/to/android-reverse-engineering-skill
/plugin install android-reverse-engineering@android-reverse-engineering-skill
/decompile path/to/app.apk
Это запускает полный рабочий процесс: проверку зависимостей, декомпиляцию и первоначальный анализ структуры.
Навык активируется на фразах вроде:
Скрипты также можно использовать автономно:
# Check dependencies
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/check-deps.sh
# Install a missing dependency (auto-detects OS and package manager)
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/install-dep.sh jadx
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/install-dep.sh vineflower
# Fingerprint an APK/XAPK BEFORE decompiling (Phase 0 triage):
# framework, HTTP stack, obfuscation level, native libs, notable SDKs
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/fingerprint.sh app.apk
# Decompile APK with jadx (default)
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/decompile.sh app.apk
# Decompile XAPK (auto-extracts and decompiles each APK inside)
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/decompile.sh app-bundle.xapk
# Decompile with Fernflower
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/decompile.sh --engine fernflower library.jar
# Run both engines and compare
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/decompile.sh --engine both --deobf app.apk
# Find API calls — defaults to a full scan across every supported stack
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/find-api-calls.sh output/sources/
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/find-api-calls.sh output/sources/ --retrofit
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/find-api-calls.sh output/sources/ --urls
# Modern Kotlin/KMP stacks and obfuscation-resistant extraction
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/find-api-calls.sh output/sources/ --ktor # Ktor client
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/find-api-calls.sh output/sources/ --apollo # Apollo / GraphQL
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/find-api-calls.sh output/sources/ --paths # quoted path literals that survive R8 inlining
Большинство реальных приложений на Kotlin/KMP проходят через R8, поэтому декомпилированные классы
выглядят как a.b.c. R8 переименовывает символы JVM, но не может удалить строки
метаданных Kotlin — среде выполнения Kotlin (рефлексия, корутины) нужны
оригинальные полные имена во время выполнения. Этот навык извлекает такие
аннотации @DebugMetadata / @Metadata, чтобы восстановить карту
обфусцированное → реальное имя класса. На типичном приложении он восстанавливает ~100 %
классов *Repository / *ViewModel / *UseCase / *Impl, которые вы действительно хотите
прочитать.
# 1. Build the mapping from the decompiled sources
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/recover-kotlin-names.sh output/sources/ output/names/
# → output/names/mapping.tsv, mapping.json, by_package/