diff --git a/core/src/main/golang/native/config/process.go b/core/src/main/golang/native/config/process.go
index 90d0b370169b0fe37de082ee1a6b307b4fdb7982..4344f8db3ab0fc74a9f84785fdb9a01eb5729f61 100644
--- a/core/src/main/golang/native/config/process.go
+++ b/core/src/main/golang/native/config/process.go
@@ -23,7 +23,6 @@ var processors = []processor{
 	patchDns,
 	patchProviders,
 	patchTun,
-	patchSniff,
 	validConfig,
 }
 
@@ -106,5 +105,7 @@ func process(cfg *config.RawConfig, profileDir string) error {
 		}
 	}
 
+	log.Debugln("sni-tls: %t", cfg.Experimental.SniffTLSSNI)
+
 	return nil
 }
diff --git a/core/src/main/golang/native/config/process_open.go b/core/src/main/golang/native/config/process_open.go
index c9808ff4221b6642d3029bdf3db13af9a545d225..bde4a3a3a5bb4a90df520d4fb29f94896d432815 100644
--- a/core/src/main/golang/native/config/process_open.go
+++ b/core/src/main/golang/native/config/process_open.go
@@ -7,7 +7,3 @@ import "github.com/Dreamacro/clash/config"
 func patchTun(cfg *config.RawConfig, _ string) error {
 	return nil
 }
-
-func patchSniff(cfg *config.RawConfig, _ string) error {
-	return nil
-}
diff --git a/core/src/main/golang/native/config/process_premium.go b/core/src/main/golang/native/config/process_premium.go
index 71d3c1db1477de5b88e487b4f7185e9b3e52fe06..570b4ec6c8cf503fddc1da3c60565bb6753803b3 100644
--- a/core/src/main/golang/native/config/process_premium.go
+++ b/core/src/main/golang/native/config/process_premium.go
@@ -9,9 +9,3 @@ func patchTun(cfg *config.RawConfig, _ string) error {
 
 	return nil
 }
-
-func patchSniff(cfg *config.RawConfig, _ string) error {
-	cfg.Experimental.SniffTLSSNI = true
-
-	return nil
-}
\ No newline at end of file
diff --git a/core/src/main/java/com/github/kr328/clash/core/model/ConfigurationOverride.kt b/core/src/main/java/com/github/kr328/clash/core/model/ConfigurationOverride.kt
index 43a4ab2303d29bfc381479616fc90f19c805e404..43dbdb8968396aa30aa360c4ffb8096d59e85fcf 100644
--- a/core/src/main/java/com/github/kr328/clash/core/model/ConfigurationOverride.kt
+++ b/core/src/main/java/com/github/kr328/clash/core/model/ConfigurationOverride.kt
@@ -49,6 +49,9 @@ data class ConfigurationOverride(
 
     @SerialName("clash-for-android")
     val app: App = App(),
+
+    @SerialName("experimental")
+    val experimental: Experimental = Experimental()
 ) : Parcelable {
     @Serializable
     data class Dns(
@@ -107,6 +110,12 @@ data class ConfigurationOverride(
         var appendSystemDns: Boolean? = null
     )
 
+    @Serializable
+    data class Experimental(
+        @SerialName("sniff-tls-sni")
+        var sniffTLSSNI: Boolean? = null,
+    )
+
     @Serializable
     enum class DnsEnhancedMode {
         @SerialName("normal")
diff --git a/design/src/main/java/com/github/kr328/clash/design/OverrideSettingsDesign.kt b/design/src/main/java/com/github/kr328/clash/design/OverrideSettingsDesign.kt
index ba91d6b42702b645666f7e1e165adbb0e6b6d839..21479136c33a29dc2d691983724eddda12d33d6c 100644
--- a/design/src/main/java/com/github/kr328/clash/design/OverrideSettingsDesign.kt
+++ b/design/src/main/java/com/github/kr328/clash/design/OverrideSettingsDesign.kt
@@ -223,6 +223,15 @@ class OverrideSettingsDesign(
                 )
             }
 
+            if (BuildConfig.PREMIUM) {
+                selectableList(
+                    value = configuration.experimental::sniffTLSSNI,
+                    values = booleanValues,
+                    valuesText = booleanValuesText,
+                    title = R.string.sniff_tls_sni,
+                )
+            }
+
             selectableList(
                 value = configuration::logLevel,
                 values = arrayOf(
diff --git a/design/src/main/res/values-zh/strings.xml b/design/src/main/res/values-zh/strings.xml
index 3233e568a190350fb7803a1b0585fea23c0359d2..0892352905dde1e47d9759171eb12dfcb5729c24 100644
--- a/design/src/main/res/values-zh/strings.xml
+++ b/design/src/main/res/values-zh/strings.xml
@@ -216,4 +216,5 @@
     <string name="geoip_fallback_code">GeoIP Fallback 区域代码</string>
     <string name="allow_bypass">允许应用绕过</string>
     <string name="allow_bypass_summary">允许其他应用绕过 VPN</string>
+    <string name="sniff_tls_sni">嗅探 TLS 的 SNI</string>
 </resources>
\ No newline at end of file
diff --git a/design/src/main/res/values/strings.xml b/design/src/main/res/values/strings.xml
index 5f44ad298ae943b175c0f25c047640a27631c324..4086bbb263f97d7684941832ff6a0ce910678af1 100644
--- a/design/src/main/res/values/strings.xml
+++ b/design/src/main/res/values/strings.xml
@@ -145,6 +145,7 @@
     <string name="bind_address">Bind Address</string>
     <string name="mode">Mode</string>
     <string name="log_level">Log Level</string>
+    <string name="sniff_tls_sni">Sniff TLS SNI</string>
     <string name="ipv6">IPv6</string>
     <string name="hosts">Hosts</string>
     <string name="sideload_geoip">Sideload GEOIP</string>