Skip to content

Commit

Permalink
Resetting the library so path
Browse files Browse the repository at this point in the history
Prevent some software from detecting EdXposed (2/2)

It works with latest SafetyNet!

Now allows each installation to be a unique Xposed framework
Completely erasing certain single, fixed features of the Xposed framework
  • Loading branch information
MlgmXyysd committed Apr 4, 2020
1 parent fe8e2c7 commit fd7b17f
Show file tree
Hide file tree
Showing 12 changed files with 121 additions and 28 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,14 @@ public String getInstallerPackageName() {
public String getXposedPropPath() {
return ConfigManager.getXposedPropPath();
}
@Override
public String getLibSandHookName() {
return ConfigManager.getLibSandHookName();
}
@Override
public String getLibWhaleName() {
return ConfigManager.getLibWhaleName();
}

@Override
public boolean isDynamicModulesMode() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,10 @@ private static boolean isFileExists(String path) {

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();
Expand Down
7 changes: 5 additions & 2 deletions edxp-core/src/main/cpp/main/include/config.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,15 +29,18 @@ 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(
LP_SELECT("/apex/com.android.runtime/lib/", "/apex/com.android.runtime/lib64/"));

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;
Expand Down
8 changes: 8 additions & 0 deletions edxp-core/src/main/cpp/main/src/config_manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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_;
}
Expand Down
4 changes: 4 additions & 0 deletions edxp-core/src/main/cpp/main/src/config_manager.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
10 changes: 10 additions & 0 deletions edxp-core/src/main/cpp/main/src/jni/edxp_config_manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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());
}
Expand Down Expand Up @@ -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"),
Expand Down
66 changes: 52 additions & 14 deletions edxp-core/template_override/customize.sh
Original file line number Diff line number Diff line change
@@ -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")
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -250,25 +250,63 @@ fi
# rm ${MODPATH}/sepolicy.rule
#fi

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}"
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
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/libriru_edxp.so"
sed -i 's:/system/framework/edconfig.jar:/system/framework/'"${JAR_EDCONFIG}"':g' "${MODPATH}/system/lib/libriru_edxp.so"
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/libriru_edxp.so"
sed -i 's:/system/framework/edconfig.jar:/system/framework/'"${JAR_EDCONFIG}"':g' "${MODPATH}/system/lib64/libriru_edxp.so"
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

Expand Down
17 changes: 10 additions & 7 deletions edxp-core/template_override/post-fs-data.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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")

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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}"
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}"
7 changes: 6 additions & 1 deletion edxp-core/template_override/uninstall.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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


Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
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;
Expand Down Expand Up @@ -133,9 +134,11 @@ public static Object invokeOriginalMethod(Member method, Object thisObject, Obje

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
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -16,8 +17,10 @@ public void injectConfig() {
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");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ public interface EdxpConfig {

String getXposedPropPath();

String getLibSandHookName();

String getLibWhaleName();

boolean isDynamicModulesMode();

boolean isNoModuleLogEnabled();
Expand Down

0 comments on commit fd7b17f

Please sign in to comment.