
지원되는 펌웨어용 CVE-2026-43499 KSU 설치 프로그램
Apache License 2.0에 따라 배포되는 BuSung-dev/Root-My-Galaxy의 포크입니다. LICENSE 및 크레딧을 참조하세요.
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
두 아티팩트는 페이로드 저장소가 빌드하는 것들이며 해당 이름이 기본값입니다. 해당 저장소의 릴리스가 사용하는 ksud-<id> 이름으로 제공되는 데몬은 이름을 바꾸거나 매니페스트에서 kernelsu.name으로 지정해야 합니다(페이로드의 경우 exploit.name).
profile.json에는 기기에서 가져올 수 없는 것만 피드 자체 키 이름으로 담깁니다:
{
"profileId": "xig07-jp-OS3.0.7.0.WNEJPKD",
"kernelsu": { "kmi": "android14-6.1", "managerPackage": "me.weishu.kernelsu" }
}
이 세 필드는 필수입니다. 피드가 기기를 매칭할 때 사용하는 모든 필드(커널 릴리스, 빌드 표시 ID, SDK, ABI, 페이지 크기)는 대신 이 기기에서 가져옵니다. 로컬 프로필은 어떤 것과도 매칭되지 않기 때문입니다. 그래도 kernelRelease나 buildDisplay를 지정하는 것은 선택 사항이며 기기와 대조해 확인되므로, 여러 대상의 폴더를 나란히 유지해도 안전합니다.
다운로드된 페이로드에 적용되는 검사 중 어느 것도 여기에는 적용되지 않으며, 앱이 그 사실을 표시합니다. 폴더에서 실행된 실행은 로그와 개요에 그런 것으로 표시되고 기록 항목에는 local:<folder>로 표시되므로, 완료된 실행이 이후에 피드 실행으로 읽히지 않습니다.
요구 사항:
APK에는 이 저장소의 자체 소스에서 빌드되지 않는 네이티브 프로그램이 하나 포함되어 있으므로 서브모듈과 함께 클론하세요:
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
출력:
app/build/outputs/apk/debug/app-debug.apk
APK의 lib/arm64-v8a/libcve43499root.so는 라이브러리가 아닙니다. 앱이 nativeLibraryDir에서 ProcessBuilder로 실행하는 실행 파일인 부트스트랩 헬퍼입니다. 이 헬퍼는 다운로드된 페이로드를 로드하며, 페이로드가 루트 권한을 획득한 후에는 소켓을 통해 su를 제공합니다.
이것은 바이너리로 커밋되지 않고 app/src/main/cpp/CMakeLists.txt의 소스에서 컴파일됩니다. 다만 소스는 여기에 없습니다. 페이로드의 독립 실행 경로가 고정 경로에서 동일한 프로그램을 실행하므로 페이로드 저장소도 이를 빌드해야 하며, 그 하나의 사본으로 유지됩니다. 이 저장소는 payloads 서브모듈을 통해 여기에 접근하며, 고정된 커밋이 APK가 정확히 어떤 리비전에서 빌드되었는지의 기록입니다.
즉, 의도적으로 하나의 소스를 두 번 빌드하는 것입니다. 페이로드 저장소는 익스플로잇 페이로드가 툴체인이 정체성의 일부인 고정 크기 블롭이므로 API 35에서 NDK 29를 고정합니다. 여기서 CMake는 minSdk에서 이 모듈의 ndkVersion을 사용합니다. 헬퍼는 둘 중 어느 것에도 의존하지 않습니다. 어느 쪽이든 동일한 프로그램이며, 앱이 배포하는 사본은 여기서 빌드된 것입니다.
이와 관련해 중요하면서도 실수로 깨뜨리기 쉬운 두 가지 사항이 있습니다. 실행 파일이어야 하며(add_executable에 -pie가 더해져 공유 라이브러리에는 없는 PT_INTERP가 생깁니다), jniLibs.useLegacyPackaging = true와 함께 lib*.so라는 이름이어야 합니다. 그래야 실행 비트가 설정된 실제 파일로 nativeLibraryDir에 추출되기 때문입니다. 두 항목 모두 설정된 위치에 주석으로 표시되어 있습니다.
소유한 기기 또는 명시적으로 테스트 권한을 부여받은 기기에서만 사용하세요.
BuSung-dev가 만든 Root-My-Galaxy의 포크로, 원래의 Apache License 2.0을 유지합니다. LICENSE를 참조하세요.
이 애플리케이션은 Root-My-Device-Payloads가 게시하는 것을 다운로드하여 실행합니다. 이는 BuSung-dev의 Root-My-Galaxy-Payloads를 포크한 것입니다.
페이로드에 대한 크레딧은 이 저장소에 포함되지 않으며 여기서 반복되지도 않습니다. KernelSU(성공적인 실행이 로드하는 것), 각 코어의 업스트림, 해당 코어들이 파생된 소스, 그리고 거기서 빌드된 모든 것의 라이선스 조건은 페이로드 저장소의 README에 명시되어 있습니다. 이는 페이로드 측 크레딧이 속한 곳이며 해당 아티팩트들이 빌드되는 곳이기도 합니다.