TGViewer
Чашечка Java Чашечка Java @a_cup_of_java · 8.39K subscribers
Post #7984 1.22K
Запуск бинарных файлов из data/data на Android 10+ (Обход SELinux)

Всем привет! Как многие знают, с Android 10 (Target sdk 29) google ввели новую политику безопасности. Новая политика SELinux звучит просто: "Нельзя исполнять файлы из той директории, в которую можно записывать". Всё это очень хорошо, но многие проекты сломались (В том числе и мой). Termux из google play УМЕЕТ запускать бинарные файлы на target sdk 29+. Я решил поделится как выполнить бинарный файл из data/data/com.ваш.пакет/files на новых версиях sdk БЕЗ полного клонирования Termux и БЕЗ С/C++ части. Сам метод запуска будет именно на java. Репозиторий termux, откуда был взят способ: https://github.com/termux-play-store/termux-apps

В чём суть, любой бинарный файла который вы запускаете имеет свой контекст. Если вы запускаете через нативную директорию (data/app/и так далее) перед этим положив бинарные файлы в jniLins - контекст у такого бинарного файла будет правильным и SELinux даст разрешение на запуск (Granted), но в случае с data/data другой случай, оттуда SELinux УЖЕ ОТКАЖЕТСЯ запускать бинарный файл (Denied). Разрешил SELinux запуск или отклонил можно смотреть в logcat. Однако, в системе существует системная утилита которая может запустить бинарник, а самое главное - SELinux РАЗРЕШИТ ей запустится, так как она системная. Её имя - linker или linker64 (Зависит от разрядности, 32 бита или 64)

Запустив линкер и передав ему наш бинарный файл из data/data - SELinux разрешит ему выполнится и сразу разрешит исполнение нашего бинарного файла. Тут сразу возникает вопрос, а если бинарный файл попробует подключить so библиотеку? Ей будет отказано? Здесь тоже есть решение, существует termux-exec. Это бинарный файл, который перехватывает попытку подключения чего либо и выполняет трюк с линкером. (linker или linker64 определяет автоматически). Вы можете собрать его из исходников (https://github.com/termux-play-store/termux-exec), но лично я полностью скопировал среду (Где этот уже собранный файл идёт в usr/lib) termux, так как мне нужно было запускать OpenJDK 17 под termux.


Читать: https://habr.com/ru/articles/943188/?utm_campaign=943188

@a_cup_of_java | Другие наши каналы
More from @a_cup_of_java
  1. Sep 24, 2026Value-классы в JDK 28: где JVM убирает аллокации, а где возвращает их JEP 401 вошёл в JDK…
  2. Sep 23, 2026Как показать вызовы инструментов в интерфейсе на Spring AI 2.0 Spring AI 2.0 вынес цикл вы…
  3. Sep 23, 2026Quarkus 3.29: что изменилось в тестах CDI-компонентов QuarkusComponentTest запускает не вс…
  4. Sep 23, 2026Как Spring AI 2.0 исправляет структурированный вывод по JSON Schema Обычный entity(TalkSub…
  5. Sep 22, 2026Как профилировать Java-приложения с JDK Flight Recorder JDK Flight Recorder (JFR) встроен…
  6. Sep 22, 2026Quarkus 3.31.2: как измерить покрытие runtime-модулей расширений До версии 3.31.2 расширен…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →