
Инструмент для получения root-прав на Android для Samsung Galaxy S25 Ultra (SM-S938B), который объединяет DirtyFrag CVE-2026-43284 и CVE-2026-43499 для автоматического получения root-прав при загрузке через KernelSU.
Форк diabl0w/DFRoot, специально адаптированный под Samsung Galaxy S25 Ultra (SM-S938B / pa3q), интерфейс и вывод полностью на китайском.
Две цепочки, один интерфейс:
Способ Уязвимость Особенности Быстрый канал DirtyFrag (CVE-2026-43284) Та самая цепочка из upstream DFRoot, от нескольких секунд до десятков секунд Ручной CVE-2026-43499 Вероятностный, три ступени, максимум до十几 минут По умолчанию «Авто»: сначала быстрый канал, если не сработал — автоматически переключается на ручной способ.
Одной фразой: автоматическое получение root при загрузке. При каждой загрузке сначала пробуется быстрый канал на несколько секунд; если не сработал — автоматически подключается ручная цепочка, с повторами по схеме «быстро → стабильно → терпеливо» в три раунда.
После получения root автоматически выполняются две команды cmd connectivity (для удаления рекламы из Samsung «Установщика пакетов»),
команды, вывод и коды возврата так же пишутся в лог интерфейса — см. раздел пятый «Настройка рекламы установщика».
Начиная с v1.8 эти две команды записываются как загрузочный скрипт KernelSU, и при каждой загрузке KernelSU сам выполняет их от имени root,
без необходимости открывать приложение и без диалогов авторизации.
Cannot run program "su": error=2, No such file or directory:
в v1.8, чтобы избежать дополнительной перезагрузки, был убран параметр --soft-reboot для ksud; однако su в KernelSU
монтируется ядром в /system/bin/su именно на этапе post-fs-data, а late-load в ksud выполняет только
этапы late-load / post-mount / service / boot-completed (исходники KernelSU
userspace/ksud/src/late_load.rs) — без перезапуска фреймворка эта точка монтирования в текущей загрузке вообще не появится,
и su -c … в приложении гарантированно даст error=2. Обе проблемы имеют одну корневую причину;KsudChannel) — в APK добавлена копия ksud
(libksud.so, размещён в jniLibs/arm64-v8a/, устанавливается в nativeLibraryDir, приложение может напрямую execve),
через libksud.so debug su открывается root shell, команды пишутся в его stdin. Повышение привилегий идёт через ядерный
ioctl(KSU_IOCTL_GRANT_ROOT), не зависит от /system/bin/su, не требует диалогов авторизации и не требует перезапуска системного фреймворка;* root 通道:helper=…,ksud=可用,su=…, сразу видно, где застряло;su в PATH добавляются /data/adb/ksu/bin, /debug_ramdisk, /data/adb/magisk, /data/adb/ap/bin,
а SU_PATHS расширен до 8 путей (в некоторых вариантах KernelSU su находится только в этих каталогах).--soft-reboot. Раньше этот параметр заставлял ksud после установки
перезапустить системный фреймворк — пользователь видел «после загрузки система сама перезагрузилась ещё раз»; хуже того, эта перезагрузка
прерывала процесс приложения вместе с выполняемой им «настройкой рекламы установщика»;su
(в тот момент KernelSU ещё не готов, на реальных устройствах это каждый раз терпело неудачу при загрузке, приходилось вручную открывать KernelSU, а затем приложение).
Теперь те же две команды записываются в /data/adb/service.d/dfroot-ads.sh, и KernelSU при каждой загрузке
выполняет его от имени root — без участия приложения, без su, без каких-либо диалогов авторизации;cmd connectivity,
команды, вывод и коды возврата полностью пишутся в лог интерфейса (при успешном выполнении вывод обязательно будет);Та самая цепочка, встроенная в upstream DFRoot, весь код в app/src/main/jni/ (exp.c + два фрагмента shellcode +
модуль ядра в dirtyfrag-lkm/), компилируется в libexp.so и вызывается приложением напрямую:
splice() для изменения page cache файла только для чтения;/vendor/lib64/libstagefrighthw.so и загрузка через finit_module,
перевод SELinux в permissive;libc.so / libc++.so, запуск встроенного ksud через домен modprobe,
late-load KernelSU.Быстро (несколько секунд), ценой является то, что он оставляет в /dev/df след «в этом раунде уже развёрнуто»,
и путь установки его ksud отличается от ручного (см. раздел седьмой).
Все три бинарника предварительно скомпилированы (побайтово не изменены):
| Файл | Расположение | Назначение |
|---|---|---|
libcve43499root.so | jniLibs/arm64-v8a/ | helper, исполняемый ELF, приложение напрямую execve, Shizuku не нужен |
cve-2026-43499-app.so | assets/payloads/ | payload, загружается helper через dlopen и выполняет уязвимость |
ksud-s25u-kdp | assets/payloads/ | Сам KernelSU (ksud + встроенный kernelsu.ko) |
1. helper --run-payload <payload> <helper> <log> получить root (вероятностный)
2. helper -c "cp ksud …" поместить ksud в /data/local/tmp
3. helper --late-load bind mount /system/bin/logcat,
затем exec "logcat late-load …" для установки KernelSU
Критерий успеха: в логе одновременно появляются exploit completed и done=1 root=1.
Способ «Ручной» в интерфейсе запускает именно эту цепочку (способ «Авто» при неудаче быстрого канала также запускает её следом).
Ручное нажатие кнопки (в интерфейсе)
└─ Выполняется в текущем процессе: способ «Авто» = быстрый канал → ручной; способ «Ручной» = сразу ручной