Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

フィードお問い合わせプライバシー© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
DFRoot — Samsung Galaxy S25 Ultra (SM-S938B) 向けの Android root ツール。DirtyFrag CVE-2026-43284 と CVE-2026-43499 を連鎖させ、KernelSU 経由で起動時に自動的に root を取得します。 | Kitploit
ツール/GitHubGitHub/a2333c/dfroot
Androidセキュリティ特権昇格永続化メカニズムエクスプロイトモバイルアプリペンテストポストエクスプロイトペネトレーションテストモバイルセキュリティユーティリティとフレームワークペイロード開発
GitHuba2333c/dfroot
314日前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

DFRoot

Samsung Galaxy S25 Ultra (SM-S938B) 向けの Android root ツール。DirtyFrag CVE-2026-43284 と CVE-2026-43499 を連鎖させ、KernelSU 経由で起動時に自動的に root を取得します。

リポジトリを見る

DFRoot —— SM-S938B(Galaxy S25 Ultra)適応版 · 高速チャネル + 手動

diabl0w/DFRoot の fork で、 Samsung Galaxy S25 Ultra(SM-S938B / pa3q) 専用に適応。 インターフェースと実行出力はすべて中国語。

2つの経路、1つのインターフェース:

方式脆弱性特徴
高速チャネルDirtyFrag(CVE-2026-43284)上流 DFRoot のもの、数秒から数十秒
手動CVE-2026-43499確率型、3段階ラダー、最長十数分

デフォルトは「自動」:まず高速チャネルを実行し、失敗したら自動的に手動方式へ。

一言で言えば:起動時に自動で root を取得。毎回の起動でまず数秒の高速チャネルを試し、 失敗したら自動的に手動経路へ切り替え、「高速 → 安定 → 根気」の3段階でリトライする。

root 取得後はさらに2つの cmd connectivity(Samsung「パッケージインストーラー」の広告を除去)を 自動実行し、コマンド・出力・終了コードはすべてインターフェースのログに表示される —— 第5節「インストーラー広告設定」を参照。 v1.8 以降、これら2つのコマンドは KernelSU の起動スクリプトとして書き込まれ、 以後の起動時には KernelSU 自身が root で実行するため、アプリを開く必要も認証ダイアログも不要。

v1.9 の変更点

  • Cannot run program "su": error=2, No such file or directory を修正: v1.8 では余分な再起動を避けるため ksud への --soft-reboot を削除したが、 KernelSU の su はまさにカーネルモジュールが post-fs-data 段階で /system/bin/su にマウントするものであり、ksud の late-load は late-load / post-mount / service / boot-completed の各段階しか実行しない(KernelSU ソース userspace/ksud/src/late_load.rs)—— フレームワークを再起動しなければ、 その起動サイクルではこのマウントポイントが永遠に現れず、アプリ内の su -c … は 必ず error=2 になる。この2つの問題は同じ根本原因;
  • 第3の root チャネルを追加:アプリ内蔵の ksud(KsudChannel)—— APK に ksud を もう1つ同梱(libksud.so、jniLibs/arm64-v8a/ に配置、nativeLibraryDir にインストールされ、 App が直接 execve 可能)。libksud.so debug su で root シェルを開き、コマンドをその stdin に書き込む。 権限昇格はカーネルの ioctl(KSU_IOCTL_GRANT_ROOT) を経由し、 /system/bin/su に依存せず、認証ダイアログも不要、システムフレームワークの再起動も不要;
  • チャネル順序:helper(手動方式がちょうど完了した時)→ ksud → su。ログにはまず自己診断の一行 * root 通道:helper=…,ksud=可用,su=… が出力され、どこで詰まっているか一目でわかる;
  • 設定の補完を4回 × 15秒に変更(約45秒):高速チャネルが成功を返した瞬間に ksud が 起動されるため、最初の数回が空振りするのは正常。現在は自動で再試行する;
  • su を実行する前に /data/adb/ksu/bin、/debug_ramdisk、/data/adb/magisk、/data/adb/ap/bin を PATH に追加し、SU_PATHS も8件に拡張(一部の KernelSU 派生版はこれらのディレクトリにしか su を置かない)。

v1.8 の変更点

  • 起動後に余分な再起動を行わない:ksud に --soft-reboot を渡さなくなった。以前このパラメータは ksud のインストール後にシステムフレームワークを再起動させていた —— ユーザーから見ると 「起動後にまた勝手に再起動した」という状態;さらに悪いことに、この再起動はアプリプロセスと それが実行中の「インストーラー広告設定」を一緒に中断してしまう;
  • インストーラー広告設定を KernelSU の起動スクリプトに変更:起動の瞬間にアプリが su で 実行する方式に依存しなくなった(その時点では KernelSU がまだ準備できておらず、実機では 毎回の起動で失敗し、手動で KernelSU を開いてからアプリを開く必要があった)。 現在は同じ2つのコマンドを /data/adb/service.d/dfroot-ads.sh に書き込み、KernelSU が 毎回の起動時に root で実行する —— アプリを経由せず、su を経由せず、認証ダイアログも不要;
  • 起動の瞬間に一度失敗したら自動リトライ:フォアグラウンドサービスに委ね、次の5分間 30秒ごとに試行し、一度成功したら終了(成功時に起動スクリプトもインストール);
  • インターフェースに「起動スクリプト:…」の行を追加し、前回のスクリプト実行結果を直接表示。

v1.7 の変更点

  • 方式の「低速」を「手動」に改名し、説明も変更:自動が失敗したら手動で試行;
  • 「インストーラー広告設定」を追加:root 取得後に2つの cmd connectivity を自動実行し、 コマンド・出力・終了コードをすべてインターフェースのログに表示(実行成功なら必ず出力がある);
  • 毎回の起動時、および App を開くたびにチェックし、成功していなければ補完;
  • その他の動作は変更なし(高速チャネル + 手動方式 + 起動時自動)。

一、2つの経路とは

高速チャネル:DirtyFrag(CVE-2026-43284)

上流 DFRoot に同梱されているもので、コードはすべて app/src/main/jni/(exp.c + 2つの shellcode + dirtyfrag-lkm/ 内のカーネルモジュール)にあり、libexp.so にコンパイルされて App から直接呼び出される:

  1. AES-CBC ESP によるインプレース復号 + splice() で読み取り専用ファイルの page cache を改ざん;
  2. カーネルモジュールを /vendor/lib64/libstagefrighthw.so に書き込んでから finit_module でロードし、 SELinux を permissive に設定;
  3. libc.so / libc++.so をフックし、modprobe のドメインを借りて同梱の ksud を起動し、 KernelSU を late-load。

高速(数秒)だが、代償として /dev/df に「今回すでに布陣済み」の痕跡を残し、 さらにその ksud のインストールパスは手動経路とは異なる(第7節参照)。

手動:CVE-2026-43499

3つのバイナリはすべてプリコンパイル済み(バイト単位で未変更):

ファイル場所役割
libcve43499root.sojniLibs/arm64-v8a/helper、実行可能 ELF、App が直接 execve、Shizuku 不要
cve-2026-43499-app.soassets/payloads/payload、helper が dlopen してから脆弱性を実行
ksud-s25u-kdpassets/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                              /system/bin/logcat を bind mount し、
                                                   次に exec "logcat late-load …" で KernelSU をインストール

成功判定:ログに exploit completed と done=1 root=1 が同時に出現すること。

インターフェースの「手動」方式が実行するのはこれ(「自動」方式は高速チャネルが失敗した場合に 続けてこれを実行する)。


二、自動モードの連携方法(v1.5 で経路追加、v1.6 で起動時自動を修正、v1.7 でインストーラー広告設定を追加、v1.8 で起動時再起動と広告設定を修正、v1.9 で「su が存在しない」を修正)

手動でボタンをタップ(インターフェース上)
   └─ 現在のプロセスで実行:方式「自動」= 高速チャネル → 手動;方式「手動」= 直接手動

起動時自動(BootReceiver、2つのブロードキャストでそれぞれ実行)
   │
   ├─ 今回すでに root を取得済み(資格情報インストール済み、または他の root がまだ有効)?
   │      ├─ インストーラー広告設定がまだ → 一度補完して終了
   │      └─ すでに実行済み → スキップ
   ├─ フォアグラウンドサービスが実行中 / 前回がまだ終了していない? → スキップ
   │
   ├─ 第1ステップ · 高速チャネル DirtyFrag(数秒から数十秒、ブロードキャスト内で直接実行)
   │      ├─ 成功 → 第3ステップ
   │      ├─ 失敗だが痕跡なし(/dev/df が存在しない)→ 第2ステップへ
   │      └─ 失敗だがすでに布陣済み(/dev/df が存在)→ 停止、スマホの再起動を促す
   │
   ├─ 第2ステップ · 手動方式 CVE-2026-43499(3段階ラダー、フォアグラウンドサービスに委譲)
   │      ├─ 成功 → 第3ステップ
   │      └─ 3段階すべて失敗 → 今回はこれ以上試行せず、次回の起動を待つ
   │
   └─ 第3ステップ · インストーラー広告設定(2つの cmd connectivity、第5節参照)
          ├─ 成功 → そのまま KernelSU の起動スクリプトとして書き込み(/data/adb/service.d/)、以後の起動時に自動実行
          └─ 失敗(まだロック解除していない / KernelSU がまだ準備できていない)→ フォアグラウンドサービスが30秒ごとにリトライ、最大5分

「起動(ロック解除前)」のブロードキャストでは高速チャネルのみ実行:手動経路は ksud を /data/local/tmp に配置する必要があるが、そこは資格情報暗号化ストレージであり、 ロック解除前は書き込めず、実行しても無駄になる。 そのため手動経路は「起動完了」(ユーザーのロック解除後)のブロードキャストを待ってから実行する。

起動時自動をブロードキャスト内で実行するように変更した理由(v1.6 の修正)

v1.5 の起動時自動は「ブロードキャスト受信 → フォアグラウンドサービスを起動し、サービスが経路を実行」だったが、 実機では機能しなかった:Android 12+ はバックグラウンドアプリのフォアグラウンドサービス起動を制限し、 LOCKED_BOOT_COMPLETED の瞬間に startForegroundService() はシステムに直接拒否され、 ブロードキャストは静かに終了する —— スイッチはオンだが、何も起こらない。

v1.6 では上流 DFRoot の方式に戻した(実機で検証済み):ブロードキャスト内で高速チャネルを直接実行し、 さらに安定性を高めた:

  • goAsync() でプロセスを保持:ブロードキャストが終了していなければ、システムはこのプロセスを キャッシュプロセスとして回収しない;
  • 最大45秒待機し、タイムアウトしたら手放す(ブロードキャストをタイムアウトまで引きずらず)、 手動経路も重ねない;
  • 高速チャネルが失敗したらフォアグラウンドサービスを起動して手動経路を実行; システムがフォアグラウンドサービスすら起動させない場合は、通知を送って手動実行を促す;
  • 各ステップで BootLog(デバイス暗号化ストレージ)に記録し、インターフェースの 「前回の起動時自動:…」行に最後の結果を直接表示 —— 「まだ記録なし」と表示されれば、 起動ブロードキャストがそもそも届いていない。

布陣後に手動方式を続けて実行しない理由:両方の経路がカーネル内で動作する —— 高速チャネルは page cache を改ざんし、カーネルモジュールをロードして SELinux を permissive にする; この状態でさらに確率型の脆弱性を重ねることは、すでに「汚れた」カーネルに不確実性を上乗せすることになる。 そのため /dev/df が出現した時点で停止し、ユーザーに再起動を促すのであって、強行しない。

手動方式の3段階ラダー

ラウンド試行回数初回検出上限単回上限ハング判定ラウンド上限
第1ラウンド · 高速620 s60 s40 s 新規ログなし3分
第2ラウンド · 安定1235 s100 s70 s 新規ログなし8分
第3ラウンド · 根気2460 s180 s110 s 新規ログなし15分
  • 各ラウンドはまったく新しい helper プロセス(ランダム性がリセットされる);
  • ただし同じ起動サイクル内ですでに検出済みの KASLR オフセットを再利用する(ログの slide-kaslr-ok … slide=…)ことで、重複検出を省略 —— このアイデアは polygraphene/DFReroot から;
  • パラメータは app/src/main/java/df/root/RmgChain.java の LADDER テーブルにあり、 調整したい場合は直接変更可能。

三、対応機種

機種ファームウェアカーネル状態
SM-S938B(Galaxy S25 Ultra、pa3q)BP4A.251205.006.S938BXXS9CZE16.6.98-android15-8-pe17667d-abogkiS938BXXS9CZE1-4k両経路とも適応済み

両経路ともカーネルバージョンでマッチングする(高速チャネルは android15-6.6 のカーネルモジュール、 手動は 6.6.98 のペイロードに依存)。ファームウェア / カーネルを変更する場合は、 対応するカーネルモジュールとペイロードを変更する必要がある。

App 起動時に、機種・ファームウェア・カーネル・KMI、および高速チャネルに必要な6つのパスを すべて出力する。


四、ビルド

必要なもの:JDK 17+、Android SDK(platform 36 / build-tools 36.0.0)。

NDK は不要:libexp.so はコンパイル済み(リポジトリに同梱)、手動方式の3つのバイナリも プリコンパイル済みで、app/build.gradle.kts に externalNativeBuild はない。

export JAVA_HOME=/path/to/jdk-21
export PATH="$JAVA_HOME/bin:$PATH"
export ANDROID_HOME=/path/to/android-sdk

./create-keystore.sh                     # app/keystore.jks を生成(.gitignore で除外済み)
echo "sdk.dir=$ANDROID_HOME" > local.properties

./gradlew :app:assembleRelease
# → app/build/outputs/apk/release/dfroot.apk

または直接 ./build.sh を実行すると、ビルドしてルートディレクトリの dfroot.apk にコピーする。

ツールをダウンロード