
CVE-2026-43499 वाले समर्थित फ़र्मवेयर के लिए KSU इंस्टॉलर
BuSung-dev/Root-My-Galaxy का एक फ़ोर्क, Apache License 2.0 के अंतर्गत — देखें LICENSE और Credits।
Root My Device स्पष्ट रूप से समर्थित फ़र्मवेयर बिल्ड्स के लिए एक-क्लिक इंस्टॉलर है। एप्लिकेशन को स्वयं डिवाइस ऑफ़सेट्स, नेटिव एक्सप्लॉइट पेलोड्स और KernelSU बिल्ड आर्टिफ़ैक्ट्स से अलग रखा गया है।
डिवाइस फ़ीड और नेटिव पेलोड्स को
Root-My-Device-Payloads में बनाए रखा जाता है।
इसकी main ब्रांच पर हर पुश पेलोड्स को बिल्ड करता है और उन्हें उस रन के लिए अद्वितीय टैग के अंतर्गत एक
GitHub रिलीज़ के रूप में प्रकाशित करता है। ऐप उस रिपॉज़िटरी के releases/latest को हल करता है, उससे targets-v2.json एसेट पढ़ता है, और
उसमें नामित प्रत्येक आर्टिफ़ैक्ट को डाउनलोड करता है — इसलिए यह जो पेलोड्स इंस्टॉल करता है उनका सेट प्रकाशित होने के बाद अपरिवर्तनीय होता है, और कुछ भी बाइनरी के रूप में कमिट नहीं किया जाता।
ऐप कर्नेल रिलीज़, पूर्ण बिल्ड डिस्प्ले ID, SDK, ABI और पेज साइज़ के लिए स्वचालित रूप से सटीक मिलान चुनता है। उन्नत मोड किसी प्रोफ़ाइल को मैन्युअल रूप से चुन सकता है और अलग-अलग कर्नेल-रिलीज़ और बिल्ड चेतावनियाँ प्रस्तुत करता है।
कोई प्रोफ़ाइल तब तक फ़ीड से बाहर रहती है जब तक उस डिवाइस पर ऐप का अपना रूट पूरा नहीं हो जाता, और फ़ीड वही है जो ऐप पढ़ता है — इसलिए वह रन, जो यह स्थापित करेगा कि वह रूट काम करता है या नहीं, के पास डाउनलोड करने के लिए कुछ नहीं होता। डीबग मोड उसी स्थिति के लिए है: उन्नत मोड से अलग एक स्विच, डिफ़ॉल्ट रूप से बंद, जो पेलोड को डिवाइस पर एक फ़ोल्डर से पढ़ता है। इसे चालू करने पर वह फ़ोल्डर दिखाई देता है जिसकी ओर इसे इंगित करना है, जिसके शीर्ष स्तर पर तीन फ़ाइलें होती हैं:
profile.json
cve-2026-43499-app.release.so
ksud
दो आर्टिफ़ैक्ट वही हैं जो payload रिपॉज़िटरी बनाती है, और वे नाम डिफ़ॉल्ट हैं। उस रिपॉज़िटरी के रिलीज़ द्वारा उपयोग किए जाने वाले ksud-<id> नाम के अंतर्गत रखे गए डेमॉन का नाम बदलना होगा, या मैनिफ़ेस्ट में kernelsu.name के रूप में नामित करना होगा (payload के लिए exploit.name)।
profile.json केवल वही रखता है जो डिवाइस से नहीं लिया जा सकता, फ़ीड के अपने कुंजी नामों के अंतर्गत:
{
"profileId": "xig07-jp-OS3.0.7.0.WNEJPKD",
"kernelsu": { "kmi": "android14-6.1", "managerPackage": "me.weishu.kernelsu" }
}
ये तीन फ़ील्ड आवश्यक हैं। फ़ीड जिन भी फ़ील्ड के आधार पर किसी डिवाइस से मिलान करता है —
kernel release, build display ID, SDK, ABI, page size — वे सभी इस डिवाइस से आते हैं,
क्योंकि एक स्थानीय प्रोफ़ाइल का किसी चीज़ से मिलान नहीं किया जाता। फिर भी
kernelRelease या buildDisplay का नाम देना वैकल्पिक है और डिवाइस के विरुद्ध जाँचा जाता है, जिसके
कारण कई लक्ष्यों के फ़ोल्डरों को साथ-साथ रखना सुरक्षित रहता है।
डाउनलोड किए गए payload पर लागू होने वाली कोई भी जाँच यहाँ लागू नहीं होती, और ऐप ऐसा बताता है। किसी
फ़ोल्डर से चलाई गई रन को लॉग में, overview में, और उसकी history entry में
local:<folder> के रूप में चिह्नित किया जाता है, ताकि बाद में किसी भी पूर्ण हुई रन को
फ़ीड रन के रूप में न पढ़ा जा सके।
आवश्यकताएँ:
APK में एक native प्रोग्राम है जो इस रिपॉज़िटरी के अपने स्रोत से नहीं बनाया गया है, इसलिए submodules के साथ clone करें:
git clone --recurse-submodules https://github.com/Witaqua-tools/Root-My-Device
# or, in an existing checkout
git submodule update --init payloads
$env:JAVA_HOME='C:\Program Files\Android\Android Studio\jbr'
.\gradlew.bat :app:assembleDebug
No input content was provided. Please send the Markdown chunk you would like translated.
app/build/outputs/apk/debug/app-debug.apk
APK में lib/arm64-v8a/libcve43499root.so कोई लाइब्रेरी नहीं है — यह
बूटस्ट्रैप हेल्पर है, एक executable जिसे ऐप nativeLibraryDir से
ProcessBuilder के ज़रिए चलाता है। यही डाउनलोड किए गए payload को लोड करता है, और
उसके बाद, payload के root प्राप्त कर लेने पर सॉकेट पर su प्रदान करता है।
इसे app/src/main/cpp/CMakeLists.txt से
सोर्स से कंपाइल किया जाता है, बाइनरी के रूप में कमिट नहीं किया जाता। हालाँकि सोर्स
यहाँ नहीं है: payload का स्टैंडअलोन रूट उसी प्रोग्राम को एक निश्चित पथ से exec करता है,
इसलिए payload रिपॉज़िटरी को भी इसे बिल्ड करना पड़ता है, और यह एक ही प्रति बनी रहती है। यह
रिपॉज़िटरी इसे payloads सबमॉड्यूल के ज़रिए प्राप्त करती है, जिसका पिन किया गया कमिट इस बात का
रिकॉर्ड है कि कोई APK ठीक किस रिवीज़न से बिल्ड किया गया था।
इसका मतलब है एक ही सोर्स के दो बिल्ड, जानबूझकर। payload रिपॉज़िटरी API 35 पर
NDK 29 पिन करती है क्योंकि उसका exploit payload एक निश्चित आकार का blob है जिसका
टूलचेन उसकी पहचान का हिस्सा है; यहाँ CMake इस मॉड्यूल के ndkVersion को
minSdk पर उपयोग करता है। हेल्पर किसी पर भी निर्भर नहीं है — यह किसी भी तरह से वही प्रोग्राम है,
और ऐप जो प्रति शिप करता है वह यहाँ बिल्ड की गई प्रति है।
इसके बारे में दो बातें भार-वहन करने वाली हैं और गलती से पलटना आसान है: यह एक
executable होना चाहिए (add_executable के साथ -pie, ताकि इसमें PT_INTERP हो जो किसी
शेयर्ड लाइब्रेरी में नहीं होता), और इसका नाम lib*.so होना चाहिए
jniLibs.useLegacyPackaging = true के साथ, क्योंकि यही चीज़ nativeLibraryDir में
execute बिट सेट के साथ एक वास्तविक फ़ाइल के रूप में एक्सट्रैक्ट होती है। दोनों जगह टिप्पणी की गई है
जहाँ वे सेट हैं।
केवल उन्हीं डिवाइसों पर उपयोग करें जो आपके स्वामित्व में हैं या जिन्हें परीक्षण के लिए स्पष्ट रूप से अधिकृत किया गया है।
BuSung-dev द्वारा Root-My-Galaxy का एक फ़ोर्क, जो मूल Apache License 2.0 बनाए रखता है — देखें LICENSE।
यह एप्लिकेशन वह डाउनलोड और चलाता है जो Root-My-Device-Payloads प्रकाशित करता है — जो स्वयं BuSung-dev द्वारा Root-My-Galaxy-Payloads का एक फ़ोर्क है।
किसी payload पर जो श्रेय बकाया है वह इस रिपॉज़िटरी में नहीं है, और उसमें से कुछ भी यहाँ दोहराया नहीं गया है। KernelSU — जिसे एक सफल रन लोड करता है — प्रत्येक core का upstream, वह सोर्स जिससे वे cores उत्पन्न हुए हैं, और वहाँ बनी हर चीज़ की लाइसेंस शर्तें payload रिपॉज़िटरी के README में श्रेय दी गई हैं, जो वह जगह है जहाँ payload-पक्ष का श्रेय होना चाहिए और जहाँ वे artifacts बिल्ड होते हैं।