
Инструмент автоматической обфускации для Android-приложений, работающий по принципу «чёрного ящика», поддерживающий продвинутые функции обфускации и имеющий модульную архитектуру, легко расширяемую новыми методами.
[!IMPORTANT] Этот проект архивирован и больше не поддерживается.
Ответы на некоторые наиболее частые вопросы можно найти в FAQ и разделе по устранению неполадок.

Инструмент обфускации Android-приложений методом «чёрного ящика».
Obfuscapk — это модульный инструмент на Python для обфускации Android-приложений без необходимости
исходного кода, поскольку apktool используется
для декомпиляции исходного apk-файла и сборки нового приложения после применения некоторых
методов обфускации к декомпилированному коду smali, ресурсам и манифесту. Обфусцированное
приложение сохраняет ту же функциональность, что и исходное, но различия
под капотом иногда делают новое приложение очень отличным от исходного
(например, для антивирусного ПО, основанного на сигнатурах).
Obfuscapk добавляет поддержку
Android App Bundle (файлов aab) с помощью
BundleDecompiler (см.
#121). Чтобы воспользоваться этой новой
функцией, загрузите последнюю версию BundleDecompiler, доступную
здесь,
сохраните её как BundleDecompiler.jar в каталоге, включённом в PATH (например, в Ubuntu
/usr/local/bin или /usr/bin) и убедитесь, что у файла установлен флаг исполняемого.
[!IMPORTANT] BundleDecompiler пока не работает в Windows, поэтому обфускация app bundle не поддерживается Obfuscapk на платформе Windows. Кроме того, поддержка app bundle всё ещё находится на ранней стадии разработки, поэтому если вы столкнулись с какими-либо проблемами или хотите помочь нам улучшить, пожалуйста, ознакомьтесь с разделом участия в разработке.
Более подробная информация об Obfuscapk содержится в статье "Obfuscapk: An open-source black-box obfuscation tool for Android apps". Вы можете процитировать статью следующим образом:```BibTeX @article{aonzo2020obfuscapk, title = "Obfuscapk: An open-source black-box obfuscation tool for Android apps", journal = "SoftwareX", volume = "11", pages = "100403", year = "2020", issn = "2352-7110", doi = "https://doi.org/10.1016/j.softx.2020.100403", url = "https://www.sciencedirect.com/science/article/pii/S2352711019302791", author = "Simone Aonzo and Gabriel Claudiu Georgiu and Luca Verderame and Alessio Merlo", keywords = "Android, Obfuscation, Program analysis" }
## ❱ Демо

## ❱ Архитектура

Obfuscapk спроектирован так, чтобы быть модульным и легко расширяемым, поэтому он построен на
[системе плагинов](https://github.com/tibonihoo/yapsy). Следовательно, каждый обфускатор —
это плагин, наследующий от абстрактного
[базового класса](https://github.com/ClaudiuGeorgiu/Obfuscapk/blob/master/src/obfuscapk/obfuscator_category.py)
и должен реализовывать метод `obfuscate`. Когда инструмент начинает обработку нового
файла приложения Android, он создаёт
[объект обфускации](https://github.com/ClaudiuGeorgiu/Obfuscapk/blob/master/src/obfuscapk/obfuscation.py)
для хранения всей необходимой информации (например, местоположения декомпилированного кода `smali`)
и внутреннего состояния операций (например, списка уже использованных обфускаторов).
Затем объект обфускации передаётся в качестве параметра в метод `obfuscate` всем
активным плагинам/обфускаторам (последовательно) для обработки и модификации. Список и
порядок активных плагинов задаётся через [параметры командной строки](#-использование).
Инструмент легко расширяется новыми обфускаторами: достаточно добавить исходный код,
реализующий технику обфускации, и метаданные плагина (файл
`<имя-обфускатора>.obfuscator`) в каталог
[`src/obfuscapk/obfuscators`](https://github.com/ClaudiuGeorgiu/Obfuscapk/tree/master/src/obfuscapk/obfuscators)
(в качестве начального примера возьмите простой существующий обфускатор, например
[`Nop`](https://github.com/ClaudiuGeorgiu/Obfuscapk/blob/master/src/obfuscapk/obfuscators/nop/nop.py)).
Инструмент автоматически обнаружит новый плагин, поэтому никакой дополнительной
настройки не требуется (новый плагин будет обрабатываться так же, как и все остальные
плагины, включённые в инструмент).
## ❱ Установка
Есть два способа получить рабочую копию Obfuscapk на своём компьютере: либо
[с помощью Docker](#docker-образ), либо [непосредственно из исходного кода](#из-исходников)
в среде `Python 3`. В обоих случаях первым делом нужно получить локальную
копию этого репозитория. Откройте терминал в каталоге, где хотите сохранить
проект, и склонируйте репозиторий:```Shell
$ git clone https://github.com/ClaudiuGeorgiu/Obfuscapk.git
Это рекомендуемый способ установки Obfuscapk, поскольку единственное требование — наличие установленной последней версии Docker:```Shell $ docker --version Docker version 20.10.21, build baeda1f
#### Официальный образ Docker Hub
[официальный образ Docker Obfuscapk](https://hub.docker.com/r/claudiugeorgiu/obfuscapk)
доступен на Docker Hub (автоматически собирается из этого репозитория):```Shell
$ # Download the Docker image.
$ docker pull claudiugeorgiu/obfuscapk
$ # Give it a shorter name.
$ docker tag claudiugeorgiu/obfuscapk obfuscapk
Если вы загрузили официальный образ из Docker Hub, то инструмент готов к использованию, поэтому переходите к инструкциям по использованию. В противном случае выполните следующую команду в ранее созданной директории Obfuscapk/src/ (папка, содержащая Dockerfile) для сборки Docker-образа:```Shell
$ # Make sure to run the command in Obfuscapk/src/ directory.
$ # It will take some time to download and install all the dependencies.
$ docker build -t obfuscapk .
Когда образ Docker готов, выполните быстрый тест, чтобы убедиться, что всё установлено правильно:```Shell
$ docker run --rm -it obfuscapk --help
usage: python3 -m obfuscapk.cli [-h] -o OBFUSCATOR [-w DIR] [-d OUT_APK_OR_AAB]
...
Obfuscapk теперь готов к использованию, см. инструкции по использованию для получения дополнительной информации.