Shamrock: Anti Provider Detection

This commit is contained in:
白池 2024-02-02 09:12:36 +08:00
parent a22dc50f14
commit 262af4108b
3 changed files with 22 additions and 2 deletions

View File

@ -31,7 +31,7 @@
<provider <provider
android:name=".ui.service.internal.MultifunctionalProvider" android:name=".ui.service.internal.MultifunctionalProvider"
android:authorities="moe.fuqiuluo.xqbot.provider" android:authorities="moe.fuqiuluo.108.provider"
android:exported="true" android:exported="true"
android:grantUriPermissions="true" android:grantUriPermissions="true"
tools:ignore="ExportedContentProvider" /> tools:ignore="ExportedContentProvider" />

View File

@ -3,9 +3,11 @@ package moe.fuqiuluo.shamrock.xposed.helper
import android.content.ContentValues import android.content.ContentValues
import android.net.Uri import android.net.Uri
import mqq.app.MobileQQ import mqq.app.MobileQQ
import kotlin.random.Random
internal object AppTalker { internal object AppTalker {
private val URI = Uri.parse("content://moe.fuqiuluo.xqbot.provider") val uriName = "content://moe.fuqiuluo.108.provider" // 你是真的闲,这都上个检测
val URI = Uri.parse(uriName)
fun talk(values: ContentValues, onFailure: ((Throwable) -> Unit)? = null) { fun talk(values: ContentValues, onFailure: ((Throwable) -> Unit)? = null) {
val ctx = MobileQQ.getContext() val ctx = MobileQQ.getContext()

View File

@ -1,9 +1,12 @@
@file:Suppress("UNCHECKED_CAST", "LocalVariableName") @file:Suppress("UNCHECKED_CAST", "LocalVariableName")
package moe.fuqiuluo.shamrock.xposed.hooks package moe.fuqiuluo.shamrock.xposed.hooks
import android.content.ContentProviderClient
import android.content.ContentResolver
import android.content.Context import android.content.Context
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.content.pm.VersionedPackage import android.content.pm.VersionedPackage
import android.net.Uri
import android.os.Build import android.os.Build
import android.os.Looper import android.os.Looper
import de.robv.android.xposed.XC_MethodReplacement import de.robv.android.xposed.XC_MethodReplacement
@ -15,6 +18,7 @@ import moe.fuqiuluo.shamrock.remote.service.config.ShamrockConfig
import moe.fuqiuluo.shamrock.tools.MethodHooker import moe.fuqiuluo.shamrock.tools.MethodHooker
import moe.fuqiuluo.shamrock.tools.hookMethod import moe.fuqiuluo.shamrock.tools.hookMethod
import moe.fuqiuluo.shamrock.xposed.XposedEntry import moe.fuqiuluo.shamrock.xposed.XposedEntry
import moe.fuqiuluo.shamrock.xposed.helper.AppTalker
import moe.fuqiuluo.shamrock.xposed.loader.LuoClassloader import moe.fuqiuluo.shamrock.xposed.loader.LuoClassloader
import moe.fuqiuluo.shamrock.xposed.loader.NativeLoader import moe.fuqiuluo.shamrock.xposed.loader.NativeLoader
import moe.fuqiuluo.symbols.XposedHook import moe.fuqiuluo.symbols.XposedHook
@ -25,12 +29,26 @@ class AntiDetection: IAction {
override fun invoke(ctx: Context) { override fun invoke(ctx: Context) {
antiFindPackage(ctx) antiFindPackage(ctx)
antiProviderDetection()
antiNativeDetection() antiNativeDetection()
if (ShamrockConfig.isAntiTrace()) if (ShamrockConfig.isAntiTrace())
antiTrace() antiTrace()
antiMemoryWalking() antiMemoryWalking()
} }
private fun antiProviderDetection() {
ContentResolver::class.java.hookMethod("acquireContentProviderClient").before {
val uri = it.args[0] as String
if (uri == "moe.fuqiuluo.108.provider" || uri == "moe.fuqiuluo.xqbot.provider") {
it.result = null
LogCenter.log("AntiDetection: 检测到对Shamrock的检测欺骗ContentResolver", Level.WARN)
}
//else {
// LogCenter.log(uri)
//}
}
}
val isModuleStack = fun String.(): Boolean { val isModuleStack = fun String.(): Boolean {
return contains("fuqiuluo") || contains("shamrock") || contains("whitechi") || contains("lsposed") || contains("xposed") return contains("fuqiuluo") || contains("shamrock") || contains("whitechi") || contains("lsposed") || contains("xposed")
} }