Shamrock: add switch of anti trace

This commit is contained in:
Simplxs 2023-11-26 16:16:10 +08:00
parent f63bcabf1b
commit 4a4507dfcd
No known key found for this signature in database
GPG Key ID: E23537FF14DD6507
7 changed files with 42 additions and 18 deletions

View File

@ -224,6 +224,16 @@ object ShamrockConfig {
preferences.edit().putBoolean("debug", v).apply() preferences.edit().putBoolean("debug", v).apply()
} }
fun isAntiTrace(ctx: Context): Boolean {
val preferences = ctx.getSharedPreferences("config", 0)
return preferences.getBoolean("anti_qq_trace", true)
}
fun setAntiTrace(ctx: Context, v: Boolean) {
val preferences = ctx.getSharedPreferences("config", 0)
preferences.edit().putBoolean("anti_qq_trace", v).apply()
}
fun isInjectPacket(ctx: Context): Boolean { fun isInjectPacket(ctx: Context): Boolean {
val preferences = ctx.getSharedPreferences("config", 0) val preferences = ctx.getSharedPreferences("config", 0)
return preferences.getBoolean("inject_packet", false) return preferences.getBoolean("inject_packet", false)
@ -293,6 +303,7 @@ object ShamrockConfig {
"ssl_pwd" to preferences.getString("ssl_pwd", ""), "ssl_pwd" to preferences.getString("ssl_pwd", ""),
"inject_packet" to preferences.getBoolean("inject_packet", false), "inject_packet" to preferences.getBoolean("inject_packet", false),
"debug" to preferences.getBoolean("debug", false), "debug" to preferences.getBoolean("debug", false),
"anti_qq_trace" to preferences.getBoolean("anti_qq_trace", true),
"auto_clear" to preferences.getBoolean("auto_clear", false), "auto_clear" to preferences.getBoolean("auto_clear", false),
"ssl_private_pwd" to preferences.getString("ssl_private_pwd", ""), "ssl_private_pwd" to preferences.getString("ssl_private_pwd", ""),
"key_store" to preferences.getString("key_store", ""), "key_store" to preferences.getString("key_store", ""),

View File

@ -1,7 +1,6 @@
package moe.fuqiuluo.shamrock.ui.fragment package moe.fuqiuluo.shamrock.ui.fragment
import android.content.Context import android.content.Context
import android.widget.Toast
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.absolutePadding import androidx.compose.foundation.layout.absolutePadding
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
@ -85,6 +84,17 @@ fun LabFragment() {
ShamrockConfig.pushUpdate(ctx) ShamrockConfig.pushUpdate(ctx)
return@Function true return@Function true
} }
Function(
title = "防止调用栈检测",
desc = "防止QQ进行堆栈跟踪检测需要重新启动QQ。",
descColor = it,
isSwitch = ShamrockConfig.isAntiTrace(ctx)
) {
ShamrockConfig.setAntiTrace(ctx, it)
ShamrockConfig.pushUpdate(ctx)
return@Function true
}
} }
} }

View File

@ -33,7 +33,7 @@ public class MMKV implements SharedPreferences, SharedPreferences.Editor {
return null; return null;
} }
public SharedPreferences.Editor putBoolean(String str, boolean z) { public SharedPreferences.Editor putBoolean(String s, boolean z) {
return this; return this;
} }

View File

@ -96,5 +96,11 @@ dependencies {
//ksp("androidx.room:room-compiler:$roomVersion") //ksp("androidx.room:room-compiler:$roomVersion")
// optional - Kotlin Extensions and Coroutines support for Room // optional - Kotlin Extensions and Coroutines support for Room
implementation("androidx.room:room-ktx:$roomVersion") implementation("androidx.room:room-ktx:$roomVersion")
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.1.5")
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
androidTestImplementation(platform("androidx.compose:compose-bom:2023.06.01"))
androidTestImplementation("androidx.compose.ui:ui-test-junit4")
} }

View File

@ -7,7 +7,6 @@ import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import moe.fuqiuluo.shamrock.remote.service.api.WebSocketClientServlet import moe.fuqiuluo.shamrock.remote.service.api.WebSocketClientServlet
import moe.fuqiuluo.shamrock.remote.service.data.push.*
import moe.fuqiuluo.shamrock.helper.Level import moe.fuqiuluo.shamrock.helper.Level
import moe.fuqiuluo.shamrock.helper.LogCenter import moe.fuqiuluo.shamrock.helper.LogCenter
import moe.fuqiuluo.shamrock.remote.service.api.GlobalEventTransmitter import moe.fuqiuluo.shamrock.remote.service.api.GlobalEventTransmitter
@ -35,7 +34,7 @@ internal class WebSocketClientService(
} }
}) })
submitFlowJob(GlobalScope.launch { submitFlowJob(GlobalScope.launch {
GlobalEventTransmitter.onRequestEvent() { event -> GlobalEventTransmitter.onRequestEvent { event ->
pushTo(event) pushTo(event)
} }
}) })

View File

@ -33,16 +33,17 @@ internal object ShamrockConfig {
val mmkv = MMKVFetcher.mmkvWithId("shamrock_config") val mmkv = MMKVFetcher.mmkvWithId("shamrock_config")
mmkv.apply { mmkv.apply {
putBoolean( "tablet", intent.getBooleanExtra("tablet", false)) // 强制平板模式 putBoolean( "tablet", intent.getBooleanExtra("tablet", false)) // 强制平板模式
putInt( "port", intent.getIntExtra("port", 5700)) // 主动HTTP端口 putInt( "port", intent.getIntExtra("port", 5700)) // 主动HTTP端口
putBoolean( "ws", intent.getBooleanExtra("ws", false)) // 主动WS开关 putBoolean( "ws", intent.getBooleanExtra("ws", false)) // 主动WS开关
putBoolean( "http", intent.getBooleanExtra("http", false)) // HTTP回调开关 putBoolean( "http", intent.getBooleanExtra("http", false)) // HTTP回调开关
putString( "http_addr", intent.getStringExtra("http_addr")) // WebHook回调地址 putString( "http_addr", intent.getStringExtra("http_addr")) // WebHook回调地址
putBoolean( "ws_client", intent.getBooleanExtra("ws_client", false)) // 被动WS开关 putBoolean( "ws_client", intent.getBooleanExtra("ws_client", false)) // 被动WS开关
putBoolean( "use_cqcode", intent.getBooleanExtra("use_cqcode", false)) // 使用CQ码 putBoolean( "use_cqcode", intent.getBooleanExtra("use_cqcode", false)) // 使用CQ码
putBoolean( "inject_packet", intent.getBooleanExtra("inject_packet", false)) // 拦截无用包 putBoolean( "inject_packet", intent.getBooleanExtra("inject_packet", false)) // 拦截无用包
putBoolean( "debug", intent.getBooleanExtra("debug", false)) // 调试模式 putBoolean( "debug", intent.getBooleanExtra("debug", false)) // 调试模式
Config.defaultToken = intent.getStringExtra("token") Config.defaultToken = intent.getStringExtra("token")
Config.antiTrace = intent.getBooleanExtra("anti_qq_trace", true)
val wsPort = intent.getIntExtra("ws_port", 5800) val wsPort = intent.getIntExtra("ws_port", 5800)
Config.activeWebSocket = if (Config.activeWebSocket == null) ConnectionConfig( Config.activeWebSocket = if (Config.activeWebSocket == null) ConnectionConfig(
@ -58,16 +59,16 @@ internal object ShamrockConfig {
ConnectionConfig(address = it) ConnectionConfig(address = it)
}?.toMutableList() }?.toMutableList()
putString( "key_store", intent.getStringExtra("key_store")) // 证书路径 putString( "key_store", intent.getStringExtra("key_store")) // 证书路径
putString( "ssl_pwd", intent.getStringExtra("ssl_pwd")) // 证书密码 putString( "ssl_pwd", intent.getStringExtra("ssl_pwd")) // 证书密码
putString( "ssl_private_pwd", intent.getStringExtra("ssl_private_pwd")) // 证书私钥密码 putString( "ssl_private_pwd", intent.getStringExtra("ssl_private_pwd")) // 证书私钥密码
putString( "ssl_alias", intent.getStringExtra("ssl_alias")) // 证书别名 putString( "ssl_alias", intent.getStringExtra("ssl_alias")) // 证书别名
putInt( "ssl_port", intent.getIntExtra("ssl_port", 5701)) // 主动HTTP端口 putInt( "ssl_port", intent.getIntExtra("ssl_port", 5701)) // 主动HTTP端口
putBoolean("auto_clear", intent.getBooleanExtra("auto_clear", false)) // 自动清理 putBoolean("auto_clear", intent.getBooleanExtra("auto_clear", false)) // 自动清理
putBoolean("enable_self_msg", intent.getBooleanExtra("enable_self_msg", false)) // 推送自己发的消息 putBoolean("enable_self_msg", intent.getBooleanExtra("enable_self_msg", false)) // 推送自己发的消息
putBoolean("shell", intent.getBooleanExtra("shell", false)) // 开启Shell接口 putBoolean("shell", intent.getBooleanExtra("shell", false)) // 开启Shell接口
putBoolean("isInit", true) putBoolean("isInit", true)
} }

View File

@ -5,16 +5,13 @@ 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.os.Build import android.os.Build
import de.robv.android.xposed.XC_MethodHook
import de.robv.android.xposed.XC_MethodReplacement import de.robv.android.xposed.XC_MethodReplacement
import de.robv.android.xposed.XposedBridge
import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.XposedHelpers
import moe.fuqiuluo.shamrock.helper.Level import moe.fuqiuluo.shamrock.helper.Level
import moe.fuqiuluo.shamrock.helper.LogCenter import moe.fuqiuluo.shamrock.helper.LogCenter
import moe.fuqiuluo.shamrock.remote.service.config.ShamrockConfig import moe.fuqiuluo.shamrock.remote.service.config.ShamrockConfig
import moe.fuqiuluo.shamrock.tools.hookMethod import moe.fuqiuluo.shamrock.tools.hookMethod
import moe.fuqiuluo.shamrock.xposed.loader.LuoClassloader import moe.fuqiuluo.shamrock.xposed.loader.LuoClassloader
import mqq.app.MobileQQ
/** /**
* 反检测 * 反检测