Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Submit
ToolsExploitsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

FeedsContactPrivacy© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
DFRoot — Android root tool for Samsung Galaxy S25 Ultra (SM-S938B) that chains DirtyFrag CVE-2026-43284 and CVE-2026-43499 to gain root automatically at boot via KernelSU. | Kitploit
Tools/GitHubGitHub/a2333c/dfroot
Android SecurityPrivilege EscalationPersistence MechanismsExploitationMobile App PentestingPost-ExploitationPenetration TestingMobile SecurityUtilities & FrameworksPayload Development
GitHub
314 days agoNot yet reviewed

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share
a2333c/dfroot

DFRoot

Android root tool for Samsung Galaxy S25 Ultra (SM-S938B) that chains DirtyFrag CVE-2026-43284 and CVE-2026-43499 to gain root automatically at boot via KernelSU.

View Repository

DFRoot — SM-S938B (Galaxy S25 Ultra) Port · Fast Channel + Manual

A fork of diabl0w/DFRoot, specifically ported for the Samsung Galaxy S25 Ultra (SM-S938B / pa3q), with the UI and runtime output entirely in Chinese.

Two chains, one interface:

MethodVulnerabilityCharacteristics
Fast ChannelDirtyFrag (CVE-2026-43284)The upstream DFRoot chain, seconds to tens of seconds
ManualCVE-2026-43499Probabilistic, three-tier ladder, up to a dozen-plus minutes

Default "Auto": run the fast channel first, and if it fails, automatically fall through to the manual method.

In one sentence: automatically gain root on boot. Each boot first tries the fast channel for a few seconds; if that fails, it automatically falls through to the manual chain, retrying in three tiers following "fast → steady → patient".

After gaining root, it also automatically runs two cmd connectivity commands (to remove ads from Samsung's "Package Installer"), with the commands, output, and exit codes all printed to the UI log — see Section 5, "Installer Ad Settings". Starting with v1.8, these two commands are written as a KernelSU boot script, so from then on KernelSU itself executes them as root on every boot, without opening the app or any authorization prompt.

What Changed in v1.9

  • Fixed Cannot run program "su": error=2, No such file or directory: In v1.8, to avoid an extra reboot, the --soft-reboot passed to ksud was removed; however, KernelSU's su is precisely what the kernel module mounts to /system/bin/su only during the post-fs-data stage, and ksud's late-load only runs the stages late-load / post-mount / service / boot-completed (KernelSU source userspace/ksud/src/late_load.rs) — without rebooting the framework, this mount point will never appear during the current boot, and su -c … in the app will inevitably fail with error=2. These two problems share the same root cause;
  • Added a third root channel: the app's bundled ksud (KsudChannel) — the APK now carries an extra copy of ksud (libksud.so, placed in jniLibs/arm64-v8a/, installed into nativeLibraryDir, which the App can directly execve), using libksud.so debug su to open a root shell and writing commands to its stdin. Privilege escalation goes through the kernel's ioctl(KSU_IOCTL_GRANT_ROOT), without depending on /system/bin/su, without an authorization prompt, and without rebooting the system framework;
  • Channel order: helper (right after the manual method finishes) → ksud → su. The log first prints a self-check line * root channel: helper=…, ksud=available, su=…, so it's obvious at a glance where it's stuck;
  • Supplemental settings changed to 4 × 15 seconds (about 45 seconds): ksud is only brought up at the moment the fast channel just returns success, so missing the first few times is normal, and it now retries automatically;
  • Before running su, /data/adb/ksu/bin, /debug_ramdisk, /data/adb/magisk, /data/adb/ap/bin are added to PATH, and SU_PATHS is expanded to 8 entries (some KernelSU variants only place su in these directories).

What Changed in v1.8

  • No extra reboot after boot: --soft-reboot is no longer passed to ksud. Previously this parameter caused ksud to reboot the system framework once after installation — what the user saw was "it rebooted itself again after boot"; worse, this reboot would interrupt the app process along with the "Installer Ad Settings" it was running;
  • Installer Ad Settings changed to a KernelSU boot script: no longer relying on the app using su to run it at boot time (at that point KernelSU isn't ready yet, and on real devices it failed on every boot, requiring manually opening KernelSU and then the app). Now the same two commands are written into /data/adb/service.d/dfroot-ads.sh, and KernelSU executes it as root on every boot — without going through the app, without going through su, and without any authorization prompt;
  • Automatic retry if the first attempt at boot fails: delegated to a foreground service that tries once every 30 seconds over the next 5 minutes, stopping as soon as one succeeds (and that successful attempt also installs the boot script);
  • An extra line "Boot script: …" in the UI, directly showing the result of the last script execution.

What Changed in v1.7

  • The "Slow" method was renamed to "Manual", with the description updated accordingly: try manually if Auto doesn't succeed;
  • Added "Installer Ad Settings": after gaining root, automatically runs those two cmd connectivity commands, with the commands, output, and exit codes all printed to the UI log (a successful execution always produces output);
  • Checked on every boot and every time the App is opened, supplementing once if it hasn't succeeded;
  • Other behavior unchanged (fast channel + manual method + auto on boot).

1. What Each of the Two Chains Is

Fast Channel: DirtyFrag (CVE-2026-43284)

The chain that upstream DFRoot ships with, with all code in app/src/main/jni/ (exp.c + two shellcode segments + the kernel module in dirtyfrag-lkm/), compiled into libexp.so and called directly by the App:

  1. Use AES-CBC ESP in-place decryption + splice() to modify the page cache of read-only files;
  2. Write the kernel module into /vendor/lib64/libstagefrighthw.so and then finit_module to load it, setting SELinux to permissive;
  3. Hook libc.so / libc++.so, use the modprobe domain to launch the bundled ksud, and late-load KernelSU.

Fast (seconds), at the cost of leaving a "already armed this round" trace in /dev/df, and its ksud installation path differs from the manual chain's (see Section 7).

Manual: CVE-2026-43499

All three binaries are precompiled (byte-for-byte unmodified):

FileLocationPurpose
libcve43499root.sojniLibs/arm64-v8a/helper, executable ELF, directly execve'd by the App, no Shizuku needed
cve-2026-43499-app.soassets/payloads/payload, dlopen'd by the helper and then executes the exploit
ksud-s25u-kdpassets/payloads/KernelSU itself (ksud + embedded kernelsu.ko)
1. helper --run-payload <payload> <helper> <log>   gain root (probabilistic)
2. helper -c "cp ksud …"                           drop ksud into /data/local/tmp
3. helper --late-load                              bind mount /system/bin/logcat,
                                                   then exec "logcat late-load …" to install KernelSU

Success criteria: both exploit completed and done=1 root=1 appear in the log.

The "Manual" method in the UI runs exactly this (the "Auto" method also falls through to it when the fast channel fails).


2. How Auto Mode Chains Things (v1.5 added chaining, v1.6 fixed auto-on-boot, v1.7 added installer ad settings, v1.8 fixed boot reboot and ad settings, v1.9 fixed "su not found")

Manual button press (in the UI)
   └─ Runs in the current process: "Auto" method = fast channel → manual; "Manual" method = manual directly
Download Tool