
Ferramenta de root para Android para Samsung Galaxy S25 Ultra (SM-S938B) que encadeia DirtyFrag CVE-2026-43284 e CVE-2026-43499 para obter root automaticamente no boot via KernelSU.
Fork do diabl0w/DFRoot, adaptado especificamente para Samsung Galaxy S25 Ultra (SM-S938B / pa3q), com interface e saída de execução totalmente em chinês.
Duas cadeias, uma interface:
Solução Vulnerabilidade Característica Canal rápido DirtyFrag (CVE-2026-43284) A do DFRoot original, de segundos a dezenas de segundos Manual CVE-2026-43499 Probabilística, escada de três rodadas, no máximo cerca de dez minutos Padrão "Automático": executa primeiro o canal rápido, e se não funcionar, passa automaticamente para a solução manual.
Em uma frase: obtém root automaticamente na inicialização. A cada inicialização, tenta primeiro o canal rápido por alguns segundos; se não funcionar, passa automaticamente para a cadeia manual, repetindo três rodadas no esquema "rápido → estável → paciente".
Depois de obter root, também executa automaticamente dois comandos cmd connectivity (para remover os anúncios do "Instalador de pacotes" da Samsung), com comando, saída e código de saída registrados no log da interface — veja a seção 5, "Configuração de anúncios do instalador". A partir da v1.8, esses dois comandos são gravados como script de inicialização do KernelSU, e a cada inicialização o próprio KernelSU os executa como root, sem precisar abrir o aplicativo nem exibir pop-up de autorização.
Cannot run program "su": error=2, No such file or directory:
na v1.8, para não reiniciar mais uma vez, foi removido o --soft-reboot passado ao ksud; porém o su do KernelSU é montado em /system/bin/su pelo módulo do kernel somente na fase post-fs-data, e o late-load do ksud executa apenas as fases
late-load / post-mount / service / boot-completed (código-fonte do KernelSU
userspace/ksud/src/late_load.rs) — sem reiniciar o framework, esse ponto de montagem nunca aparece nesta inicialização, e o su -c … dentro do aplicativo sempre dará error=2. Esses dois problemas têm a mesma causa raiz;KsudChannel) — o APK traz uma cópia extra do ksud
(libksud.so, colocado em jniLibs/arm64-v8a/, instalado em nativeLibraryDir, e o App pode executá-lo diretamente via execve),
usando libksud.so debug su para abrir um shell root, com os comandos escritos no stdin dele. A elevação de privilégio usa o
ioctl(KSU_IOCTL_GRANT_ROOT) do kernel, sem depender de /system/bin/su, sem pop-up de autorização e sem reiniciar o framework do sistema;* root 通道:helper=…,ksud=可用,su=…, para que se veja de imediato onde travou;su, adiciona /data/adb/ksu/bin, /debug_ramdisk, /data/adb/magisk, /data/adb/ap/bin
ao PATH, e SU_PATHS também foi ampliado para 8 entradas (algumas variantes do KernelSU só colocam su nesses diretórios).--soft-reboot ao ksud. Antes, esse parâmetro fazia o ksud reiniciar o framework do sistema após a instalação — o que o usuário via era "o aparelho reiniciou sozinho depois de ligar"; pior ainda, esse reinício interrompia o processo do aplicativo junto com a "Configuração de anúncios do instalador" que ele estava executando;su no momento da inicialização
(nessa hora o KernelSU ainda não está pronto, e em aparelho real falhava a cada inicialização, sendo necessário abrir manualmente o KernelSU e depois o aplicativo
para funcionar). Agora os mesmos dois comandos são gravados em /data/adb/service.d/dfroot-ads.sh, e o KernelSU o executa como root a cada inicialização
— sem passar pelo aplicativo, sem passar pelo su, sem nenhum pop-up de autorização;cmd connectivity,
com comando, saída e código de saída todos registrados no log da interface (execução bem-sucedida sempre tem saída);A cadeia que já vem no DFRoot original, com todo o código em app/src/main/jni/ (exp.c + dois trechos de shellcode +
o módulo de kernel em dirtyfrag-lkm/), compilado como libexp.so e chamado diretamente pelo App:
splice() para alterar o page cache de arquivos somente leitura;/vendor/lib64/libstagefrighthw.so e o carrega com finit_module,
colocando o SELinux em permissive;libc.so / libc++.so, aproveita o domínio do modprobe para iniciar o ksud embutido,
e faz late-load do KernelSU.Rápido (segundos), ao custo de deixar vestígios de "já armado nesta rodada" em /dev/df,
e o caminho de instalação do ksud dele é diferente do da cadeia manual (veja a seção 7).
Os três binários são pré-compilados (byte a byte inalterados):
| Arquivo | Local | Função |
|---|---|---|
libcve43499root.so | jniLibs/arm64-v8a/ | helper, ELF executável, o App o executa diretamente via execve, não precisa de Shizuku |
cve-2026-43499-app.so | assets/payloads/ | payload, carregado pelo helper via dlopen para executar a vulnerabilidade |
ksud-s25u-kdp | assets/payloads/ | O próprio KernelSU (ksud + kernelsu.ko embutido) |
1. helper --run-payload <payload> <helper> <log> obtém root (probabilístico)
2. helper -c "cp ksud …" coloca o ksud em /data/local/tmp
3. helper --late-load bind mount /system/bin/logcat,
e executa "logcat late-load …" para instalar o KernelSU
Critério de sucesso: aparecem simultaneamente no log exploit completed e done=1 root=1.
A solução "Manual" na interface executa exatamente isso (a solução "Automático" também a executa em seguida quando o canal rápido não funciona).
Clique manual no botão (na interface)
└─ Executa no processo atual: solução "Automático" = canal rápido → manual; solução "Manual" = manual direto