/* * shizuku_starter.c * * Starts Shizuku server with root privileges. * Intended to be executed via Xiaomi IMQSNative service. * * * Compile (Termux): * clang -O2 -Wall -o /data/local/tmp/shizuku_starter shizuku_starter.c * * Compile (NDK): * $NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android31-clang \ * -O2 -Wall -o /data/local/tmp/shizuku_starter shizuku_starter.c */ #include #include #include #include int main() { if (setgid(0) != 0) perror("setgid"); if (setuid(0) != 0) perror("setuid"); setenv("BOOTCLASSPATH", "/apex/com.android.art/javalib/core-oj.jar:/apex/com.android.art/javalib/core-libart.jar:/apex/com.android.art/javalib/okhttp.jar:/apex/com.android.art/javalib/bouncycastle.jar:/apex/com.android.art/javalib/apache-xml.jar:/system/framework/framework.jar:/system/framework/framework-graphics.jar:/system/framework/framework-location.jar:/system/framework/ext.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/ims-common.jar:/system/framework/tcmiface.jar:/system/framework/telephony-ext.jar:/system/framework/QPerformance.jar:/system/framework/UxPerformance.jar:/system/framework/WfdCommon.jar:/system_ext/framework/miui-framework.jar:/system_ext/framework/miui-telephony-common.jar:/system_ext/framework/miui-enterprise-sdk.jar:/system_ext/framework/miui-framework-pointer-pad.jar:/system_ext/framework/vendor.xiaomi.hardware.videoservice-V3-java.jar:/apex/com.android.i18n/javalib/core-icu4j.jar:/apex/com.android.adservices/javalib/framework-adservices.jar:/apex/com.android.adservices/javalib/framework-sdksandbox.jar:/apex/com.android.appsearch/javalib/framework-appsearch.jar:/apex/com.android.btservices/javalib/framework-bluetooth.jar:/apex/com.android.configinfrastructure/javalib/framework-configinfrastructure.jar:/apex/com.android.conscrypt/javalib/conscrypt.jar:/apex/com.android.devicelock/javalib/framework-devicelock.jar:/apex/com.android.healthfitness/javalib/framework-healthfitness.jar:/apex/com.android.ipsec/javalib/android.net.ipsec.ike.jar:/apex/com.android.media/javalib/updatable-media.jar:/apex/com.android.mediaprovider/javalib/framework-mediaprovider.jar:/apex/com.android.mediaprovider/javalib/framework-pdf.jar:/apex/com.android.mediaprovider/javalib/framework-pdf-v.jar:/apex/com.android.mediaprovider/javalib/framework-photopicker.jar:/apex/com.android.nfcservices/javalib/framework-nfc.jar:/apex/com.android.ondevicepersonalization/javalib/framework-ondevicepersonalization.jar:/apex/com.android.os.statsd/javalib/framework-statsd.jar:/apex/com.android.permission/javalib/framework-permission.jar:/apex/com.android.permission/javalib/framework-permission-s.jar:/apex/com.android.profiling/javalib/framework-profiling.jar:/apex/com.android.scheduling/javalib/framework-scheduling.jar:/apex/com.android.sdkext/javalib/framework-sdkextensions.jar:/apex/com.android.tethering/javalib/framework-connectivity.jar:/apex/com.android.tethering/javalib/framework-connectivity-t.jar:/apex/com.android.tethering/javalib/framework-tethering.jar:/apex/com.android.uwb/javalib/framework-uwb.jar:/apex/com.android.virt/javalib/framework-virtualization.jar:/apex/com.android.wifi/javalib/framework-wifi.jar", 1); setenv("DEX2OATBOOTCLASSPATH", "/apex/com.android.art/javalib/core-oj.jar:/apex/com.android.art/javalib/core-libart.jar:/apex/com.android.art/javalib/okhttp.jar:/apex/com.android.art/javalib/bouncycastle.jar:/apex/com.android.art/javalib/apache-xml.jar:/system/framework/framework.jar:/system/framework/framework-graphics.jar:/system/framework/framework-location.jar:/system/framework/ext.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/ims-common.jar:/system/framework/tcmiface.jar:/system/framework/telephony-ext.jar:/system/framework/QPerformance.jar:/system/framework/UxPerformance.jar:/system/framework/WfdCommon.jar:/system_ext/framework/miui-framework.jar:/system_ext/framework/miui-telephony-common.jar:/system_ext/framework/miui-enterprise-sdk.jar:/system_ext/framework/miui-framework-pointer-pad.jar:/system_ext/framework/vendor.xiaomi.hardware.videoservice-V3-java.jar:/apex/com.android.i18n/javalib/core-icu4j.jar", 1); FILE *fp = popen("pm path moe.shizuku.privileged.api", "r"); if (!fp) return 1; char line[512]; fgets(line, sizeof(line), fp); pclose(fp); char *apk = strstr(line, "package:"); if (apk) apk += 8; apk[strcspn(apk, "\n")] = 0; char dir[512]; strcpy(dir, apk); char *p = strrchr(dir, '/'); if (p) *p = 0; char libpath[600]; snprintf(libpath, sizeof(libpath), "%s/lib/arm64/libshizuku.so", dir); execl(libpath, "libshizuku.so", NULL); perror("execl failed"); return 1; }