From d34c76e119ccf11a9069a1054e3ebd8054f2e5dd Mon Sep 17 00:00:00 2001 From: LoveSy Date: Wed, 25 Nov 2020 18:54:41 +0800 Subject: [PATCH] Replace whale with dobby --- README.md | 3 +- README_CN.md | 2 +- appveyor.yml | 1 - .../riru/edxp/config/BaseEdxpConfig.java | 4 - .../riru/edxp/config/ConfigManager.java | 2 - .../elderdrivers/riru/edxp/core/EdxpImpl.java | 3 +- .../com/elderdrivers/riru/edxp/core/Main.java | 5 - edxp-core/.gitignore | 3 +- edxp-core/build.gradle | 4 +- .../META-INF/com/google/android/update-binary | 1 - .../src/main/cpp/main/include/android_build.h | 14 --- .../main/include/art/runtime/class_linker.h | 2 +- .../cpp/main/include/art/runtime/hidden_api.h | 2 +- .../include/art/runtime/oat_file_manager.h | 2 +- edxp-core/src/main/cpp/main/include/config.h | 2 - edxp-core/src/main/cpp/main/include/utils.h | 8 ++ .../src/main/cpp/main/src/config_manager.cpp | 2 +- .../src/main/cpp/main/src/config_manager.h | 2 - .../src/main/cpp/main/src/edxp_context.h | 1 - .../cpp/main/src/jni/edxp_config_manager.cpp | 5 - .../src/main/cpp/main/src/native_hook.cpp | 3 +- edxp-core/src/main/cpp/main/src/riru_hook.cpp | 2 +- edxp-core/template_override/customize.sh | 8 -- .../template_override/riru/module.prop.new | 6 - edxp-whale/.gitignore | 2 - edxp-whale/build.gradle | 71 ------------ edxp-whale/proguard-rules.pro | 38 ------- edxp-whale/src/main/AndroidManifest.xml | 1 - .../edxp/whale/config/WhaleEdxpConfig.java | 7 -- .../edxp/whale/config/WhaleHookProvider.java | 100 ----------------- .../riru/edxp/whale/core/WhaleEdxpImpl.java | 39 ------- .../riru/edxp/whale/core/WhaleRouter.java | 28 ----- .../main/java/com/lody/whale/VMHelper.java | 105 ------------------ .../java/com/lody/whale/WhaleRuntime.java | 74 ------------ .../system/etc/public.libraries-edxp.txt | 1 - .../system/framework/edxp.dex | Bin 0 -> 145956 bytes settings.gradle | 2 +- .../riru/edxp/config/EdxpConfig.java | 2 - 38 files changed, 21 insertions(+), 536 deletions(-) delete mode 100644 edxp-core/src/main/cpp/main/include/android_build.h delete mode 100644 edxp-core/template_override/riru/module.prop.new delete mode 100644 edxp-whale/.gitignore delete mode 100644 edxp-whale/build.gradle delete mode 100644 edxp-whale/proguard-rules.pro delete mode 100644 edxp-whale/src/main/AndroidManifest.xml delete mode 100644 edxp-whale/src/main/java/com/elderdrivers/riru/edxp/whale/config/WhaleEdxpConfig.java delete mode 100644 edxp-whale/src/main/java/com/elderdrivers/riru/edxp/whale/config/WhaleHookProvider.java delete mode 100644 edxp-whale/src/main/java/com/elderdrivers/riru/edxp/whale/core/WhaleEdxpImpl.java delete mode 100644 edxp-whale/src/main/java/com/elderdrivers/riru/edxp/whale/core/WhaleRouter.java delete mode 100644 edxp-whale/src/main/java/com/lody/whale/VMHelper.java delete mode 100644 edxp-whale/src/main/java/com/lody/whale/WhaleRuntime.java delete mode 100644 edxp-whale/template_override/system/etc/public.libraries-edxp.txt create mode 100644 edxp-whale/template_override/system/framework/edxp.dex diff --git a/README.md b/README.md index f744c0579..e256db986 100644 --- a/README.md +++ b/README.md @@ -101,6 +101,5 @@ Notice: These community group don't accept any bug report, please use [Get help] - [Riru](https://github.com/RikkaApps/Riru): provides a way to inject codes into zygote process - [XposedBridge](https://github.com/rovo89/XposedBridge): the OG xposed framework APIs - [dexmaker](https://github.com/linkedin/dexmaker) and [dalvikdx](https://github.com/JakeWharton/dalvik-dx): to dynamiclly generate YAHFA hooker classes -- [Whale](https://github.com/asLody/whale): used for inline hooking - [SandHook](https://github.com/ganyao114/SandHook/): ART hooking framework for SandHook variant - +- [Dobby](https://github.com/jmpews/Dobby): used for inline hooking diff --git a/README_CN.md b/README_CN.md index dd449fc26..0fd87e5d5 100644 --- a/README_CN.md +++ b/README_CN.md @@ -91,6 +91,6 @@ Edxposed 拥有三个不同的版本 - [Riru](https://github.com/RikkaApps/Riru): 提供一种将代码注入 zygote 进程的方法 - [XposedBridge](https://github.com/rovo89/XposedBridge): 原版 xposed 框架的 API - [dexmaker](https://github.com/linkedin/dexmaker) 和 [dalvikdx](https://github.com/JakeWharton/dalvik-dx): 动态生成 YAHFA hook 类 -- [Whale](https://github.com/asLody/whale): 用于 hook 内联方法 - [SandHook](https://github.com/ganyao114/SandHook/): SandHook 分支的 ART hooking 框架 +- [Dobby](https://github.com/jmpews/Dobby): 用于 hook 内联方法 diff --git a/appveyor.yml b/appveyor.yml index 86a3f420a..a6a254eeb 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -36,7 +36,6 @@ only_commits: - edxp-common/ - edxp-core/ - edxp-sandhook/ - - edxp-whale/ - edxp-yahfa/ - hiddenapi-stubs/ - xposed-bridge/ 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 a4ffce539..345635fde 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 @@ -27,10 +27,6 @@ public String getXposedPropPath() { 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 c8a14d96d..6c2dd834c 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 @@ -43,8 +43,6 @@ private static boolean isFileExists(String path) { 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-common/src/main/java/com/elderdrivers/riru/edxp/core/EdxpImpl.java b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/core/EdxpImpl.java index 4309936ff..236a46cba 100644 --- a/edxp-common/src/main/java/com/elderdrivers/riru/edxp/core/EdxpImpl.java +++ b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/core/EdxpImpl.java @@ -15,7 +15,6 @@ public interface EdxpImpl extends KeepAll { int NONE = 0; int YAHFA = 1; int SANDHOOK = 2; - int WHALE = 3; @NonNull Proxy getNormalProxy(); @@ -31,7 +30,7 @@ public interface EdxpImpl extends KeepAll { boolean isInitialized(); @Retention(SOURCE) - @IntDef({NONE, YAHFA, SANDHOOK, WHALE}) + @IntDef({NONE, YAHFA, SANDHOOK}) @interface Variant { } } diff --git a/edxp-common/src/main/java/com/elderdrivers/riru/edxp/core/Main.java b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/core/Main.java index a4acd4d35..c4ac47270 100644 --- a/edxp-common/src/main/java/com/elderdrivers/riru/edxp/core/Main.java +++ b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/core/Main.java @@ -84,10 +84,5 @@ private static void loadEdxpImpls() { }catch(Throwable ignored) { Utils.logD("not using yahfa"); } - try { - Class.forName("com.elderdrivers.riru.edxp.whale.core.WhaleEdxpImpl"); - }catch(Throwable ignored) { - Utils.logD("not found whale"); - } } } diff --git a/edxp-core/.gitignore b/edxp-core/.gitignore index 05b2e93c6..9542b0dd4 100644 --- a/edxp-core/.gitignore +++ b/edxp-core/.gitignore @@ -6,5 +6,6 @@ /template_override/module.prop /template_override/system /template_override/system_x86 +/template_override/riru/module.prop.new *.iml -/.cxx \ No newline at end of file +/.cxx diff --git a/edxp-core/build.gradle b/edxp-core/build.gradle index e80bd37d0..8caa57047 100644 --- a/edxp-core/build.gradle +++ b/edxp-core/build.gradle @@ -24,13 +24,11 @@ ext { module_name = "EdXposed" jar_dest_dir = "${projectDir}/template_override/system/framework/" is_windows = OperatingSystem.current().isWindows() - backends = ["YAHFA", "SandHook", "Whale"] + backends = ["YAHFA", "SandHook"] yahfa_module_id = "riru_edxposed" sandhook_module_id = yahfa_module_id + "_sandhook" - whale_module_id = yahfa_module_id + "_whale" yahfa_authors = "solohsu, MlgmXyysd & rk700" sandhook_authors = "solohsu, MlgmXyysd & ganyao114" - whale_authors = "solohsu, MlgmXyysd & asLody" riruModuleId = "edxp" zipPathMagiskRelease = "$buildDir/tmp/release/magisk" diff --git a/edxp-core/misc/EdXposedUninstaller/META-INF/com/google/android/update-binary b/edxp-core/misc/EdXposedUninstaller/META-INF/com/google/android/update-binary index af6203328..3cfa5b86d 100644 --- a/edxp-core/misc/EdXposedUninstaller/META-INF/com/google/android/update-binary +++ b/edxp-core/misc/EdXposedUninstaller/META-INF/com/google/android/update-binary @@ -103,7 +103,6 @@ remove_edxposed() { ui_print "- Deleting EdXposed..." rm -r -f /data/adb/modules/riru_edxposed/ rm -r -f /data/adb/modules/riru_edxposed_sandhook/ - rm -r -f /data/adb/modules/riru_edxposed_whale/ rm -r -f /data/misc/riru/modules/edxposed/ rm -r -f /data/misc/riru/modules/edxp/ ui_print "- Done" diff --git a/edxp-core/src/main/cpp/main/include/android_build.h b/edxp-core/src/main/cpp/main/include/android_build.h deleted file mode 100644 index 46c8c6097..000000000 --- a/edxp-core/src/main/cpp/main/include/android_build.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef WHALE_ANDROID_ANDROID_BUILD_H_ -#define WHALE_ANDROID_ANDROID_BUILD_H_ - -#include -#include -#include - -static inline int32_t GetAndroidApiLevel() { - char prop_value[PROP_VALUE_MAX]; - __system_property_get("ro.build.version.sdk", prop_value); - return atoi(prop_value); -} - -#endif // WHALE_ANDROID_ANDROID_BUILD_H_ diff --git a/edxp-core/src/main/cpp/main/include/art/runtime/class_linker.h b/edxp-core/src/main/cpp/main/include/art/runtime/class_linker.h index ca457a8e5..9a046e101 100644 --- a/edxp-core/src/main/cpp/main/include/art/runtime/class_linker.h +++ b/edxp-core/src/main/cpp/main/include/art/runtime/class_linker.h @@ -66,7 +66,7 @@ namespace art { static void Setup(void *handle, HookFunType hook_func) { LOGD("Classlinker hook setup, handle=%p", handle); // TODO: Maybe not compatible with Android 10- - int api_level = GetAndroidApiLevel(); + int api_level = edxp::GetAndroidApiLevel(); size_t OFFSET_classlinker; // Get offset from art::Runtime::RunRootClinits() call in IDA switch(api_level) { case __ANDROID_API_O__: diff --git a/edxp-core/src/main/cpp/main/include/art/runtime/hidden_api.h b/edxp-core/src/main/cpp/main/include/art/runtime/hidden_api.h index aa6c2f6e1..89807f3bd 100644 --- a/edxp-core/src/main/cpp/main/include/art/runtime/hidden_api.h +++ b/edxp-core/src/main/cpp/main/include/art/runtime/hidden_api.h @@ -32,7 +32,7 @@ namespace art { // @ApiSensitive(Level.HIGH) static void DisableHiddenApi(void *handle, HookFunType hook_func) { - const int api_level = GetAndroidApiLevel(); + const int api_level = edxp::GetAndroidApiLevel(); if (api_level < __ANDROID_API_P__) { return; } diff --git a/edxp-core/src/main/cpp/main/include/art/runtime/oat_file_manager.h b/edxp-core/src/main/cpp/main/include/art/runtime/oat_file_manager.h index ec3fafb49..76d4eb37d 100644 --- a/edxp-core/src/main/cpp/main/include/art/runtime/oat_file_manager.h +++ b/edxp-core/src/main/cpp/main/include/art/runtime/oat_file_manager.h @@ -14,7 +14,7 @@ namespace art { // @ApiSensitive(Level.LOW) // http://androidxref.com/9.0.0_r3/xref/art/runtime/oat_file_manager.cc#637 static void DisableOnlyUseSystemOatFiles(void *handle, HookFunType hook_func) { - const int api_level = GetAndroidApiLevel(); + const int api_level = edxp::GetAndroidApiLevel(); if (api_level >= __ANDROID_API_P__) { HOOK_FUNC(SetOnlyUseSystemOatFiles, "_ZN3art14OatFileManager24SetOnlyUseSystemOatFilesEv", // 9 & 11 diff --git a/edxp-core/src/main/cpp/main/include/config.h b/edxp-core/src/main/cpp/main/include/config.h index def24080b..fa0f93576 100644 --- a/edxp-core/src/main/cpp/main/include/config.h +++ b/edxp-core/src/main/cpp/main/include/config.h @@ -5,7 +5,6 @@ #include #include #include "art/base/macros.h" -#include "android_build.h" #include "utils.h" namespace edxp { @@ -30,7 +29,6 @@ namespace edxp { static const auto kLibArtName = "libart.so"_str; static const auto kLibFwName = "libandroidfw.so"_str; - static const auto kLibWhaleName = "libwhale.edxp.so"_str; static const auto kLibSandHookName = "libsandhook.edxp.so"_str; static const auto kLibDlName = "libdl.so"_str; static const auto kLibSandHookNativeName = "libsandhook-native.so"_str; diff --git a/edxp-core/src/main/cpp/main/include/utils.h b/edxp-core/src/main/cpp/main/include/utils.h index 33a9d02c1..bbedf14a2 100644 --- a/edxp-core/src/main/cpp/main/include/utils.h +++ b/edxp-core/src/main/cpp/main/include/utils.h @@ -6,8 +6,16 @@ #include #include #include "logging.h" +#include namespace edxp { + + static inline int32_t GetAndroidApiLevel() { + char prop_value[PROP_VALUE_MAX]; + __system_property_get("ro.build.version.sdk", prop_value); + return atoi(prop_value); + } + inline const std::string operator ""_str(const char *str, std::size_t size) { return {str, size}; } 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 3167cc6ce..020c69b91 100644 --- a/edxp-core/src/main/cpp/main/src/config_manager.cpp +++ b/edxp-core/src/main/cpp/main/src/config_manager.cpp @@ -12,13 +12,13 @@ #include #include -#include #include #include #include #include #include "art/runtime/native/native_util.h" #include "config_manager.h" +#include "utils.h" namespace edxp { namespace fs = std::filesystem; 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 9047417ce..45815473b 100644 --- a/edxp-core/src/main/cpp/main/src/config_manager.h +++ b/edxp-core/src/main/cpp/main/src/config_manager.h @@ -48,8 +48,6 @@ namespace edxp { inline auto GetLibSandHookName() const { return kLibSandHookName; } - inline auto GetLibWhaleName() const { return kLibWhaleName; } - inline auto GetDataPathPrefix() const { return data_path_prefix_; } inline auto GetConfigPath(const std::string &suffix) const { diff --git a/edxp-core/src/main/cpp/main/src/edxp_context.h b/edxp-core/src/main/cpp/main/src/edxp_context.h index a25a7bb9c..a89f488ad 100644 --- a/edxp-core/src/main/cpp/main/src/edxp_context.h +++ b/edxp-core/src/main/cpp/main/src/edxp_context.h @@ -15,7 +15,6 @@ namespace edxp { NONE = 0, YAHFA = 1, SANDHOOK = 2, - WHALE = 3 }; class Context { 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 47a938328..1190ce4d9 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 @@ -35,10 +35,6 @@ 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()); } @@ -73,7 +69,6 @@ namespace edxp { 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;"), diff --git a/edxp-core/src/main/cpp/main/src/native_hook.cpp b/edxp-core/src/main/cpp/main/src/native_hook.cpp index bb67be172..c03bb8ab5 100644 --- a/edxp-core/src/main/cpp/main/src/native_hook.cpp +++ b/edxp-core/src/main/cpp/main/src/native_hook.cpp @@ -1,6 +1,5 @@ #include -#include #include #include #include @@ -9,7 +8,7 @@ #include #include #include "android_restriction.h" // from Dobby - +#include "utils.h" #include "logging.h" #include "native_hook.h" #include "riru_hook.h" diff --git a/edxp-core/src/main/cpp/main/src/riru_hook.cpp b/edxp-core/src/main/cpp/main/src/riru_hook.cpp index 66539978d..45d18f304 100644 --- a/edxp-core/src/main/cpp/main/src/riru_hook.cpp +++ b/edxp-core/src/main/cpp/main/src/riru_hook.cpp @@ -8,7 +8,7 @@ #include #include #include -#include +#include "utils.h" #include "riru_hook.h" namespace edxp { diff --git a/edxp-core/template_override/customize.sh b/edxp-core/template_override/customize.sh index 85daef1ab..93083d524 100644 --- a/edxp-core/template_override/customize.sh +++ b/edxp-core/template_override/customize.sh @@ -49,10 +49,6 @@ JAR_EDDEXMAKER="$(getRandomNameExist 8 "" ".dex" " #/system/framework #").jar" LIB_RIRU_EDXP="libriru_${RIRU_EDXP}.so" -LIB_WHALE_EDXP="lib$(getRandomNameExist 10 "lib" ".so" " -/system/lib -/system/lib64 -").so" LIB_SANDHOOK_EDXP="lib$(getRandomNameExist 13 "lib" ".so" " /system/lib /system/lib64 @@ -272,12 +268,10 @@ mv "${MODPATH}/system/framework/edxp.dex" "${MODPATH}/system/framework/${JAR_EDX mv "${MODPATH}/system/framework/eddexmaker.dex" "${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}" mv "${MODPATH}/system/lib/libsandhook-native.so" "${MODPATH}/system/lib/libsandhook-native.so" 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}" mv "${MODPATH}/system/lib64/libsandhook-native.so" "${MODPATH}/system/lib64/libsandhook-native.so" fi @@ -293,14 +287,12 @@ ui_print "- Resetting libraries path" sed -i 's:/system/framework/edxp.dex\:/system/framework/eddalvikdx.dex\:/system/framework/eddexmaker.dex:/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.dex\:/system/framework/eddalvikdx.dex\:/system/framework/eddexmaker.dex:/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 diff --git a/edxp-core/template_override/riru/module.prop.new b/edxp-core/template_override/riru/module.prop.new deleted file mode 100644 index 0df553039..000000000 --- a/edxp-core/template_override/riru/module.prop.new +++ /dev/null @@ -1,6 +0,0 @@ -name=Riru - EdXposed -version=v0.5.0.8 (YAHFA) -versionCode=233 -author=solohsu, MlgmXyysd & rk700 -description=Another enhanced implementation of Xposed Framework. Supports Android 8.0, 8.1, 9, 10 or above. Requires Riru - Core v19 or above installed. Telegram: @EdXposed -minApi=9 diff --git a/edxp-whale/.gitignore b/edxp-whale/.gitignore deleted file mode 100644 index 3a66a1982..000000000 --- a/edxp-whale/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/build -/template_override/system/framework \ No newline at end of file diff --git a/edxp-whale/build.gradle b/edxp-whale/build.gradle deleted file mode 100644 index cf51ea6eb..000000000 --- a/edxp-whale/build.gradle +++ /dev/null @@ -1,71 +0,0 @@ -apply plugin: 'com.android.application' - -sourceCompatibility = "7" -targetCompatibility = "7" - -android { - compileSdkVersion androidCompileSdkVersion.toInteger() - - defaultConfig { - applicationId "com.elderdrivers.riru.edxp.whale" - minSdkVersion 26 - targetSdkVersion 28 - versionCode 1 - versionName "1.0" - multiDexEnabled false - } - - buildTypes { - release { - minifyEnabled true - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - } - } - - ndkVersion androidCompileNdkVersion -} - -dependencies { - compileOnly project(':hiddenapi-stubs') - implementation project(':edxp-common') - compileOnly files(project(":dexmaker").tasks.getByName("makeJarRelease").outputs) -} - - -preBuild.doLast { - def imlFile = file(project.name + ".iml") - try { - def parsedXml = (new groovy.util.XmlParser()).parse(imlFile) - def jdkNode = parsedXml.component[1].orderEntry.find { it.'@type' == 'jdk' } - parsedXml.component[1].remove(jdkNode) - def sdkString = "Android API " + android.compileSdkVersion.substring("android-".length()) + " Platform" - new groovy.util.Node(parsedXml.component[1], 'orderEntry', ['type': 'jdk', 'jdkName': sdkString, 'jdkType': 'Android SDK']) - groovy.xml.XmlUtil.serialize(parsedXml, new FileOutputStream(imlFile)) - } catch (FileNotFoundException e) { - // nop, iml not found - } -} - -afterEvaluate { - - tasks.withType(JavaCompile) { - options.compilerArgs.add("-Xbootclasspath/p:${hiddenApiStubJarFilePath}") - } - - android.applicationVariants.all { variant -> - - def variantNameCapped = variant.name.capitalize() - def variantNameLowered = variant.name.toLowerCase() - - task("copyDex${variantNameCapped}", type: Copy) { - dependsOn "assemble${variantNameCapped}" - dependsOn tasks.getByPath(":edxp-common:copyCommonProperties") - def dexOutPath = "${buildDir}/intermediates/dex/${variantNameLowered}/minify${variantNameCapped}WithR8" - from (dexOutPath){ - rename("classes.dex", "edxp.dex") - } - destinationDir file(templateRootPath + "system/framework/") - outputs.upToDateWhen { false } - } - } -} \ No newline at end of file diff --git a/edxp-whale/proguard-rules.pro b/edxp-whale/proguard-rules.pro deleted file mode 100644 index a998d8b22..000000000 --- a/edxp-whale/proguard-rules.pro +++ /dev/null @@ -1,38 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile - --dontoptimize --dontobfuscate --keep class de.robv.android.xposed.** {*;} --keep class android.** { *; } - --keep interface com.elderdrivers.riru.common.KeepAll --keep interface com.elderdrivers.riru.common.KeepMembers - --keep class * implements com.elderdrivers.riru.common.KeepAll { *; } --keepclassmembers class * implements com.elderdrivers.riru.common.KeepMembers { *; } - --keep class com.lody.** {*;} - --keepclasseswithmembers class * { - native ; -} \ No newline at end of file diff --git a/edxp-whale/src/main/AndroidManifest.xml b/edxp-whale/src/main/AndroidManifest.xml deleted file mode 100644 index 38b7acf37..000000000 --- a/edxp-whale/src/main/AndroidManifest.xml +++ /dev/null @@ -1 +0,0 @@ - diff --git a/edxp-whale/src/main/java/com/elderdrivers/riru/edxp/whale/config/WhaleEdxpConfig.java b/edxp-whale/src/main/java/com/elderdrivers/riru/edxp/whale/config/WhaleEdxpConfig.java deleted file mode 100644 index c02808d79..000000000 --- a/edxp-whale/src/main/java/com/elderdrivers/riru/edxp/whale/config/WhaleEdxpConfig.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.elderdrivers.riru.edxp.whale.config; - -import com.elderdrivers.riru.edxp.config.BaseEdxpConfig; - -public class WhaleEdxpConfig extends BaseEdxpConfig { - -} diff --git a/edxp-whale/src/main/java/com/elderdrivers/riru/edxp/whale/config/WhaleHookProvider.java b/edxp-whale/src/main/java/com/elderdrivers/riru/edxp/whale/config/WhaleHookProvider.java deleted file mode 100644 index 534f4d370..000000000 --- a/edxp-whale/src/main/java/com/elderdrivers/riru/edxp/whale/config/WhaleHookProvider.java +++ /dev/null @@ -1,100 +0,0 @@ -package com.elderdrivers.riru.edxp.whale.config; - -import com.elderdrivers.riru.edxp.art.ClassLinker; -import com.elderdrivers.riru.edxp.art.Heap; -import com.elderdrivers.riru.edxp.config.BaseHookProvider; -import com.elderdrivers.riru.edxp.core.ResourcesHook; -import com.elderdrivers.riru.edxp.core.Yahfa; -import com.elderdrivers.riru.edxp.util.Utils; -import com.lody.whale.WhaleRuntime; - -import java.lang.reflect.Member; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.HashMap; -import java.util.Map; - -import de.robv.android.xposed.XposedBridge; -import de.robv.android.xposed.XposedHelpers; - -import static com.elderdrivers.riru.edxp.util.ClassUtils.shouldDelayHook; - -public class WhaleHookProvider extends BaseHookProvider { - - private static final Map sHookedMethodSlotMap = new HashMap<>(); - - @Override - public void unhookMethod(Member method) { - synchronized (sHookedMethodSlotMap) { - sHookedMethodSlotMap.remove(method); - } - } - - @Override - public void hookMethod(Member method, XposedBridge.AdditionalHookInfo additionalInfo) { -// resolveStaticMethod(method); - long slot = WhaleRuntime.hookMethodNative(method.getDeclaringClass(), method, additionalInfo); - synchronized (sHookedMethodSlotMap) { - sHookedMethodSlotMap.put(method, slot); - } - } - - @Override - public Object invokeOriginalMethod(Member method, long methodId, Object thisObject, Object[] args) throws Throwable { - long slot = sHookedMethodSlotMap.get(method); - return WhaleRuntime.invokeOriginalMethodNative(slot, thisObject, args); - } - - @Override - public Member findMethodNative(Member hookMethod) { - return shouldDelayHook(hookMethod) ? null : hookMethod; - } - - @Override - public Object findMethodNative(Class clazz, String methodName, String methodSig) { - return Yahfa.findMethodNative(clazz, methodName, methodSig); - } - - @Override - public void deoptMethodNative(Object method) { - ClassLinker.setEntryPointsToInterpreter((Member) method); - } - - @Override - public long getMethodId(Member member) { - return WhaleRuntime.getMethodSlot(member); - } - - @Override - public boolean initXResourcesNative() { - return ResourcesHook.initXResourcesNative(); - } - - @Override - public boolean removeFinalFlagNative(Class clazz) { - return ResourcesHook.removeFinalFlagNative(clazz); - } - - - /** - * the static method is lazy resolved, when not resolved, the entry point is a trampoline of - * a bridge, we can not hook these entry. this method force the static method to be resolved. - */ - public static void resolveStaticMethod(Member method) { - //ignore result, just call to trigger resolve - if (method == null) - return; - try { - if (method instanceof Method && Modifier.isStatic(method.getModifiers())) { - ((Method) method).setAccessible(true); - ((Method) method).invoke(new Object(), getFakeArgs((Method) method)); - } - } catch (Exception ignored) { - // we should never make a successful call. - } - } - - private static Object[] getFakeArgs(Method method) { - return method.getParameterTypes().length == 0 ? new Object[]{new Object()} : null; - } -} diff --git a/edxp-whale/src/main/java/com/elderdrivers/riru/edxp/whale/core/WhaleEdxpImpl.java b/edxp-whale/src/main/java/com/elderdrivers/riru/edxp/whale/core/WhaleEdxpImpl.java deleted file mode 100644 index be000b0c5..000000000 --- a/edxp-whale/src/main/java/com/elderdrivers/riru/edxp/whale/core/WhaleEdxpImpl.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.elderdrivers.riru.edxp.whale.core; - -import android.os.Build; - -import com.elderdrivers.riru.edxp.core.BaseEdxpImpl; -import com.elderdrivers.riru.edxp.core.EdxpImpl; -import com.elderdrivers.riru.edxp.core.Main; -import com.elderdrivers.riru.edxp.core.Yahfa; -import com.elderdrivers.riru.edxp.core.yahfa.HookMethodResolver; -import com.elderdrivers.riru.edxp.proxy.Router; - -public class WhaleEdxpImpl extends BaseEdxpImpl { - - static { - final EdxpImpl edxpImpl = new WhaleEdxpImpl(); - if (Main.setEdxpImpl(edxpImpl)) { - edxpImpl.init(); - } - } - - @Override - protected Router createRouter() { - return new WhaleRouter(); - } - - @Override - public int getVariant() { - return WHALE; - } - - @Override - public void init() { - Yahfa.init(Build.VERSION.SDK_INT); - HookMethodResolver.init(); - getRouter().injectConfig(); - setInitialized(); - } - -} 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 deleted file mode 100644 index e58290d34..000000000 --- a/edxp-whale/src/main/java/com/elderdrivers/riru/edxp/whale/core/WhaleRouter.java +++ /dev/null @@ -1,28 +0,0 @@ -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; -import com.elderdrivers.riru.edxp.whale.config.WhaleEdxpConfig; -import com.elderdrivers.riru.edxp.whale.config.WhaleHookProvider; - -public class WhaleRouter extends BaseRouter { - - public void onEnterChildProcess() { - - } - - 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/" + ConfigManager.getLibWhaleName()); - Zygote.allowFileAcrossFork("/system/lib64/" + ConfigManager.getLibWhaleName()); - Zygote.allowFileAcrossFork("/system/lib/libart.so"); - Zygote.allowFileAcrossFork("/system/lib64/libart.so"); - } - -} diff --git a/edxp-whale/src/main/java/com/lody/whale/VMHelper.java b/edxp-whale/src/main/java/com/lody/whale/VMHelper.java deleted file mode 100644 index 392d7fef9..000000000 --- a/edxp-whale/src/main/java/com/lody/whale/VMHelper.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.lody.whale; - -import java.lang.reflect.Constructor; -import java.lang.reflect.Member; -import java.lang.reflect.Method; -import java.util.HashMap; - -/** - * @author Lody - */ -class VMHelper { - - // Holds a mapping from Java type names to native type codes. - private static final HashMap, String> PRIMITIVE_TO_SIGNATURE; - - static { - PRIMITIVE_TO_SIGNATURE = new HashMap<>(9); - PRIMITIVE_TO_SIGNATURE.put(byte.class, "B"); - PRIMITIVE_TO_SIGNATURE.put(char.class, "C"); - PRIMITIVE_TO_SIGNATURE.put(short.class, "S"); - PRIMITIVE_TO_SIGNATURE.put(int.class, "I"); - PRIMITIVE_TO_SIGNATURE.put(long.class, "J"); - PRIMITIVE_TO_SIGNATURE.put(float.class, "F"); - PRIMITIVE_TO_SIGNATURE.put(double.class, "D"); - PRIMITIVE_TO_SIGNATURE.put(void.class, "V"); - PRIMITIVE_TO_SIGNATURE.put(boolean.class, "Z"); - } - - /** - * Returns the internal name of {@code clazz} (also known as the - * descriptor). - */ - private static String getSignature(final Class clazz) { - final String primitiveSignature = PRIMITIVE_TO_SIGNATURE.get(clazz); - if (primitiveSignature != null) { - return primitiveSignature; - } else if (clazz.isArray()) { - return "[" + getSignature(clazz.getComponentType()); - } else { - return "L" + clazz.getName().replace('.', '/') + ";"; - } - } - - /** - * Returns the native type codes of {@code clazz}. - */ - private static String getShortyType(final Class clazz) { - final String primitiveSignature = PRIMITIVE_TO_SIGNATURE.get(clazz); - if (primitiveSignature != null) { - return primitiveSignature; - } - return "L"; - } - - // @SuppressWarnings("ConstantConditions") - private static String getSignature(final Class retType, - final Class[] parameterTypes) { - final StringBuilder result = new StringBuilder(); - - result.append('('); - for (final Class parameterType : parameterTypes) { - result.append(getSignature(parameterType)); - } - result.append(")"); - result.append(getSignature(retType)); - - return result.toString(); - } - - private static String getShorty(final Class retType, - final Class[] parameterTypes) { - final StringBuilder result = new StringBuilder(); - - result.append(getShortyType(retType)); - for (final Class parameterType : parameterTypes) { - result.append(getShortyType(parameterType)); - } - - return result.toString(); - } - - static String getSignature(final Member m) { - if (m instanceof Method) { - final Method md = (Method) m; - return getSignature(md.getReturnType(), md.getParameterTypes()); - } - if (m instanceof Constructor) { - final Constructor c = (Constructor) m; - return getSignature(void.class, c.getParameterTypes()); - } - return null; - } - - static String getShorty(final Member m) { - if (m instanceof Method) { - final Method md = (Method) m; - return getShorty(md.getReturnType(), md.getParameterTypes()); - } - if (m instanceof Constructor) { - final Constructor c = (Constructor) m; - return getShorty(void.class, c.getParameterTypes()); - } - return null; - } -} diff --git a/edxp-whale/src/main/java/com/lody/whale/WhaleRuntime.java b/edxp-whale/src/main/java/com/lody/whale/WhaleRuntime.java deleted file mode 100644 index 2c0904e49..000000000 --- a/edxp-whale/src/main/java/com/lody/whale/WhaleRuntime.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.lody.whale; - -import android.os.Build; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Member; -import java.lang.reflect.Method; - -import de.robv.android.xposed.XposedBridge; - -/** - * @author Lody - *

- * NOTICE: Do not move or rename any methods in this class. - */ -public class WhaleRuntime { - - static { - System.loadLibrary("whale.edxp"); - } - - private static String getShorty(Member member) { - return VMHelper.getShorty(member); - } - - public static long[] countInstancesOfClasses(Class[] classes, boolean assignable) { - if (Build.VERSION.SDK_INT < 27) { - throw new UnsupportedOperationException("Not support countInstancesOfClasses on your device yet."); - } - try { - Class clazz = Class.forName("dalvik.system.VMDebug"); - Method method = clazz.getDeclaredMethod("countInstancesOfClasses", Class[].class, boolean.class); - return (long[]) method.invoke(null, classes, assignable); - } catch (Throwable e) { - throw new IllegalStateException(e); - } - } - - public static Object[][] getInstancesOfClasses(Class[] classes, boolean assignable) { - if (Build.VERSION.SDK_INT < 28) { - throw new UnsupportedOperationException("Not support getInstancesOfClasses on your device yet."); - } - try { - Class clazz = Class.forName("dalvik.system.VMDebug"); - Method method = clazz.getDeclaredMethod("getInstancesOfClasses", Class[].class, boolean.class); - return (Object[][]) method.invoke(null, classes, assignable); - } catch (Throwable e) { - throw new IllegalStateException(e); - } - } - - public static Object handleHookedMethod(Member member, long slot, Object additionInfo, Object thisObject, Object[] args) throws Throwable { - return XposedBridge.handleHookedMethod(member, slot, additionInfo, thisObject, args); - } - - public static native Object invokeOriginalMethodNative(long slot, Object thisObject, Object[] args) - throws IllegalAccessException, IllegalArgumentException, InvocationTargetException; - - public static native long getMethodSlot(Member member) throws IllegalArgumentException; - - public static native long hookMethodNative(Class declClass, Member method, Object additionInfo); - - public static native void setObjectClassNative(Object object, Class parent); - - public static native Object cloneToSubclassNative(Object object, Class subClass); - - public static native void removeFinalFlagNative(Class cl); - - public static native void enforceDisableHiddenAPIPolicy(); - - private static native void reserved0(); - - private static native void reserved1(); -} diff --git a/edxp-whale/template_override/system/etc/public.libraries-edxp.txt b/edxp-whale/template_override/system/etc/public.libraries-edxp.txt deleted file mode 100644 index 55a4cc173..000000000 --- a/edxp-whale/template_override/system/etc/public.libraries-edxp.txt +++ /dev/null @@ -1 +0,0 @@ -libwhale.edxp.so diff --git a/edxp-whale/template_override/system/framework/edxp.dex b/edxp-whale/template_override/system/framework/edxp.dex new file mode 100644 index 0000000000000000000000000000000000000000..9a517a23e409f6ad1b8566b377a94e9b7441e80d GIT binary patch literal 145956 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