TGViewer
Мобильная разработка Мобильная разработка @mobi_dev · 13.2K subscribers
Post #3817 2.1K
Запуск бинарных файлов из 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/

@a_cup_of_java | Другие наши каналы
  • ❤ 7
More from @mobi_dev
  1. Oct 1, 2026Как адаптировать модальные экраны SwiftUI к сгибу iPhone Duo На iPhone Duo модальный экран…
  2. Oct 1, 2026Как проверять другую ветку в Android Studio через Git worktree Git worktree создаёт для ве…
  3. Oct 1, 2026Как заставить VoiceOver озвучивать карточку SwiftUI целиком Составную карточку с иконкой,…
  4. Sep 30, 2026Liquid Glass в SwiftUI: как выбрать regular или clear на iOS 26 Модификатор glassEffect()…
  5. Sep 30, 2026Как проверить Auto Layout в iOS 26 на iPhone 17 и Air У iPhone 17 и 17 Pro логическая обла…
  6. Sep 30, 2026Как подключать новые API SwiftUI без повышения минимальной версии iOS Если приложению нуже…
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 →