diff --git a/edxp-common/src/main/java/com/elderdrivers/riru/edxp/config/BaseEdxpConfig.java b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/config/BaseEdxpConfig.java index e9f9f8a1..12474f64 100644 --- a/edxp-common/src/main/java/com/elderdrivers/riru/edxp/config/BaseEdxpConfig.java +++ b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/config/BaseEdxpConfig.java @@ -23,6 +23,14 @@ public class BaseEdxpConfig implements EdxpConfig { public String getXposedPropPath() { return ConfigManager.getXposedPropPath(); } + @Override + public String getLibSandHookName() { + return ConfigManager.getLibSandHookName(); + } + @Override + public String getLibWhaleName() { + return ConfigManager.getLibWhaleName(); + } @Override public boolean isDynamicModulesMode() { diff --git a/edxp-common/src/main/java/com/elderdrivers/riru/edxp/config/ConfigManager.java b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/config/ConfigManager.java index 76757536..e237c276 100644 --- a/edxp-common/src/main/java/com/elderdrivers/riru/edxp/config/ConfigManager.java +++ b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/config/ConfigManager.java @@ -41,6 +41,10 @@ public class ConfigManager { public static native String getXposedPropPath(); + public static native String getLibSandHookName(); + + public static native String getLibWhaleName(); + public static native String getInstallerConfigPath(String suffix); public static native String getDataPathPrefix(); diff --git a/edxp-core/src/main/cpp/main/include/config.h b/edxp-core/src/main/cpp/main/include/config.h index 4c53f3e9..1075f09a 100644 --- a/edxp-core/src/main/cpp/main/include/config.h +++ b/edxp-core/src/main/cpp/main/include/config.h @@ -29,6 +29,8 @@ namespace edxp { static constexpr auto kLibArtName = "libart.so"; static constexpr auto kLibFwkName = "libandroid_runtime.so"; + static constexpr auto kLibWhaleName = "libwhale.edxp.so"; + static constexpr auto kLibSandHookName = "libsandhook.edxp.so"; static const auto kLibBasePath = std::string(LP_SELECT("/system/lib/", "/system/lib64/")); static const auto kLibRuntimeBasePath = std::string( @@ -36,8 +38,9 @@ namespace edxp { static const auto kLibArtPath = (GetAndroidApiLevel() >= ANDROID_Q ? kLibRuntimeBasePath : kLibBasePath) + kLibArtName; - static const auto kLibWhalePath = kLibBasePath + "libwhale.edxp.so"; - static const auto kLibSandHookPath = kLibBasePath + "libsandhook.edxp.so"; + + static const auto kLibWhalePath = kLibBasePath + kLibWhaleName; + static const auto kLibSandHookPath = kLibBasePath + kLibSandHookName; static const auto kLibFwPath = kLibBasePath + "libandroidfw.so"; static const auto kLibDlPath = kLibBasePath + "libdl.so"; static const auto kLibFwkPath = kLibBasePath + kLibFwkName; diff --git a/edxp-core/src/main/cpp/main/src/config_manager.cpp b/edxp-core/src/main/cpp/main/src/config_manager.cpp index eed8d8d6..3bf8c365 100644 --- a/edxp-core/src/main/cpp/main/src/config_manager.cpp +++ b/edxp-core/src/main/cpp/main/src/config_manager.cpp @@ -191,6 +191,14 @@ namespace edxp { return kXposedPropPath; } + ALWAYS_INLINE std::string ConfigManager::GetLibSandHookName() const { + return kLibSandHookName; + } + + ALWAYS_INLINE std::string ConfigManager::GetLibWhaleName() const { + return kLibWhaleName; + } + ALWAYS_INLINE std::string ConfigManager::GetDataPathPrefix() const { return data_path_prefix_; } diff --git a/edxp-core/src/main/cpp/main/src/config_manager.h b/edxp-core/src/main/cpp/main/src/config_manager.h index 5344bf85..db2023fd 100644 --- a/edxp-core/src/main/cpp/main/src/config_manager.h +++ b/edxp-core/src/main/cpp/main/src/config_manager.h @@ -36,6 +36,10 @@ namespace edxp { std::string GetXposedPropPath() const; + std::string GetLibSandHookName() const; + + std::string GetLibWhaleName() const; + std::string GetDataPathPrefix() const; std::string GetConfigPath(const std::string &suffix) const; diff --git a/edxp-core/src/main/cpp/main/src/jni/edxp_config_manager.cpp b/edxp-core/src/main/cpp/main/src/jni/edxp_config_manager.cpp index 1396adee..21983d4c 100644 --- a/edxp-core/src/main/cpp/main/src/jni/edxp_config_manager.cpp +++ b/edxp-core/src/main/cpp/main/src/jni/edxp_config_manager.cpp @@ -34,6 +34,14 @@ namespace edxp { return env->NewStringUTF(ConfigManager::GetInstance()->GetXposedPropPath().c_str()); } + static jstring ConfigManager_getLibWhaleName(JNI_START) { + return env->NewStringUTF(ConfigManager::GetInstance()->GetLibWhaleName().c_str()); + } + + static jstring ConfigManager_getLibSandHookName(JNI_START) { + return env->NewStringUTF(ConfigManager::GetInstance()->GetLibSandHookName().c_str()); + } + static jstring ConfigManager_getDataPathPrefix(JNI_START) { return env->NewStringUTF(ConfigManager::GetInstance()->GetDataPathPrefix().c_str()); } @@ -61,6 +69,8 @@ namespace edxp { NATIVE_METHOD(ConfigManager, isNoModuleLogEnabled, "()Z"), NATIVE_METHOD(ConfigManager, getInstallerPackageName, "()Ljava/lang/String;"), NATIVE_METHOD(ConfigManager, getXposedPropPath, "()Ljava/lang/String;"), + NATIVE_METHOD(ConfigManager, getLibSandHookName, "()Ljava/lang/String;"), + NATIVE_METHOD(ConfigManager, getLibWhaleName, "()Ljava/lang/String;"), NATIVE_METHOD(ConfigManager, getDataPathPrefix, "()Ljava/lang/String;"), NATIVE_METHOD(ConfigManager, getInstallerConfigPath, "(Ljava/lang/String;)Ljava/lang/String;"), NATIVE_METHOD(ConfigManager, isAppNeedHook, "(Ljava/lang/String;)Z"), diff --git a/edxp-core/template_override/customize.sh b/edxp-core/template_override/customize.sh index 308566d2..598689a1 100644 --- a/edxp-core/template_override/customize.sh +++ b/edxp-core/template_override/customize.sh @@ -1,6 +1,9 @@ SKIPUNZIP=1 RIRU_PATH="/data/misc/riru" +RIRU_EDXP="$(cat /proc/sys/kernel/random/uuid|md5sum|cut -c 1-4)" +RIRU_MODULES="${RIRU_PATH}/modules" +RIRU_TARGET="${RIRU_MODULES}/${RIRU_EDXP}" VERSION=$(grep_prop version "${TMPDIR}/module.prop") RIRU_MIN_API_VERSION=$(grep_prop api "${TMPDIR}/module.prop") @@ -15,6 +18,9 @@ JAR_EDXP=$(cat /proc/sys/kernel/random/uuid|md5sum|cut -c 1-8)".jar" JAR_EDDALVIKDX=$(cat /proc/sys/kernel/random/uuid|md5sum|cut -c 1-8)".jar" JAR_EDDEXMAKER=$(cat /proc/sys/kernel/random/uuid|md5sum|cut -c 1-8)".jar" JAR_EDCONFIG=$(cat /proc/sys/kernel/random/uuid|md5sum|cut -c 1-8)".jar" +LIB_RIRU_EDXP="libriru_${RIRU_EDXP}.so" +LIB_WHALE_EDXP="lib$(cat /proc/sys/kernel/random/uuid|md5sum|cut -c 1-10).so" +LIB_SANDHOOK_EDXP="lib$(cat /proc/sys/kernel/random/uuid|md5sum|cut -c 1-13).so" MODEL=" HD1900 @@ -205,12 +211,6 @@ check_architecture ui_print "- Extracting module files" unzip -o "${ZIPFILE}" EdXposed.apk module.prop post-fs-data.sh sepolicy.rule system.prop uninstall.sh 'system/*' -d "${MODPATH}" >&2 -ui_print "- Copying framework libraries" -mv "${MODPATH}/system/framework/eddalvikdx.jar" "${MODPATH}/system/framework/${JAR_EDDALVIKDX}" -mv "${MODPATH}/system/framework/edxp.jar" "${MODPATH}/system/framework/${JAR_EDXP}" -mv "${MODPATH}/system/framework/eddexmaker.jar" "${MODPATH}/system/framework/${JAR_EDDEXMAKER}" -mv "${MODPATH}/system/framework/edconfig.jar" "${MODPATH}/system/framework/${JAR_EDCONFIG}" - if [[ "${ARCH}" == "x86" || "${ARCH}" == "x64" ]]; then ui_print "- Replacing x86 and x86_64 libraries" unzip -o "${ZIPFILE}" 'system_x86/*' -d "${MODPATH}" >&2 @@ -250,25 +250,63 @@ fi # rm ${MODPATH}/sepolicy.rule #fi -ui_print "- Resetting libraries path" +ui_print "- Copying framework libraries" -sed -i 's:/system/framework/edxp.jar\:/system/framework/eddalvikdx.jar\:/system/framework/eddexmaker.jar:/system/framework/'"${JAR_EDXP}"'\:/system/framework/'"${JAR_EDDALVIKDX}"'\:/system/framework/'"${JAR_EDDEXMAKER}"':g' "${MODPATH}/system/lib/libriru_edxp.so" -sed -i 's:/system/framework/edconfig.jar:/system/framework/'"${JAR_EDCONFIG}"':g' "${MODPATH}/system/lib/libriru_edxp.so" +mv "${MODPATH}/system/framework/eddalvikdx.jar" "${MODPATH}/system/framework/${JAR_EDDALVIKDX}" +mv "${MODPATH}/system/framework/edxp.jar" "${MODPATH}/system/framework/${JAR_EDXP}" +mv "${MODPATH}/system/framework/eddexmaker.jar" "${MODPATH}/system/framework/${JAR_EDDEXMAKER}" +mv "${MODPATH}/system/framework/edconfig.jar" "${MODPATH}/system/framework/${JAR_EDCONFIG}" +mv "${MODPATH}/system/lib/libriru_edxp.so" "${MODPATH}/system/lib/${LIB_RIRU_EDXP}" +mv "${MODPATH}/system/lib/libwhale.edxp.so" "${MODPATH}/system/lib/${LIB_WHALE_EDXP}" if [[ "${IS64BIT}" == true ]]; then - sed -i 's:/system/framework/edxp.jar\:/system/framework/eddalvikdx.jar\:/system/framework/eddexmaker.jar:/system/framework/'"${JAR_EDXP}"'\:/system/framework/'"${JAR_EDDALVIKDX}"'\:/system/framework/'"${JAR_EDDEXMAKER}"':g' "${MODPATH}/system/lib64/libriru_edxp.so" - sed -i 's:/system/framework/edconfig.jar:/system/framework/'"${JAR_EDCONFIG}"':g' "${MODPATH}/system/lib64/libriru_edxp.so" + mv "${MODPATH}/system/lib64/libriru_edxp.so" "${MODPATH}/system/lib64/${LIB_RIRU_EDXP}" + mv "${MODPATH}/system/lib64/libwhale.edxp.so" "${MODPATH}/system/lib64/${LIB_WHALE_EDXP}" +fi + +if [[ "${VARIANTS}" == "SandHook" ]]; then + mv "${MODPATH}/system/lib/libsandhook.edxp.so" "${MODPATH}/system/lib/${LIB_SANDHOOK_EDXP}" + if [[ "${IS64BIT}" == true ]]; then + mv "${MODPATH}/system/lib64/libsandhook.edxp.so" "${MODPATH}/system/lib64/${LIB_SANDHOOK_EDXP}" + fi +fi + +ui_print "- Resetting libraries path" + +sed -i 's:/system/framework/edxp.jar\:/system/framework/eddalvikdx.jar\:/system/framework/eddexmaker.jar:/system/framework/'"${JAR_EDXP}"'\:/system/framework/'"${JAR_EDDALVIKDX}"'\:/system/framework/'"${JAR_EDDEXMAKER}"':g' "${MODPATH}/system/lib/${LIB_RIRU_EDXP}" +sed -i 's:/system/framework/edconfig.jar:/system/framework/'"${JAR_EDCONFIG}"':g' "${MODPATH}/system/lib/${LIB_RIRU_EDXP}" +sed -i 's:libriru_edxp.so:'"${LIB_RIRU_EDXP}"':g' "${MODPATH}/system/lib/${LIB_RIRU_EDXP}" +sed -i 's:libwhale.edxp.so:'"${LIB_WHALE_EDXP}"':g' "${MODPATH}/system/lib/${LIB_RIRU_EDXP}" +sed -i 's:libsandhook.edxp.so:'"${LIB_SANDHOOK_EDXP}"':g' "${MODPATH}/system/lib/${LIB_RIRU_EDXP}" + +if [[ "${IS64BIT}" == true ]]; then + sed -i 's:/system/framework/edxp.jar\:/system/framework/eddalvikdx.jar\:/system/framework/eddexmaker.jar:/system/framework/'"${JAR_EDXP}"'\:/system/framework/'"${JAR_EDDALVIKDX}"'\:/system/framework/'"${JAR_EDDEXMAKER}"':g' "${MODPATH}/system/lib64/${LIB_RIRU_EDXP}" + sed -i 's:/system/framework/edconfig.jar:/system/framework/'"${JAR_EDCONFIG}"':g' "${MODPATH}/system/lib64/${LIB_RIRU_EDXP}" + sed -i 's:libriru_edxp.so:'"${LIB_RIRU_EDXP}"':g' "${MODPATH}/system/lib64/${LIB_RIRU_EDXP}" + sed -i 's:libwhale.edxp.so:'"${LIB_WHALE_EDXP}"':g' "${MODPATH}/system/lib64/${LIB_RIRU_EDXP}" + sed -i 's:libsandhook.edxp.so:'"${LIB_SANDHOOK_EDXP}"':g' "${MODPATH}/system/lib64/${LIB_RIRU_EDXP}" +fi + +ui_print "- Removing old configuration" + +if [[ -f "${RIRU_MODULES}/edxp.prop" ]]; then + OLD_CONFIG=$(cat "${RIRU_MODULES}/edxp.prop") + rm -rf "${RIRU_MODULES}/${OLD_CONFIG}" +fi + +if [[ -e "${RIRU_MODULES}/edxp" ]]; then + rm -rf "${RIRU_MODULES}/edxp" fi ui_print "- Copying extra files" -TARGET="${RIRU_PATH}/modules/edxp" +[[ -d "${RIRU_TARGET}" ]] || mkdir -p "${RIRU_TARGET}" || abort "! Can't mkdir -p ${RIRU_TARGET}" -[[ -d "${TARGET}" ]] || mkdir -p "${TARGET}" || abort "! Can't mkdir -p ${TARGET}" +echo "${RIRU_EDXP}">"${RIRU_MODULES}/edxp.prop" -rm "${TARGET}/module.prop" +rm "${RIRU_TARGET}/module.prop" -cp "${MODPATH}/module.prop" "${TARGET}/module.prop" || abort "! Can't create ${TARGET}/module.prop" +cp "${MODPATH}/module.prop" "${RIRU_TARGET}/module.prop" || abort "! Can't create ${RIRU_TARGET}/module.prop" set_perm_recursive "${MODPATH}" 0 0 0755 0644 diff --git a/edxp-core/template_override/post-fs-data.sh b/edxp-core/template_override/post-fs-data.sh index 0173057d..ef20c63c 100644 --- a/edxp-core/template_override/post-fs-data.sh +++ b/edxp-core/template_override/post-fs-data.sh @@ -11,7 +11,7 @@ grep_prop() { MODDIR=${0%/*} RIRU_PATH="/data/misc/riru" -TARGET="${RIRU_PATH}/modules/edxp" +TARGET="${RIRU_PATH}/modules" EDXP_VERSION=$(grep_prop version "${MODDIR}/module.prop") @@ -128,9 +128,6 @@ start_log_cather () { logcat -f ${LOG_FILE} *:S ${LOG_TAG_FILTERS} & LOG_PID=$! echo "${LOG_PID}">"${LOG_PATH}/${LOG_FILE_NAME}.pid" - chcon -R ${PATH_CONTEXT} "${LOG_PATH}" - chown -R ${PATH_OWNER} "${LOG_PATH}" - chmod -R 666 "${LOG_PATH}" } # Backup app_process to avoid bootloop caused by original Xposed replacement in Android Oreo @@ -159,8 +156,14 @@ start_log_cather all "EdXposed:V XSharedPreferences:V EdXposed-Bridge:V EdXposed # start_bridge_log_catcher start_log_cather error "XSharedPreferences:V EdXposed-Bridge:V" true true -[[ -d "${TARGET}" ]] || mkdir -p "${TARGET}" -cp "${MODDIR}/module.prop" "${TARGET}/module.prop" +if [[ -f "/data/misc/riru/modules/edxp.prop" ]]; then + CONFIG=$(cat "/data/misc/riru/modules/edxp.prop") + [[ -d "${TARGET}/${CONFIG}" ]] || mkdir -p "${TARGET}/${CONFIG}" + cp "${MODDIR}/module.prop" "${TARGET}/${CONFIG}/module.prop" +fi -chcon -R u:object_r:system_file:s0 "${MODDIR}" \ No newline at end of file +chcon -R u:object_r:system_file:s0 "${MODDIR}" +chcon -R ${PATH_CONTEXT} "${LOG_PATH}" +chown -R ${PATH_OWNER} "${LOG_PATH}" +chmod -R 666 "${LOG_PATH}" \ No newline at end of file diff --git a/edxp-core/template_override/uninstall.sh b/edxp-core/template_override/uninstall.sh index f14483d2..9710469f 100644 --- a/edxp-core/template_override/uninstall.sh +++ b/edxp-core/template_override/uninstall.sh @@ -9,11 +9,16 @@ REMOVE=false if [[ "${VARIANT}" == "SandHook" ]]; then [[ -f "${MODDIR}/../riru_edxposed/module.prop" ]] || REMOVE=true else - [[ -f "${MODDIR}/../riru_edxposed_sandhook/module.prop" ]] || REMOVE=true + [[ -f "${MODDIR}/../riru_edxposed_sandhook/module.prop" ]] || REMOVE=true fi if [[ "${REMOVE}" == true ]]; then rm -rf /data/misc/riru/modules/edxp + if [[ -f "/data/misc/riru/modules/edxp.prop" ]]; then + OLD_CONFIG=$(cat "/data/misc/riru/modules/edxp.prop") + rm -rf "/data/misc/riru/modules/${OLD_CONFIG}" + rm "/data/misc/riru/modules/edxp.prop" + fi fi diff --git a/edxp-sandhook/src/main/java/com/swift/sandhook/xposedcompat/methodgen/SandHookXposedBridge.java b/edxp-sandhook/src/main/java/com/swift/sandhook/xposedcompat/methodgen/SandHookXposedBridge.java index 0f70564b..c157598d 100644 --- a/edxp-sandhook/src/main/java/com/swift/sandhook/xposedcompat/methodgen/SandHookXposedBridge.java +++ b/edxp-sandhook/src/main/java/com/swift/sandhook/xposedcompat/methodgen/SandHookXposedBridge.java @@ -5,6 +5,7 @@ import android.os.Process; import android.os.Trace; import android.util.Log; +import com.elderdrivers.riru.edxp.config.ConfigManager; import com.elderdrivers.riru.edxp.util.ClassLoaderUtils; import com.elderdrivers.riru.edxp.util.FileUtils; import com.swift.sandhook.SandHook; @@ -133,9 +134,11 @@ public final class SandHookXposedBridge { public static void init() { if (Process.is64Bit()) { - SandHookConfig.libSandHookPath = "/system/lib64/libsandhook.edxp.so"; +// SandHookConfig.libSandHookPath = "/system/lib64/libsandhook.edxp.so"; + SandHookConfig.libSandHookPath = "/system/lib64/" + ConfigManager.getLibSandHookName(); } else { - SandHookConfig.libSandHookPath = "/system/lib/libsandhook.edxp.so"; +// SandHookConfig.libSandHookPath = "/system/lib/libsandhook.edxp.so"; + SandHookConfig.libSandHookPath = "/system/lib/" + ConfigManager.getLibSandHookName(); } SandHookConfig.libLoader = new SandHookConfig.LibLoader() { @Override diff --git a/edxp-whale/src/main/java/com/elderdrivers/riru/edxp/whale/core/WhaleRouter.java b/edxp-whale/src/main/java/com/elderdrivers/riru/edxp/whale/core/WhaleRouter.java index 37940496..e58290d3 100644 --- a/edxp-whale/src/main/java/com/elderdrivers/riru/edxp/whale/core/WhaleRouter.java +++ b/edxp-whale/src/main/java/com/elderdrivers/riru/edxp/whale/core/WhaleRouter.java @@ -1,5 +1,6 @@ package com.elderdrivers.riru.edxp.whale.core; +import com.elderdrivers.riru.edxp.config.ConfigManager; import com.elderdrivers.riru.edxp.config.EdXpConfigGlobal; import com.elderdrivers.riru.edxp.framework.Zygote; import com.elderdrivers.riru.edxp.proxy.BaseRouter; @@ -16,8 +17,10 @@ public class WhaleRouter extends BaseRouter { BaseRouter.useXposedApi = true; EdXpConfigGlobal.sConfig = new WhaleEdxpConfig(); EdXpConfigGlobal.sHookProvider = new WhaleHookProvider(); - Zygote.allowFileAcrossFork("/system/lib/libwhale.edxp.so"); - Zygote.allowFileAcrossFork("/system/lib64/libwhale.edxp.so"); +// Zygote.allowFileAcrossFork("/system/lib/libwhale.edxp.so"); +// Zygote.allowFileAcrossFork("/system/lib64/libwhale.edxp.so"); + Zygote.allowFileAcrossFork("/system/lib/" + ConfigManager.getLibWhaleName()); + Zygote.allowFileAcrossFork("/system/lib64/" + ConfigManager.getLibWhaleName()); Zygote.allowFileAcrossFork("/system/lib/libart.so"); Zygote.allowFileAcrossFork("/system/lib64/libart.so"); } diff --git a/xposed-bridge/src/main/java/com/elderdrivers/riru/edxp/config/EdxpConfig.java b/xposed-bridge/src/main/java/com/elderdrivers/riru/edxp/config/EdxpConfig.java index 9ed3ffbb..a8959cfd 100644 --- a/xposed-bridge/src/main/java/com/elderdrivers/riru/edxp/config/EdxpConfig.java +++ b/xposed-bridge/src/main/java/com/elderdrivers/riru/edxp/config/EdxpConfig.java @@ -10,6 +10,10 @@ public interface EdxpConfig { String getXposedPropPath(); + String getLibSandHookName(); + + String getLibWhaleName(); + boolean isDynamicModulesMode(); boolean isNoModuleLogEnabled();