From 76bd58d984e9da06ef5e51d7925d03c66577b10c Mon Sep 17 00:00:00 2001 From: WhiteChi Date: Thu, 30 Nov 2023 21:33:32 +0800 Subject: [PATCH] =?UTF-8?q?`Shamrock`:=20=E3=82=B9=E3=83=BC=E3=83=91?= =?UTF-8?q?=E3=83=BC=E3=82=A2=E3=83=B3=E3=83=81=E3=83=81=E3=82=A7=E3=83=83?= =?UTF-8?q?=E3=82=AF=E3=81=AE=E3=82=AA=E3=83=95=E3=82=92=E8=A8=B1=E5=8F=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fuqiuluo/shamrock/ui/fragment/LabFragment.kt | 13 ++++++++++++- .../moe/fuqiuluo/shamrock/ui/theme/Strings.kt | 2 ++ xposed/src/main/cpp/clover.cpp | 15 ++++++++++++--- .../shamrock/xposed/actions/AntiDetection.kt | 14 +++++++++++++- 4 files changed, 39 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/moe/fuqiuluo/shamrock/ui/fragment/LabFragment.kt b/app/src/main/java/moe/fuqiuluo/shamrock/ui/fragment/LabFragment.kt index d072baf..84e0925 100644 --- a/app/src/main/java/moe/fuqiuluo/shamrock/ui/fragment/LabFragment.kt +++ b/app/src/main/java/moe/fuqiuluo/shamrock/ui/fragment/LabFragment.kt @@ -164,11 +164,22 @@ fun LabFragment() { isSwitch = it.getBoolean("persistent", false) ) { v -> it.edit().putBoolean("persistent", v).apply() + scope.toast(ctx, LocalString.restartSysToast) + return@Function true + } + + Function( + title = "反检测加强", + desc = "可能导致某些设备频繁闪退", + descColor = color, + isSwitch = it.getBoolean("super_anti", false) + ) { v -> + it.edit().putBoolean("super_anti", v).apply() scope.toast(ctx, LocalString.restartToast) return@Function true } }.onFailure { - AppRuntime.log("无法启用免死金牌选项,当前Lsposed模块未激活或者不支持NewSharedPreferences。", Level.WARN) + AppRuntime.log("无法启用附加选项,LSPosed模块未激活或者不支持XSharedPreferences", Level.WARN) } } diff --git a/app/src/main/java/moe/fuqiuluo/shamrock/ui/theme/Strings.kt b/app/src/main/java/moe/fuqiuluo/shamrock/ui/theme/Strings.kt index 7ce0078..d3cf301 100644 --- a/app/src/main/java/moe/fuqiuluo/shamrock/ui/theme/Strings.kt +++ b/app/src/main/java/moe/fuqiuluo/shamrock/ui/theme/Strings.kt @@ -112,6 +112,7 @@ private open class Default: VarString( b2Mode = "中二病模式", b2ModeDesc = "也许会导致奇怪的问题,大抵就是你看不懂罢了。", restartToast = "重启生效哦!", + restartSysToast = "重启系统生效哦!", showDebugLog = "显示调试日志", showDebugLogDesc = "会导致日志刷屏。", antiTrace = "防止调用栈检测", @@ -150,6 +151,7 @@ open class VarString( var b2ModeDesc: String, var restartToast: String, + var restartSysToast: String, var showDebugLog: String, var showDebugLogDesc: String, diff --git a/xposed/src/main/cpp/clover.cpp b/xposed/src/main/cpp/clover.cpp index e4d0516..796c427 100644 --- a/xposed/src/main/cpp/clover.cpp +++ b/xposed/src/main/cpp/clover.cpp @@ -84,6 +84,8 @@ int fake_system_property_get(const char *name, char *value) { return backup_system_property_get(name, value); } + + FILE* fake_fopen(const char *filename, const char *mode) { if (strstr(filename, "qemu_pipe")) { LOGI("[Shamrock] bypass qemu detection"); @@ -107,8 +109,15 @@ NativeOnModuleLoaded native_init(const NativeAPIEntries *entries) { hook_function = entries->hook_func; LOGI("[Shamrock] LSPosed NativeModule Init: %p", hook_function); - hook_function((void*) __system_property_get, (void *)fake_system_property_get, (void **) &backup_system_property_get); - hook_function((void*) fopen, (void*) fake_fopen, (void**) &backup_fopen); - return on_library_loaded; } + +extern "C" +JNIEXPORT jboolean JNICALL +Java_moe_fuqiuluo_shamrock_xposed_actions_AntiDetection_antiNativeDetections(JNIEnv *env, + jobject thiz) { + if (hook_function == nullptr) return false; + hook_function((void*) __system_property_get, (void *)fake_system_property_get, (void **) &backup_system_property_get); + hook_function((void*) fopen, (void*) fake_fopen, (void**) &backup_fopen); + return true; +} \ No newline at end of file diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/xposed/actions/AntiDetection.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/xposed/actions/AntiDetection.kt index 6507dc8..3bb7b94 100644 --- a/xposed/src/main/java/moe/fuqiuluo/shamrock/xposed/actions/AntiDetection.kt +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/xposed/actions/AntiDetection.kt @@ -6,6 +6,7 @@ import android.content.pm.PackageManager import android.content.pm.VersionedPackage import android.os.Build import de.robv.android.xposed.XC_MethodReplacement +import de.robv.android.xposed.XSharedPreferences import de.robv.android.xposed.XposedBridge import de.robv.android.xposed.XposedHelpers import moe.fuqiuluo.shamrock.helper.Level @@ -13,6 +14,7 @@ import moe.fuqiuluo.shamrock.helper.LogCenter import moe.fuqiuluo.shamrock.remote.service.config.ShamrockConfig import moe.fuqiuluo.shamrock.tools.hookMethod import moe.fuqiuluo.shamrock.xposed.XposedEntry +import moe.fuqiuluo.shamrock.xposed.loader.FuckAMS import moe.fuqiuluo.shamrock.xposed.loader.LuoClassloader import moe.fuqiuluo.shamrock.xposed.loader.NativeLoader @@ -20,6 +22,8 @@ import moe.fuqiuluo.shamrock.xposed.loader.NativeLoader * 反检测 */ class AntiDetection: IAction { + external fun antiNativeDetections(): Boolean + override fun invoke(ctx: Context) { antiFindPackage(ctx) antiNativeDetection() @@ -49,7 +53,15 @@ class AntiDetection: IAction { LogCenter.log("[Shamrock] Shamrock反检测启动失败(env=$env, injected=$injected)", Level.ERROR) } else { XposedEntry.sec_static_nativehook_inited = true - LogCenter.log("[Shamrock] Shamrock反检测启动成功", Level.INFO) + val pref = XSharedPreferences("moe.fuqiuluo.shamrock", "shared_config") + if (pref.file.canRead()) { + if (pref.getBoolean("super_anti", false)) { + antiNativeDetections() + LogCenter.log("[Shamrock] Shamrock反检测启动成功", Level.INFO) + } + } else { + LogCenter.log("[Shamrock] unable to load XSharedPreferences", Level.WARN) + } } } catch (e: Throwable) { LogCenter.log("[Shamrock] Shamrock反检测启动失败,请检查LSPosed版本使用大于100: ${e.message}", Level.ERROR)