Step 7: Add susfs interface
This commit is contained in:
@@ -24,10 +24,10 @@ import androidx.compose.material.icons.rounded.DeveloperMode
|
||||
import androidx.compose.material.icons.rounded.EnhancedEncryption
|
||||
import androidx.compose.material.icons.rounded.Fence
|
||||
import androidx.compose.material.icons.rounded.FolderDelete
|
||||
import androidx.compose.material.icons.rounded.Palette
|
||||
import androidx.compose.material.icons.rounded.RemoveCircle
|
||||
import androidx.compose.material.icons.rounded.RemoveModerator
|
||||
import androidx.compose.material.icons.rounded.RestartAlt
|
||||
import androidx.compose.material.icons.rounded.Settings
|
||||
import androidx.compose.material.icons.rounded.Update
|
||||
import androidx.compose.material.icons.rounded.UploadFile
|
||||
import androidx.compose.runtime.Composable
|
||||
@@ -54,6 +54,7 @@ import com.ramcosta.composedestinations.generated.destinations.AppProfileTemplat
|
||||
import com.ramcosta.composedestinations.generated.destinations.LogViewerDestination
|
||||
import com.ramcosta.composedestinations.generated.destinations.KpmScreenDestination
|
||||
import com.ramcosta.composedestinations.generated.destinations.PersonalizationDestination
|
||||
import com.ramcosta.composedestinations.generated.destinations.SuSFSConfigScreenDestination
|
||||
import com.ramcosta.composedestinations.generated.destinations.ToolsDestination
|
||||
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
|
||||
import dev.chrisbanes.haze.HazeState
|
||||
@@ -308,6 +309,34 @@ fun SettingPager(
|
||||
}
|
||||
}
|
||||
|
||||
KsuIsValid {
|
||||
Card(
|
||||
modifier = Modifier
|
||||
.padding(top = 12.dp)
|
||||
.fillMaxWidth(),
|
||||
colors = wallpaperCardColors(),
|
||||
) {
|
||||
val susfsTitle = stringResource(id = R.string.susfs_config_title)
|
||||
SuperArrow(
|
||||
title = susfsTitle,
|
||||
summary = stringResource(id = R.string.susfs_config_summary),
|
||||
leftAction = {
|
||||
Icon(
|
||||
Icons.Rounded.Settings,
|
||||
modifier = Modifier.padding(end = 16.dp),
|
||||
contentDescription = susfsTitle,
|
||||
tint = colorScheme.onBackground
|
||||
)
|
||||
},
|
||||
onClick = {
|
||||
navigator.navigate(SuSFSConfigScreenDestination) {
|
||||
launchSingleTop = true
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
KsuIsValid {
|
||||
Card(
|
||||
modifier = Modifier
|
||||
|
||||
1859
manager/app/src/main/java/com/sukisu/ultra/ui/susfs/SuSFSConfig.kt
Normal file
1859
manager/app/src/main/java/com/sukisu/ultra/ui/susfs/SuSFSConfig.kt
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,550 @@
|
||||
package com.sukisu.ultra.ui.susfs.util
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
|
||||
/**
|
||||
* Magisk模块脚本生成器
|
||||
* 用于生成各种启动脚本的内容
|
||||
*/
|
||||
object ScriptGenerator {
|
||||
|
||||
// 常量定义
|
||||
private const val DEFAULT_UNAME = "default"
|
||||
private const val DEFAULT_BUILD_TIME = "default"
|
||||
private const val LOG_DIR = "/data/adb/ksu/log"
|
||||
|
||||
/**
|
||||
* 生成所有脚本文件
|
||||
*/
|
||||
fun generateAllScripts(config: SuSFSManager.ModuleConfig): Map<String, String> {
|
||||
return mapOf(
|
||||
"service.sh" to generateServiceScript(config),
|
||||
"post-fs-data.sh" to generatePostFsDataScript(config),
|
||||
"post-mount.sh" to generatePostMountScript(config),
|
||||
"boot-completed.sh" to generateBootCompletedScript(config)
|
||||
)
|
||||
}
|
||||
|
||||
// 日志相关的通用脚本片段
|
||||
private fun generateLogSetup(logFileName: String): String = """
|
||||
# 日志目录
|
||||
LOG_DIR="$LOG_DIR"
|
||||
LOG_FILE="${'$'}LOG_DIR/$logFileName"
|
||||
|
||||
# 创建日志目录
|
||||
mkdir -p "${'$'}LOG_DIR"
|
||||
|
||||
# 获取当前时间
|
||||
get_current_time() {
|
||||
date '+%Y-%m-%d %H:%M:%S'
|
||||
}
|
||||
""".trimIndent()
|
||||
|
||||
// 二进制文件检查的通用脚本片段
|
||||
private fun generateBinaryCheck(targetPath: String): String = """
|
||||
# 检查SuSFS二进制文件
|
||||
SUSFS_BIN="$targetPath"
|
||||
if [ ! -f "${'$'}SUSFS_BIN" ]; then
|
||||
echo "$(get_current_time): SuSFS二进制文件未找到: ${'$'}SUSFS_BIN" >> "${'$'}LOG_FILE"
|
||||
exit 1
|
||||
fi
|
||||
""".trimIndent()
|
||||
|
||||
/**
|
||||
* 生成service.sh脚本内容
|
||||
*/
|
||||
@SuppressLint("SdCardPath")
|
||||
private fun generateServiceScript(config: SuSFSManager.ModuleConfig): String {
|
||||
return buildString {
|
||||
appendLine("#!/system/bin/sh")
|
||||
appendLine("# SuSFS Service Script")
|
||||
appendLine("# 在系统服务启动后执行")
|
||||
appendLine()
|
||||
appendLine(generateLogSetup("susfs_service.log"))
|
||||
appendLine()
|
||||
appendLine(generateBinaryCheck(config.targetPath))
|
||||
appendLine()
|
||||
|
||||
if (shouldConfigureInService(config)) {
|
||||
// 添加SUS路径
|
||||
if (config.susPaths.isNotEmpty()) {
|
||||
appendLine()
|
||||
appendLine("until [ -d \"/sdcard/Android\" ]; do sleep 1; done")
|
||||
appendLine("sleep 45")
|
||||
generateSusPathsSection(config.susPaths)
|
||||
}
|
||||
|
||||
// 设置uname和构建时间
|
||||
generateUnameSection(config)
|
||||
|
||||
// 添加Kstat配置
|
||||
generateKstatSection(config.kstatConfigs, config.addKstatPaths)
|
||||
}
|
||||
|
||||
// 添加日志设置
|
||||
generateLogSettingSection(config.enableLog)
|
||||
|
||||
// 隐藏BL相关配置
|
||||
if (config.enableHideBl) {
|
||||
generateHideBlSection()
|
||||
}
|
||||
|
||||
// 清理工具残留
|
||||
if (config.enableCleanupResidue) {
|
||||
generateCleanupResidueSection()
|
||||
}
|
||||
|
||||
appendLine("echo \"$(get_current_time): Service脚本执行完成\" >> \"${'$'}LOG_FILE\"")
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断是否需要在service中配置
|
||||
*/
|
||||
private fun shouldConfigureInService(config: SuSFSManager.ModuleConfig): Boolean {
|
||||
return config.susPaths.isNotEmpty() ||
|
||||
config.susLoopPaths.isNotEmpty() ||
|
||||
config.kstatConfigs.isNotEmpty() ||
|
||||
config.addKstatPaths.isNotEmpty() ||
|
||||
(!config.executeInPostFsData && (config.unameValue != DEFAULT_UNAME || config.buildTimeValue != DEFAULT_BUILD_TIME))
|
||||
}
|
||||
|
||||
private fun StringBuilder.generateLogSettingSection(enableLog: Boolean) {
|
||||
appendLine("# 设置日志启用状态")
|
||||
val logValue = if (enableLog) 1 else 0
|
||||
appendLine("\"${'$'}SUSFS_BIN\" enable_log $logValue")
|
||||
appendLine("echo \"$(get_current_time): 日志功能设置为: ${if (enableLog) "启用" else "禁用"}\" >> \"${'$'}LOG_FILE\"")
|
||||
appendLine()
|
||||
}
|
||||
|
||||
private fun StringBuilder.generateAvcLogSpoofingSection(enableAvcLogSpoofing: Boolean) {
|
||||
appendLine("# 设置AVC日志欺骗状态")
|
||||
val avcLogValue = if (enableAvcLogSpoofing) 1 else 0
|
||||
appendLine("\"${'$'}SUSFS_BIN\" enable_avc_log_spoofing $avcLogValue")
|
||||
appendLine("echo \"$(get_current_time): AVC日志欺骗功能设置为: ${if (enableAvcLogSpoofing) "启用" else "禁用"}\" >> \"${'$'}LOG_FILE\"")
|
||||
appendLine()
|
||||
}
|
||||
|
||||
private fun StringBuilder.generateSusPathsSection(susPaths: Set<String>) {
|
||||
if (susPaths.isNotEmpty()) {
|
||||
appendLine("# 添加SUS路径")
|
||||
susPaths.forEach { path ->
|
||||
appendLine("\"${'$'}SUSFS_BIN\" add_sus_path '$path'")
|
||||
appendLine("echo \"$(get_current_time): 添加SUS路径: $path\" >> \"${'$'}LOG_FILE\"")
|
||||
}
|
||||
appendLine()
|
||||
}
|
||||
}
|
||||
|
||||
private fun StringBuilder.generateSusLoopPathsSection(susLoopPaths: Set<String>) {
|
||||
if (susLoopPaths.isNotEmpty()) {
|
||||
appendLine("# 添加SUS循环路径")
|
||||
susLoopPaths.forEach { path ->
|
||||
appendLine("\"${'$'}SUSFS_BIN\" add_sus_path_loop '$path'")
|
||||
appendLine("echo \"$(get_current_time): 添加SUS循环路径: $path\" >> \"${'$'}LOG_FILE\"")
|
||||
}
|
||||
appendLine()
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("SdCardPath")
|
||||
private fun StringBuilder.generateKstatSection(
|
||||
kstatConfigs: Set<String>,
|
||||
addKstatPaths: Set<String>
|
||||
) {
|
||||
// 添加Kstat路径
|
||||
if (addKstatPaths.isNotEmpty()) {
|
||||
appendLine("# 添加Kstat路径")
|
||||
addKstatPaths.forEach { path ->
|
||||
appendLine("\"${'$'}SUSFS_BIN\" add_sus_kstat '$path'")
|
||||
appendLine("echo \"$(get_current_time): 添加Kstat路径: $path\" >> \"${'$'}LOG_FILE\"")
|
||||
}
|
||||
appendLine()
|
||||
}
|
||||
|
||||
// 添加Kstat静态配置
|
||||
if (kstatConfigs.isNotEmpty()) {
|
||||
appendLine("# 添加Kstat静态配置")
|
||||
kstatConfigs.forEach { config ->
|
||||
val parts = config.split("|")
|
||||
if (parts.size >= 13) {
|
||||
val path = parts[0]
|
||||
val params = parts.drop(1).joinToString("' '", "'", "'")
|
||||
appendLine()
|
||||
appendLine("\"${'$'}SUSFS_BIN\" add_sus_kstat_statically '$path' $params")
|
||||
appendLine("echo \"$(get_current_time): 添加Kstat静态配置: $path\" >> \"${'$'}LOG_FILE\"")
|
||||
appendLine()
|
||||
appendLine("\"${'$'}SUSFS_BIN\" update_sus_kstat '$path'")
|
||||
appendLine("echo \"$(get_current_time): 更新Kstat配置: $path\" >> \"${'$'}LOG_FILE\"")
|
||||
}
|
||||
}
|
||||
appendLine()
|
||||
}
|
||||
}
|
||||
|
||||
private fun StringBuilder.generateUnameSection(config: SuSFSManager.ModuleConfig) {
|
||||
if (!config.executeInPostFsData && (config.unameValue != DEFAULT_UNAME || config.buildTimeValue != DEFAULT_BUILD_TIME)) {
|
||||
appendLine("# 设置uname和构建时间")
|
||||
appendLine("\"${'$'}SUSFS_BIN\" set_uname '${config.unameValue}' '${config.buildTimeValue}'")
|
||||
appendLine("echo \"$(get_current_time): 设置uname为: ${config.unameValue}, 构建时间为: ${config.buildTimeValue}\" >> \"${'$'}LOG_FILE\"")
|
||||
appendLine()
|
||||
}
|
||||
}
|
||||
|
||||
private fun StringBuilder.generateHideBlSection() {
|
||||
appendLine("# 隐藏BL 来自 Shamiko 脚本")
|
||||
appendLine(
|
||||
"""
|
||||
RESETPROP_BIN="/data/adb/ksu/bin/resetprop"
|
||||
|
||||
check_reset_prop() {
|
||||
local NAME=$1
|
||||
local EXPECTED=$2
|
||||
local VALUE=$("${'$'}RESETPROP_BIN" ${'$'}NAME)
|
||||
[ -z ${'$'}VALUE ] || [ ${'$'}VALUE = ${'$'}EXPECTED ] || "${'$'}RESETPROP_BIN" ${'$'}NAME ${'$'}EXPECTED
|
||||
}
|
||||
|
||||
check_missing_prop() {
|
||||
local NAME=$1
|
||||
local EXPECTED=$2
|
||||
local VALUE=$("${'$'}RESETPROP_BIN" ${'$'}NAME)
|
||||
[ -z ${'$'}VALUE ] && "${'$'}RESETPROP_BIN" ${'$'}NAME ${'$'}EXPECTED
|
||||
}
|
||||
|
||||
check_missing_match_prop() {
|
||||
local NAME=$1
|
||||
local EXPECTED=$2
|
||||
local VALUE=$("${'$'}RESETPROP_BIN" ${'$'}NAME)
|
||||
[ -z ${'$'}VALUE ] || [ ${'$'}VALUE = ${'$'}EXPECTED ] || "${'$'}RESETPROP_BIN" ${'$'}NAME ${'$'}EXPECTED
|
||||
[ -z ${'$'}VALUE ] && "${'$'}RESETPROP_BIN" ${'$'}NAME ${'$'}EXPECTED
|
||||
}
|
||||
|
||||
contains_reset_prop() {
|
||||
local NAME=$1
|
||||
local CONTAINS=$2
|
||||
local NEWVAL=$3
|
||||
case "$("${'$'}RESETPROP_BIN" ${'$'}NAME)" in
|
||||
*"${'$'}CONTAINS"*) "${'$'}RESETPROP_BIN" ${'$'}NAME ${'$'}NEWVAL ;;
|
||||
esac
|
||||
}
|
||||
""".trimIndent())
|
||||
appendLine()
|
||||
appendLine("sleep 30")
|
||||
appendLine()
|
||||
appendLine("\"${'$'}RESETPROP_BIN\" -w sys.boot_completed 0")
|
||||
|
||||
// 添加所有系统属性重置
|
||||
val systemProps = listOf(
|
||||
"ro.boot.vbmeta.invalidate_on_error" to "yes",
|
||||
"ro.boot.vbmeta.avb_version" to "1.2",
|
||||
"ro.boot.vbmeta.hash_alg" to "sha256",
|
||||
"ro.boot.vbmeta.size" to "19968",
|
||||
"ro.boot.vbmeta.device_state" to "locked",
|
||||
"ro.boot.verifiedbootstate" to "green",
|
||||
"ro.boot.flash.locked" to "1",
|
||||
"ro.boot.veritymode" to "enforcing",
|
||||
"ro.boot.warranty_bit" to "0",
|
||||
"ro.warranty_bit" to "0",
|
||||
"ro.debuggable" to "0",
|
||||
"ro.force.debuggable" to "0",
|
||||
"ro.secure" to "1",
|
||||
"ro.adb.secure" to "1",
|
||||
"ro.build.type" to "user",
|
||||
"ro.build.tags" to "release-keys",
|
||||
"ro.vendor.boot.warranty_bit" to "0",
|
||||
"ro.vendor.warranty_bit" to "0",
|
||||
"vendor.boot.vbmeta.device_state" to "locked",
|
||||
"vendor.boot.verifiedbootstate" to "green",
|
||||
"sys.oem_unlock_allowed" to "0",
|
||||
"ro.secureboot.lockstate" to "locked",
|
||||
"ro.boot.realmebootstate" to "green",
|
||||
"ro.boot.realme.lockstate" to "1",
|
||||
"ro.crypto.state" to "encrypted"
|
||||
)
|
||||
|
||||
systemProps.forEach { (prop, value) ->
|
||||
when {
|
||||
prop.startsWith("ro.boot.vbmeta") && prop.endsWith("_on_error") ->
|
||||
appendLine("check_missing_prop \"$prop\" \"$value\"")
|
||||
prop.contains("device_state") || prop.contains("verifiedbootstate") ->
|
||||
appendLine("check_missing_match_prop \"$prop\" \"$value\"")
|
||||
else ->
|
||||
appendLine("check_reset_prop \"$prop\" \"$value\"")
|
||||
}
|
||||
}
|
||||
|
||||
appendLine()
|
||||
appendLine("# Hide adb debugging traces")
|
||||
appendLine("resetprop \"sys.usb.adb.disabled\" \" \"")
|
||||
appendLine()
|
||||
|
||||
appendLine("# Hide recovery boot mode")
|
||||
appendLine("contains_reset_prop \"ro.bootmode\" \"recovery\" \"unknown\"")
|
||||
appendLine("contains_reset_prop \"ro.boot.bootmode\" \"recovery\" \"unknown\"")
|
||||
appendLine("contains_reset_prop \"vendor.boot.bootmode\" \"recovery\" \"unknown\"")
|
||||
appendLine()
|
||||
|
||||
appendLine("# Hide cloudphone detection")
|
||||
appendLine("[ -n \"$(resetprop ro.kernel.qemu)\" ] && resetprop ro.kernel.qemu \"\"")
|
||||
appendLine()
|
||||
}
|
||||
|
||||
// 清理残留脚本生成
|
||||
private fun StringBuilder.generateCleanupResidueSection() {
|
||||
appendLine("# 清理工具残留文件")
|
||||
appendLine("echo \"$(get_current_time): 开始清理工具残留\" >> \"${'$'}LOG_FILE\"")
|
||||
appendLine()
|
||||
|
||||
// 定义清理函数
|
||||
appendLine("""
|
||||
cleanup_path() {
|
||||
local path="$1"
|
||||
local desc="$2"
|
||||
local current="$3"
|
||||
local total="$4"
|
||||
|
||||
if [ -n "${'$'}desc" ]; then
|
||||
echo "$(get_current_time): [${'$'}current/${'$'}total] 清理: ${'$'}path (${'$'}desc)" >> "${'$'}LOG_FILE"
|
||||
else
|
||||
echo "$(get_current_time): [${'$'}current/${'$'}total] 清理: ${'$'}path" >> "${'$'}LOG_FILE"
|
||||
fi
|
||||
|
||||
if rm -rf "${'$'}path" 2>/dev/null; then
|
||||
echo "$(get_current_time): ✓ 成功清理: ${'$'}path" >> "${'$'}LOG_FILE"
|
||||
else
|
||||
echo "$(get_current_time): ✗ 清理失败或不存在: ${'$'}path" >> "${'$'}LOG_FILE"
|
||||
fi
|
||||
}
|
||||
""".trimIndent())
|
||||
|
||||
appendLine()
|
||||
appendLine("# 开始清理各种工具残留")
|
||||
appendLine("TOTAL=33")
|
||||
appendLine()
|
||||
|
||||
val cleanupPaths = listOf(
|
||||
"/data/local/stryker/" to "Stryker残留",
|
||||
"/data/system/AppRetention" to "AppRetention残留",
|
||||
"/data/local/tmp/luckys" to "Luck Tool残留",
|
||||
"/data/local/tmp/HyperCeiler" to "西米露残留",
|
||||
"/data/local/tmp/simpleHook" to "simple Hook残留",
|
||||
"/data/local/tmp/DisabledAllGoogleServices" to "谷歌省电模块残留",
|
||||
"/data/local/MIO" to "解包软件",
|
||||
"/data/DNA" to "解包软件",
|
||||
"/data/local/tmp/cleaner_starter" to "质感清理残留",
|
||||
"/data/local/tmp/byyang" to "",
|
||||
"/data/local/tmp/mount_mask" to "",
|
||||
"/data/local/tmp/mount_mark" to "",
|
||||
"/data/local/tmp/scriptTMP" to "",
|
||||
"/data/local/luckys" to "",
|
||||
"/data/local/tmp/horae_control.log" to "",
|
||||
"/data/gpu_freq_table.conf" to "",
|
||||
"/storage/emulated/0/Download/advanced/" to "",
|
||||
"/storage/emulated/0/Documents/advanced/" to "爱玩机",
|
||||
"/storage/emulated/0/Android/naki/" to "旧版asoulopt",
|
||||
"/data/swap_config.conf" to "scene附加模块2",
|
||||
"/data/local/tmp/resetprop" to "",
|
||||
"/dev/cpuset/AppOpt/" to "AppOpt模块",
|
||||
"/storage/emulated/0/Android/Clash/" to "Clash for Magisk模块",
|
||||
"/storage/emulated/0/Android/Yume-Yunyun/" to "网易云后台优化模块",
|
||||
"/data/local/tmp/Surfing_update" to "Surfing模块缓存",
|
||||
"/data/encore/custom_default_cpu_gov" to "encore模块",
|
||||
"/data/encore/default_cpu_gov" to "encore模块",
|
||||
"/data/local/tmp/yshell" to "",
|
||||
"/data/local/tmp/encore_logo.png" to "",
|
||||
"/storage/emulated/legacy/" to "",
|
||||
"/storage/emulated/elgg/" to "",
|
||||
"/data/system/junge/" to "",
|
||||
"/data/local/tmp/mount_namespace" to "挂载命名空间残留"
|
||||
)
|
||||
|
||||
cleanupPaths.forEachIndexed { index, (path, desc) ->
|
||||
val current = index + 1
|
||||
appendLine("cleanup_path '$path' '$desc' $current \$TOTAL")
|
||||
}
|
||||
|
||||
appendLine()
|
||||
appendLine("echo \"$(get_current_time): 工具残留清理完成\" >> \"${'$'}LOG_FILE\"")
|
||||
appendLine()
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成post-fs-data.sh脚本内容
|
||||
*/
|
||||
private fun generatePostFsDataScript(config: SuSFSManager.ModuleConfig): String {
|
||||
return buildString {
|
||||
appendLine("#!/system/bin/sh")
|
||||
appendLine("# SuSFS Post-FS-Data Script")
|
||||
appendLine("# 在文件系统挂载后但在系统完全启动前执行")
|
||||
appendLine()
|
||||
appendLine(generateLogSetup("susfs_post_fs_data.log"))
|
||||
appendLine()
|
||||
appendLine(generateBinaryCheck(config.targetPath))
|
||||
appendLine()
|
||||
appendLine("echo \"$(get_current_time): Post-FS-Data脚本开始执行\" >> \"${'$'}LOG_FILE\"")
|
||||
appendLine()
|
||||
|
||||
// 设置uname和构建时间 - 只有在选择在post-fs-data中执行时才执行
|
||||
if (config.executeInPostFsData && (config.unameValue != DEFAULT_UNAME || config.buildTimeValue != DEFAULT_BUILD_TIME)) {
|
||||
appendLine("# 设置uname和构建时间")
|
||||
appendLine("\"${'$'}SUSFS_BIN\" set_uname '${config.unameValue}' '${config.buildTimeValue}'")
|
||||
appendLine("echo \"$(get_current_time): 设置uname为: ${config.unameValue}, 构建时间为: ${config.buildTimeValue}\" >> \"${'$'}LOG_FILE\"")
|
||||
appendLine()
|
||||
}
|
||||
|
||||
generateUmountZygoteIsoServiceSection(config.umountForZygoteIsoService)
|
||||
|
||||
// 添加AVC日志欺骗设置
|
||||
generateAvcLogSpoofingSection(config.enableAvcLogSpoofing)
|
||||
|
||||
appendLine("echo \"$(get_current_time): Post-FS-Data脚本执行完成\" >> \"${'$'}LOG_FILE\"")
|
||||
}
|
||||
}
|
||||
|
||||
// 添加新的生成方法
|
||||
private fun StringBuilder.generateUmountZygoteIsoServiceSection(umountForZygoteIsoService: Boolean) {
|
||||
appendLine("# 设置Zygote隔离服务卸载状态")
|
||||
val umountValue = if (umountForZygoteIsoService) 1 else 0
|
||||
appendLine("\"${'$'}SUSFS_BIN\" umount_for_zygote_iso_service $umountValue")
|
||||
appendLine("echo \"$(get_current_time): Zygote隔离服务卸载设置为: ${if (umountForZygoteIsoService) "启用" else "禁用"}\" >> \"${'$'}LOG_FILE\"")
|
||||
appendLine()
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成post-mount.sh脚本内容
|
||||
*/
|
||||
private fun generatePostMountScript(config: SuSFSManager.ModuleConfig): String {
|
||||
return buildString {
|
||||
appendLine("#!/system/bin/sh")
|
||||
appendLine("# SuSFS Post-Mount Script")
|
||||
appendLine("# 在所有分区挂载完成后执行")
|
||||
appendLine()
|
||||
appendLine(generateLogSetup("susfs_post_mount.log"))
|
||||
appendLine()
|
||||
appendLine("echo \"$(get_current_time): Post-Mount脚本开始执行\" >> \"${'$'}LOG_FILE\"")
|
||||
appendLine()
|
||||
appendLine(generateBinaryCheck(config.targetPath))
|
||||
appendLine()
|
||||
|
||||
// 添加SUS挂载
|
||||
if (config.susMounts.isNotEmpty()) {
|
||||
appendLine("# 添加SUS挂载")
|
||||
config.susMounts.forEach { mount ->
|
||||
appendLine("\"${'$'}SUSFS_BIN\" add_sus_mount '$mount'")
|
||||
appendLine("echo \"$(get_current_time): 添加SUS挂载: $mount\" >> \"${'$'}LOG_FILE\"")
|
||||
}
|
||||
appendLine()
|
||||
}
|
||||
|
||||
// 添加尝试卸载
|
||||
if (config.tryUmounts.isNotEmpty()) {
|
||||
appendLine("# 添加尝试卸载")
|
||||
config.tryUmounts.forEach { umount ->
|
||||
val parts = umount.split("|")
|
||||
if (parts.size == 2) {
|
||||
val path = parts[0]
|
||||
val mode = parts[1]
|
||||
appendLine("\"${'$'}SUSFS_BIN\" add_try_umount '$path' $mode")
|
||||
appendLine("echo \"$(get_current_time): 添加尝试卸载: $path (模式: $mode)\" >> \"${'$'}LOG_FILE\"")
|
||||
}
|
||||
}
|
||||
appendLine()
|
||||
}
|
||||
|
||||
appendLine("echo \"$(get_current_time): Post-Mount脚本执行完成\" >> \"${'$'}LOG_FILE\"")
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成boot-completed.sh脚本内容
|
||||
*/
|
||||
@SuppressLint("SdCardPath")
|
||||
private fun generateBootCompletedScript(config: SuSFSManager.ModuleConfig): String {
|
||||
return buildString {
|
||||
appendLine("#!/system/bin/sh")
|
||||
appendLine("# SuSFS Boot-Completed Script")
|
||||
appendLine("# 在系统完全启动后执行")
|
||||
appendLine()
|
||||
appendLine(generateLogSetup("susfs_boot_completed.log"))
|
||||
appendLine()
|
||||
appendLine("echo \"$(get_current_time): Boot-Completed脚本开始执行\" >> \"${'$'}LOG_FILE\"")
|
||||
appendLine()
|
||||
appendLine(generateBinaryCheck(config.targetPath))
|
||||
appendLine()
|
||||
|
||||
// SUS挂载隐藏控制
|
||||
val hideValue = if (config.hideSusMountsForAllProcs) 1 else 0
|
||||
appendLine("# 设置SUS挂载隐藏控制")
|
||||
appendLine("\"${'$'}SUSFS_BIN\" hide_sus_mnts_for_all_procs $hideValue")
|
||||
appendLine("echo \"$(get_current_time): SUS挂载隐藏控制设置为: ${if (config.hideSusMountsForAllProcs) "对所有进程隐藏" else "仅对非KSU进程隐藏"}\" >> \"${'$'}LOG_FILE\"")
|
||||
appendLine()
|
||||
|
||||
// 路径设置和SUS路径设置
|
||||
if (config.susPaths.isNotEmpty() || config.susLoopPaths.isNotEmpty()) {
|
||||
generatePathSettingSection(config.androidDataPath, config.sdcardPath)
|
||||
appendLine()
|
||||
|
||||
// 添加普通SUS路径
|
||||
if (config.susPaths.isNotEmpty()) {
|
||||
generateSusPathsSection(config.susPaths)
|
||||
}
|
||||
|
||||
// 添加循环SUS路径
|
||||
if (config.susLoopPaths.isNotEmpty()) {
|
||||
generateSusLoopPathsSection(config.susLoopPaths)
|
||||
}
|
||||
|
||||
if (config.susMaps.isNotEmpty()) {
|
||||
generateSusMapsSection(config.susMaps)
|
||||
}
|
||||
}
|
||||
|
||||
appendLine("echo \"$(get_current_time): Boot-Completed脚本执行完成\" >> \"${'$'}LOG_FILE\"")
|
||||
}
|
||||
}
|
||||
|
||||
private fun StringBuilder.generateSusMapsSection(susMaps: Set<String>) {
|
||||
if (susMaps.isNotEmpty()) {
|
||||
appendLine("# 添加SUS映射")
|
||||
susMaps.forEach { map ->
|
||||
appendLine("\"${'$'}SUSFS_BIN\" add_sus_map '$map'")
|
||||
appendLine("echo \"$(get_current_time): 添加SUS映射: $map\" >> \"${'$'}LOG_FILE\"")
|
||||
}
|
||||
appendLine()
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("SdCardPath")
|
||||
private fun StringBuilder.generatePathSettingSection(androidDataPath: String, sdcardPath: String) {
|
||||
appendLine("# 路径配置")
|
||||
appendLine("# 设置Android Data路径")
|
||||
appendLine("until [ -d \"/sdcard/Android\" ]; do sleep 1; done")
|
||||
appendLine("sleep 60")
|
||||
appendLine()
|
||||
appendLine("\"${'$'}SUSFS_BIN\" set_android_data_root_path '$androidDataPath'")
|
||||
appendLine("echo \"$(get_current_time): Android Data路径设置为: $androidDataPath\" >> \"${'$'}LOG_FILE\"")
|
||||
appendLine()
|
||||
appendLine("# 设置SD卡路径")
|
||||
appendLine("\"${'$'}SUSFS_BIN\" set_sdcard_root_path '$sdcardPath'")
|
||||
appendLine("echo \"$(get_current_time): SD卡路径设置为: $sdcardPath\" >> \"${'$'}LOG_FILE\"")
|
||||
appendLine()
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成module.prop文件内容
|
||||
*/
|
||||
fun generateModuleProp(moduleId: String): String {
|
||||
val moduleVersion = "v4.0.0"
|
||||
val moduleVersionCode = "40000"
|
||||
|
||||
return """
|
||||
id=$moduleId
|
||||
name=SuSFS Manager
|
||||
version=$moduleVersion
|
||||
versionCode=$moduleVersionCode
|
||||
author=ShirkNeko
|
||||
description=SuSFS Manager Auto Configuration Module (自动生成请不要手动卸载或删除该模块! / Automatically generated Please do not manually uninstall or delete the module!)
|
||||
updateJson=
|
||||
""".trimIndent()
|
||||
}
|
||||
}
|
||||
@@ -51,6 +51,15 @@ class SuperUserViewModel : ViewModel() {
|
||||
val appDetail = appList.find { it.packageName == packageName }
|
||||
return appDetail?.packageInfo?.applicationInfo?.loadIcon(context.packageManager)
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun getAppsSafely(): List<AppInfo> {
|
||||
return try {
|
||||
synchronized(appsLock) { apps }
|
||||
} catch (e: Exception) {
|
||||
emptyList()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -357,4 +357,251 @@
|
||||
<!-- Zip Install Prompts -->
|
||||
<string name="kernel_install_prompt_with_name">将安装以下内核:%1$s</string>
|
||||
<string name="mixed_install_prompt_with_name">将安装以下文件:%1$s</string>
|
||||
<!-- SuSFS Configuration -->
|
||||
<string name="susfs_config_title">SuSFS 配置</string>
|
||||
<string name="susfs_config_summary">配置SuSFS模块设置</string>
|
||||
<string name="susfs_config_description">配置说明</string>
|
||||
<string name="susfs_config_description_text">此功能允许您自定义 SuSFS 的 uname 值和构建时间伪装。输入您想要设置的值,点击应用即可生效</string>
|
||||
<string name="susfs_uname_label">Uname 值</string>
|
||||
<string name="susfs_uname_placeholder">请输入自定义 uname 值</string>
|
||||
<string name="susfs_build_time_label">构建时间伪装</string>
|
||||
<string name="susfs_build_time_placeholder">请输入构建时间伪装值</string>
|
||||
<string name="susfs_current_value">当前值: %s</string>
|
||||
<string name="susfs_current_build_time">当前构建时间: %s</string>
|
||||
<string name="susfs_reset_to_default">重置为默认值</string>
|
||||
<string name="susfs_apply">应用</string>
|
||||
<!-- SuSFS Reset Confirmation -->
|
||||
<string name="susfs_reset_confirm_title">确认重置</string>
|
||||
<!-- SuSFS Toast Messages -->
|
||||
<string name="susfs_binary_not_found">无法找到 ksu_susfs 文件</string>
|
||||
<string name="susfs_command_failed">SuSFS 命令执行失败</string>
|
||||
<string name="susfs_command_error">执行 SuSFS 命令时出错: %s</string>
|
||||
<string name="susfs_uname_set_success" formatted="false">SuSFS 内核名称和构建时间设置成功: %s, %s</string>
|
||||
<!-- SuSFS Settings Item -->
|
||||
<string name="susfs_config_setting_title">SuSFS 配置</string>
|
||||
<!-- 开机自启动相关 -->
|
||||
<string name="susfs_autostart_title">开机自启动</string>
|
||||
<string name="susfs_autostart_description">重启时自动应用所有非默认配置</string>
|
||||
<string name="susfs_autostart_requirement">需要添加配置后才能启用</string>
|
||||
<string name="susfs_autostart_enable_failed">启用开机自启动失败</string>
|
||||
<string name="susfs_autostart_disable_failed">禁用开机自启动失败</string>
|
||||
<string name="susfs_autostart_error">开机自启动配置错误: %s</string>
|
||||
<string name="susfs_no_config_to_autostart">没有可用的配置进行开机自启动</string>
|
||||
<!-- SuSFS Tab Titles -->
|
||||
<string name="susfs_tab_basic_settings">基本设置</string>
|
||||
<string name="susfs_tab_sus_paths">SuS 路径</string>
|
||||
<string name="susfs_tab_sus_mounts">SuS 挂载</string>
|
||||
<string name="susfs_tab_try_umount">尝试卸载</string>
|
||||
<string name="susfs_tab_path_settings">路径设置</string>
|
||||
<string name="susfs_tab_enabled_features">启用功能状态</string>
|
||||
<!-- SuSFS Path Management -->
|
||||
<string name="susfs_add_sus_path">添加 SuS 路径</string>
|
||||
<string name="susfs_add_sus_mount">添加 SuS 挂载</string>
|
||||
<string name="susfs_add_try_umount">添加尝试卸载</string>
|
||||
<string name="susfs_sus_path_added_success">SuS 路径添加成功</string>
|
||||
<string name="susfs_path_not_found_error">路径未找到错误</string>
|
||||
<string name="susfs_path_label">路径</string>
|
||||
<string name="susfs_mount_path_label">挂载路径</string>
|
||||
<string name="susfs_path_placeholder">例如: /system/addon.d</string>
|
||||
<string name="susfs_no_paths_configured">暂无 SuS 路径配置</string>
|
||||
<string name="susfs_no_mounts_configured">暂无 SuS 挂载配置</string>
|
||||
<string name="susfs_no_umounts_configured">暂无尝试卸载配置</string>
|
||||
<!-- SuSFS Umount Mode -->
|
||||
<string name="susfs_umount_mode_label">卸载模式</string>
|
||||
<string name="susfs_umount_mode_normal">普通卸载(0)</string>
|
||||
<string name="susfs_umount_mode_detach">分离卸载(1)</string>
|
||||
<string name="susfs_umount_mode_normal_short">普通</string>
|
||||
<string name="susfs_umount_mode_detach_short">分离</string>
|
||||
<string name="susfs_umount_mode_display">模式: %1$s (%2$s)</string>
|
||||
<string name="susfs_try_umount_added_success">尝试 umount 路径添加成功: %s</string>
|
||||
<string name="susfs_try_umount_added_saved">尝试 umount 路径保存成功: %s</string>
|
||||
<!-- SuSFS Run Umount -->
|
||||
<!-- SuSFS Reset Categories -->
|
||||
<string name="susfs_reset_paths_title">重置 SuS 路径</string>
|
||||
<string name="susfs_reset_paths_message">这将清除所有 SuS 路径配置,确定要继续吗?</string>
|
||||
<string name="susfs_reset_mounts_title">重置 SuS 挂载</string>
|
||||
<string name="susfs_reset_mounts_message">这将清除所有 SuS 挂载配置,确定要继续吗?</string>
|
||||
<string name="susfs_reset_umounts_title">重置尝试卸载</string>
|
||||
<string name="susfs_reset_umounts_message">这将清除所有尝试卸载配置,确定要继续吗?</string>
|
||||
<string name="susfs_reset_path_title">重置路径设置</string>
|
||||
<!-- SuSFS Path Settings -->
|
||||
<string name="susfs_android_data_path_label">Android Data 路径</string>
|
||||
<string name="susfs_sdcard_path_label">SDCard 路径</string>
|
||||
<string name="susfs_set_android_data_path">设置 Android Data 路径</string>
|
||||
<string name="susfs_set_sdcard_path">设置 SDCard 路径</string>
|
||||
<!-- SuSFS Enabled Features -->
|
||||
<string name="susfs_enabled_features_description">显示当前 SuSFS 启用的功能状态</string>
|
||||
<string name="susfs_no_features_found">未找到功能状态信息</string>
|
||||
<string name="susfs_feature_enabled">已启用</string>
|
||||
<string name="susfs_feature_disabled">已禁用</string>
|
||||
<!-- Feature Labels -->
|
||||
<string name="sus_path_feature_label">SuS 路径支持</string>
|
||||
<string name="sus_mount_feature_label">SuS 挂载支持</string>
|
||||
<string name="try_umount_feature_label">尝试卸载支持</string>
|
||||
<string name="spoof_uname_feature_label">欺骗 uname 支持</string>
|
||||
<string name="spoof_cmdline_feature_label">欺骗 Cmdline/Bootconfig</string>
|
||||
<string name="open_redirect_feature_label">开放重定向支持</string>
|
||||
<string name="enable_log_feature_label">日志记录支持</string>
|
||||
<string name="auto_default_mount_feature_label">自动默认挂载</string>
|
||||
<string name="auto_bind_mount_feature_label">自动绑定挂载</string>
|
||||
<string name="auto_try_umount_bind_feature_label">自动尝试卸载绑定挂载</string>
|
||||
<string name="hide_symbols_feature_label">隐藏 KSU SuSFS 符号</string>
|
||||
<string name="sus_kstat_feature_label">SuS Kstat 支持</string>
|
||||
<string name="sus_su_feature_label">SuS SU 模式切换功能</string>
|
||||
<!-- 可切换状态 -->
|
||||
<string name="susfs_feature_configurable">可配置的 SuSFS 功能</string>
|
||||
<string name="susfs_enable_log_label">SuSFS 启用日志</string>
|
||||
<string name="susfs_log_config_description">启用或者关闭 SuSFS 的日志</string>
|
||||
<string name="susfs_log_config_title">SuSFS 日志配置</string>
|
||||
<string name="susfs_log_enabled">启用 SuSFS 日志</string>
|
||||
<string name="susfs_log_disabled">关闭 SuSFS 日志</string>
|
||||
<string name="susfs_execution_location_label">执行位置</string>
|
||||
<string name="susfs_current_execution_location">当前执行位置:%s</string>
|
||||
<string name="susfs_execution_location_service">Service</string>
|
||||
<string name="susfs_execution_location_post_fs_data">Post-FS-Data</string>
|
||||
<string name="susfs_execution_location_service_description">在系统服务启动后执行</string>
|
||||
<string name="susfs_execution_location_post_fs_data_description">在文件系统挂载后但系统完全启动前执行,可能会导致循环重启</string>
|
||||
<string name="susfs_slot_info_title">槽位信息</string>
|
||||
<string name="susfs_slot_info_description">查看当前启动槽位信息并复制数值</string>
|
||||
<string name="susfs_current_active_slot">当前活动槽位:%s</string>
|
||||
<string name="susfs_slot_uname">Uname:%s</string>
|
||||
<string name="susfs_slot_build_time">构建时间:%s</string>
|
||||
<string name="susfs_slot_current_badge">当前</string>
|
||||
<string name="susfs_slot_use_uname">使用 Uname</string>
|
||||
<string name="susfs_slot_use_build_time">使用构建时间</string>
|
||||
<string name="susfs_slot_info_unavailable">无法获取槽位信息</string>
|
||||
<!-- SuSFS 自启动相关字符串 -->
|
||||
<string name="susfs_autostart_enabled_success">SuSFS 自启动模块已启用,模块路径:%s</string>
|
||||
<string name="susfs_autostart_disabled_success">SuSFS 自启动模块已禁用</string>
|
||||
<!-- SuSFS Kstat相关字符串 -->
|
||||
<string name="susfs_tab_kstat_config">Kstat 配置</string>
|
||||
<string name="kstat_static_config_added">Kstat 静态配置已添加:%1$s</string>
|
||||
<string name="kstat_config_removed">已移除 Kstat 配置:%1$s</string>
|
||||
<string name="kstat_path_added">Kstat 路径已添加:%1$s</string>
|
||||
<string name="kstat_path_removed">已移除 Kstat 路径:%1$s</string>
|
||||
<string name="kstat_updated">Kstat 已更新:%1$s</string>
|
||||
<string name="kstat_full_clone_updated">Kstat 完整克隆已更新:%1$s</string>
|
||||
<string name="add_kstat_statically_title">添加 Kstat 静态配置</string>
|
||||
<string name="file_or_directory_path_label">文件/目录路径</string>
|
||||
<string name="hint_use_default_value">提示:可以使用 "default" 来使用原始值</string>
|
||||
<string name="add_kstat_path_title">添加 Kstat 路径</string>
|
||||
<string name="add">添加</string>
|
||||
<string name="reset_kstat_config_title">重置 Kstat 配置</string>
|
||||
<string name="reset_kstat_config_message">确定要清除所有 Kstat 配置吗?此操作不可撤销</string>
|
||||
<string name="kstat_config_description_title">Kstat 配置说明</string>
|
||||
<string name="kstat_config_description_add_statically">• add_sus_kstat_statically: 静态配置文件/目录的 stat 信息</string>
|
||||
<string name="kstat_config_description_add">• add_sus_kstat: 在绑定挂载前添加路径,存储原始 stat 信息</string>
|
||||
<string name="kstat_config_description_update">• update_sus_kstat: 更新目标 ino,保持 size 和 blocks 不变</string>
|
||||
<string name="kstat_config_description_update_full_clone">• update_sus_kstat_full_clone: 仅更新 ino,其他保持原始值</string>
|
||||
<string name="static_kstat_config">静态 Kstat 配置</string>
|
||||
<string name="kstat_path_management">Kstat 路径管理</string>
|
||||
<string name="no_kstat_config_message">暂无 Kstat 配置,点击下方按钮添加配置</string>
|
||||
<!-- SuSFS Mount Hiding Control Related Strings -->
|
||||
<string name="susfs_hide_mounts_control_title">SuS 挂载隐藏控制</string>
|
||||
<string name="susfs_hide_mounts_control_description">控制 SuS 挂载对进程的隐藏行为</string>
|
||||
<string name="susfs_hide_mounts_for_all_procs_label">对所有进程隐藏 SuS 挂载</string>
|
||||
<string name="susfs_hide_mounts_for_all_procs_enabled_description">启用后,SuS 挂载将对所有进程隐藏,包括 KSU 进程</string>
|
||||
<string name="susfs_hide_mounts_for_all_procs_disabled_description">禁用后,SuS 挂载仅对非 KSU 进程隐藏,KSU 进程可以看到挂载</string>
|
||||
<string name="susfs_hide_mounts_all_enabled">已启用对所有进程隐藏 SuS 挂载</string>
|
||||
<string name="susfs_hide_mounts_all_disabled">已禁用对所有进程隐藏 SuS 挂载</string>
|
||||
<string name="susfs_hide_mounts_recommendation">建议在屏幕解锁后或在 service.sh 或 boot-completed.sh 阶段设置为禁用,这可以修复一些依赖 KSU 进程挂载的 root 应用的问题</string>
|
||||
<string name="susfs_hide_mounts_current_setting">当前设置: %s</string>
|
||||
<string name="susfs_hide_mounts_setting_all">对所有进程隐藏</string>
|
||||
<string name="susfs_hide_mounts_setting_non_ksu">仅对非 KSU 进程隐藏</string>
|
||||
<string name="susfs_android_data_path_set">Android Data 路径已设置为: %s</string>
|
||||
<string name="susfs_sdcard_path_set">SDCard 路径已设置为: %s</string>
|
||||
<string name="susfs_path_setup_warning">路径设置可能未完全成功,但将继续添加 SuS 路径</string>
|
||||
<!-- 备份和还原相关字符串 -->
|
||||
<string name="susfs_backup_title">备份</string>
|
||||
<string name="susfs_backup_description">创建所有 SuSFS 配置的备份。备份文件将包含所有设置、路径和配置信息。</string>
|
||||
<string name="susfs_backup_create">创建备份</string>
|
||||
<string name="susfs_backup_success">备份创建成功:%s</string>
|
||||
<string name="susfs_backup_failed">备份创建失败:%s</string>
|
||||
<string name="susfs_backup_file_not_found">备份文件未找到</string>
|
||||
<string name="susfs_backup_invalid_format">无效的备份文件格式</string>
|
||||
<string name="susfs_backup_version_mismatch">备份版本不匹配,但将尝试还原</string>
|
||||
<string name="susfs_restore_title">还原</string>
|
||||
<string name="susfs_restore_description">从备份文件还原 SuSFS 配置。这将覆盖所有当前设置。</string>
|
||||
<string name="susfs_restore_select_file">选择备份文件</string>
|
||||
<string name="susfs_restore_success" formatted="false">配置还原成功,备份创建于 %s,来自设备:%s</string>
|
||||
<string name="susfs_restore_failed">还原失败:%s</string>
|
||||
<string name="susfs_restore_confirm_title">确认还原</string>
|
||||
<string name="susfs_restore_confirm_description">这将覆盖所有当前的 SuSFS 配置。您确定要继续吗?</string>
|
||||
<string name="susfs_restore_confirm">还原</string>
|
||||
<string name="susfs_backup_info_date">备份日期:%s</string>
|
||||
<string name="susfs_backup_info_device">设备:%s</string>
|
||||
<string name="susfs_backup_info_version">版本:%s</string>
|
||||
<string name="hide_bl_script">上锁状态</string>
|
||||
<string name="hide_bl_script_description">覆盖引导锁状态属性于 late_start 服务模式</string>
|
||||
<string name="cleanup_residue">清理工具残留</string>
|
||||
<string name="cleanup_residue_description">清理各种模块以及工具的残留文件和目录(可能会误删导致丢失以及无法启动,谨慎使用)</string>
|
||||
<string name="susfs_edit_sus_path">编辑 SuS 路径</string>
|
||||
<string name="susfs_edit_sus_mount">编辑 SuS 挂载</string>
|
||||
<string name="susfs_edit_try_umount">编辑尝试卸载</string>
|
||||
<string name="edit_kstat_statically_title">编辑 Kstat 静态配置</string>
|
||||
<string name="edit_kstat_path_title">编辑 Kstat 路径</string>
|
||||
<string name="susfs_save">保存</string>
|
||||
<string name="edit">编辑</string>
|
||||
<string name="delete">删除</string>
|
||||
<string name="update">更新</string>
|
||||
<string name="kstat_config_updated">Kstat 配置更新</string>
|
||||
<string name="kstat_path_updated">Kstat 路径更新</string>
|
||||
<string name="susfs_update_full_clone">Susfs 完整克隆更新</string>
|
||||
<string name="umount_zygote_iso_service">卸载 Zygote 隔离服务</string>
|
||||
<string name="umount_zygote_iso_service_description">启用此选项将在系统启动时卸载 Zygote 隔离服务挂载点</string>
|
||||
<string name="umount_zygote_iso_service_enabled">Zygote 隔离服务卸载已启用</string>
|
||||
<string name="umount_zygote_iso_service_disabled">Zygote 隔离服务卸载已禁用</string>
|
||||
<string name="app_paths_section">应用路径</string>
|
||||
<string name="other_paths_section">其他路径</string>
|
||||
<string name="add_custom_path">其他</string>
|
||||
<string name="add_app_path">应用</string>
|
||||
<string name="susfs_add_app_path">添加应用路径</string>
|
||||
<string name="susfs_version_mismatch">SuSFS 库版本不匹配,内核:%1$s vs 管理器:%2$s,建议更新内核或管理器</string>
|
||||
<string name="warning">警告</string>
|
||||
<string name="search_apps">搜索应用</string>
|
||||
<string name="selected_apps_count">%1$d 个已选应用</string>
|
||||
<string name="already_added_apps_count">%1$d 个已添加应用</string>
|
||||
<string name="all_apps_already_added">所有应用均已添加</string>
|
||||
<string name="no_apps_found">未找到应用</string>
|
||||
<!-- 循环路径相关 -->
|
||||
<string name="susfs_tab_sus_loop_paths">SuS 循环路径</string>
|
||||
<string name="susfs_add_sus_loop_path">添加 SuS 循环路径</string>
|
||||
<string name="susfs_edit_sus_loop_path">编辑 SuS 循环路径</string>
|
||||
<string name="susfs_loop_path_added_success">SuS 循环路径添加成功: %1$s</string>
|
||||
<string name="susfs_loop_path_removed">SuS 循环路径已移除: %1$s</string>
|
||||
<string name="susfs_loop_path_updated">SuS 循环路径已更新: %1$s -> %2$s</string>
|
||||
<string name="susfs_no_loop_paths_configured">未配置 SuS 循环路径</string>
|
||||
<string name="susfs_reset_loop_paths_title">重置循环路径</string>
|
||||
<string name="susfs_reset_loop_paths_message">确定要清空所有 SuS 循环路径吗?此操作无法撤销。</string>
|
||||
<string name="susfs_loop_path_label">循环路径</string>
|
||||
<string name="susfs_loop_path_placeholder">/data/example/path</string>
|
||||
<string name="susfs_loop_path_restriction_warning">注意:只有不在 /storage/ 和 /sdcard/ 内的路径才能通过循环路径添加。</string>
|
||||
<string name="susfs_loop_path_invalid_location">错误:循环路径不能位于 /storage/ 或 /sdcard/ 目录内</string>
|
||||
<string name="loop_paths_section">循环路径</string>
|
||||
<string name="add_loop_path">添加循环路径</string>
|
||||
<!-- 循环路径功能描述 -->
|
||||
<string name="sus_loop_paths_description_title">循环路径配置</string>
|
||||
<string name="sus_loop_paths_description_text">循环路径会在每次非 root 用户应用或隔离服务启动时重新标记为 SUS_PATH。这有助于解决添加的路径可能因 inode 状态重置或内核中 inode 重新创建而失效的问题</string>
|
||||
<string name="avc_log_spoofing">AVC 日志欺骗</string>
|
||||
<string name="avc_log_spoofing_enabled">AVC 日志欺骗已启用</string>
|
||||
<string name="avc_log_spoofing_disabled">AVC 日志欺骗已禁用</string>
|
||||
<string name="avc_log_spoofing_description">禁用: 禁用在内核 AVC 日志中欺骗 \'su\' 的 sus tcontext。\n启用: 启用在内核 AVC 日志中将 \'su\' 的 sus tcontext 欺骗为 \'kernel\'</string>
|
||||
<string name="avc_log_spoofing_warning">重要提示:\n- 内核中默认设置为 \'0\'\n- 启用此功能有时会使开发人员在调试权限或 SELinux 问题时难以识别原因,因此建议用户在调试时禁用此功能。</string>
|
||||
<!-- SUS Map related strings -->
|
||||
<string name="susfs_tab_sus_maps">SUS映射</string>
|
||||
<string name="susfs_sus_map_label">库文件路径</string>
|
||||
<string name="susfs_sus_map_placeholder">/data/adb/modules/my_module/zygisk/arm64-v8a.so</string>
|
||||
<string name="susfs_add_sus_map">添加SUS映射</string>
|
||||
<string name="susfs_edit_sus_map">编辑SUS映射</string>
|
||||
<string name="susfs_sus_map_added_success">SUS映射添加成功: %1$s</string>
|
||||
<string name="susfs_sus_map_removed">SUS映射已移除: %1$s</string>
|
||||
<string name="susfs_sus_map_updated">SUS映射已更新: %1$s -> %2$s</string>
|
||||
<string name="susfs_no_sus_maps_configured">未配置SUS映射</string>
|
||||
<string name="susfs_reset_sus_maps_title">重置SUS映射</string>
|
||||
<string name="susfs_reset_sus_maps_message">这将移除所有已配置的SUS映射。此操作无法撤销。</string>
|
||||
<string name="sus_maps_section">内存映射隐藏</string>
|
||||
<string name="sus_maps_description_title">隐藏/proc/self/中各种映射中的mmap真实文件</string>
|
||||
<string name="sus_maps_description_text">从 /proc/self/[maps|smaps|smaps_rollup|map_files|mem|pagemap] 中隐藏内存映射的真实文件路径。请注意:此功能不支持隐藏匿名内存映射,也无法隐藏由注入库本身产生的内联钩子或 PLT 钩子。</string>
|
||||
<string name="sus_maps_warning">重要提示:对于具备完善注入检测机制的应用,此功能可能无法有效绕过检测。</string>
|
||||
<string name="sus_maps_debug_info">首先通过 ps -enf 查找目标应用的 PID 和 UID,然后检查 /proc/<pid>/maps 中的相关路径,并与 /proc/1/mountinfo 中的设备号进行比对以确保一致性。只有当设备号一致时,隐藏映射才能正常工作。</string>
|
||||
</resources>
|
||||
|
||||
@@ -365,4 +365,250 @@
|
||||
<!-- Zip Install Prompts -->
|
||||
<string name="kernel_install_prompt_with_name">The following kernels will be installed: %1$s</string>
|
||||
<string name="mixed_install_prompt_with_name">The following files will be installed: %1$s</string>
|
||||
<!-- SuSFS Configuration -->
|
||||
<string name="susfs_config_title">SuSFS Configuration</string>
|
||||
<string name="susfs_config_summary">Configure SuSFS module settings</string>
|
||||
<string name="susfs_config_description">Configuration Description</string>
|
||||
<string name="susfs_config_description_text">This feature allows you to customize the SuSFS uname value and build time spoofing. Enter the values you want to set and click Apply to take effect</string>
|
||||
<string name="susfs_uname_label">Uname Value</string>
|
||||
<string name="susfs_uname_placeholder">Please enter custom uname value</string>
|
||||
<string name="susfs_build_time_label">Build Time Spoofing</string>
|
||||
<string name="susfs_build_time_placeholder">Please enter build time spoofing value</string>
|
||||
<string name="susfs_current_value">Current value: %s</string>
|
||||
<string name="susfs_current_build_time">Current build time: %s</string>
|
||||
<string name="susfs_reset_to_default">Reset to Default</string>
|
||||
<string name="susfs_apply">Apply</string>
|
||||
<!-- SuSFS Reset Confirmation -->
|
||||
<string name="susfs_reset_confirm_title">Confirm Reset</string>
|
||||
<!-- SuSFS Toast Messages -->
|
||||
<string name="susfs_binary_not_found">Cannot find ksu_susfs file</string>
|
||||
<string name="susfs_command_failed">SuSFS command execution failed</string>
|
||||
<string name="susfs_command_error">Error executing SuSFS command: %s</string>
|
||||
<string name="susfs_uname_set_success" formatted="false">SuSFS uname and build time set successfully: %s, %s</string>
|
||||
<!-- SuSFS Settings Item -->
|
||||
<string name="susfs_config_setting_title">SuSFS Configuration</string>
|
||||
<!-- 开机自启动相关 -->
|
||||
<string name="susfs_autostart_title">Auto Start</string>
|
||||
<string name="susfs_autostart_description">Automatically apply all non-default configurations on reboot</string>
|
||||
<string name="susfs_autostart_requirement">Configuration needs to be added to enable</string>
|
||||
<string name="susfs_autostart_enable_failed">Failed to enable auto start</string>
|
||||
<string name="susfs_autostart_disable_failed">Failed to disable auto start</string>
|
||||
<string name="susfs_autostart_error">Auto start configuration error: %s</string>
|
||||
<string name="susfs_no_config_to_autostart">No available configuration for auto start</string>
|
||||
<!-- SuSFS Tab Titles -->
|
||||
<string name="susfs_tab_basic_settings">Basic Settings</string>
|
||||
<string name="susfs_tab_sus_paths">SUS Paths</string>
|
||||
<string name="susfs_tab_sus_mounts">SUS Mounts</string>
|
||||
<string name="susfs_tab_try_umount">Try Umount</string>
|
||||
<string name="susfs_tab_path_settings">Path Settings</string>
|
||||
<string name="susfs_tab_enabled_features">Enabled Features Status</string>
|
||||
<!-- SuSFS Path Management -->
|
||||
<string name="susfs_add_sus_path">Add SUS Path</string>
|
||||
<string name="susfs_add_sus_mount">Add SUS Mount</string>
|
||||
<string name="susfs_add_try_umount">Add Try Umount</string>
|
||||
<string name="susfs_sus_path_added_success">SUS path added successfully</string>
|
||||
<string name="susfs_path_not_found_error">Path not found error</string>
|
||||
<string name="susfs_path_label">Path</string>
|
||||
<string name="susfs_mount_path_label">Mount Path</string>
|
||||
<string name="susfs_path_placeholder">e.g.: /system/addon.d</string>
|
||||
<string name="susfs_no_paths_configured">No SUS paths configured</string>
|
||||
<string name="susfs_no_mounts_configured">No SUS mounts configured</string>
|
||||
<string name="susfs_no_umounts_configured">No try umount configured</string>
|
||||
<!-- SuSFS Umount Mode -->
|
||||
<string name="susfs_umount_mode_label">Umount Mode</string>
|
||||
<string name="susfs_umount_mode_normal">Normal Umount (0)</string>
|
||||
<string name="susfs_umount_mode_detach">Detach Umount (1)</string>
|
||||
<string name="susfs_umount_mode_normal_short">Normal</string>
|
||||
<string name="susfs_umount_mode_detach_short">Detach</string>
|
||||
<string name="susfs_umount_mode_display">Mode: %1$s (%2$s)</string>
|
||||
<string name="susfs_try_umount_added_success">Try to umount path added successfully: %s</string>
|
||||
<string name="susfs_try_umount_added_saved">Attempted umount path save succeeded: %s</string>
|
||||
<!-- SuSFS Reset Categories -->
|
||||
<string name="susfs_reset_paths_title">Reset SUS Paths</string>
|
||||
<string name="susfs_reset_paths_message">This will clear all SUS path configurations. Are you sure you want to continue?</string>
|
||||
<string name="susfs_reset_mounts_title">Reset SUS Mounts</string>
|
||||
<string name="susfs_reset_mounts_message">This will clear all SUS mount configurations. Are you sure you want to continue?</string>
|
||||
<string name="susfs_reset_umounts_title">Reset Try Umount</string>
|
||||
<string name="susfs_reset_umounts_message">This will clear all try umount configurations. Are you sure you want to continue?</string>
|
||||
<string name="susfs_reset_path_title">Reset Path Settings</string>
|
||||
<!-- SuSFS Path Settings -->
|
||||
<string name="susfs_android_data_path_label">Android Data Path</string>
|
||||
<string name="susfs_sdcard_path_label">SD Card Path</string>
|
||||
<string name="susfs_set_android_data_path">Set Android Data Path</string>
|
||||
<string name="susfs_set_sdcard_path">Set SD Card Path</string>
|
||||
<!-- SuSFS Enabled Features -->
|
||||
<string name="susfs_enabled_features_description">Display current SuSFS enabled features status</string>
|
||||
<string name="susfs_no_features_found">No feature status information found</string>
|
||||
<string name="susfs_feature_enabled">Enabled</string>
|
||||
<string name="susfs_feature_disabled">Disabled</string>
|
||||
<!-- Feature Labels -->
|
||||
<string name="sus_path_feature_label">SUS Path Support</string>
|
||||
<string name="sus_mount_feature_label">SUS Mount Support</string>
|
||||
<string name="try_umount_feature_label">Try Umount Support</string>
|
||||
<string name="spoof_uname_feature_label">Spoof uname Support</string>
|
||||
<string name="spoof_cmdline_feature_label">Spoof Cmdline/Bootconfig</string>
|
||||
<string name="open_redirect_feature_label">Open Redirect Support</string>
|
||||
<string name="enable_log_feature_label">Logging Support</string>
|
||||
<string name="auto_default_mount_feature_label">Auto Default Mount</string>
|
||||
<string name="auto_bind_mount_feature_label">Auto Bind Mount</string>
|
||||
<string name="auto_try_umount_bind_feature_label">Auto Try Umount Bind Mount</string>
|
||||
<string name="hide_symbols_feature_label">Hide KSU SUSFS Symbols</string>
|
||||
<string name="sus_kstat_feature_label">SUS Kstat Support</string>
|
||||
<string name="sus_su_feature_label">SUS SU mode switching function</string>
|
||||
<!-- 可切换状态 -->
|
||||
<string name="susfs_feature_configurable">Configurable SuSFS Features</string>
|
||||
<string name="susfs_enable_log_label">SuSFS Enable Log</string>
|
||||
<string name="susfs_log_config_description">Enable or disable logging for SuSFS</string>
|
||||
<string name="susfs_log_config_title">SuSFS Logging Configuration</string>
|
||||
<string name="susfs_log_enabled">Enabling SuSFS Logging</string>
|
||||
<string name="susfs_log_disabled">Turn off SuSFS logging</string>
|
||||
<string name="susfs_execution_location_label">Execution Location</string>
|
||||
<string name="susfs_current_execution_location">Current execution location: %s</string>
|
||||
<string name="susfs_execution_location_service">Service</string>
|
||||
<string name="susfs_execution_location_post_fs_data">Post-FS-Data</string>
|
||||
<string name="susfs_execution_location_service_description">Execute after system services start</string>
|
||||
<string name="susfs_execution_location_post_fs_data_description">Execute after file system is mounted but before system is fully booted,May cause a boot loop</string>
|
||||
<string name="susfs_slot_info_title">Slot Information</string>
|
||||
<string name="susfs_slot_info_description">View current boot slot information and copy values</string>
|
||||
<string name="susfs_current_active_slot">Current Active Slot: %s</string>
|
||||
<string name="susfs_slot_uname">Uname: %s</string>
|
||||
<string name="susfs_slot_build_time">Build Time: %s</string>
|
||||
<string name="susfs_slot_current_badge">Current</string>
|
||||
<string name="susfs_slot_use_uname">Use Uname</string>
|
||||
<string name="susfs_slot_use_build_time">Use Build Time</string>
|
||||
<string name="susfs_slot_info_unavailable">Unable to retrieve slot information</string>
|
||||
<!-- SuSFS 自启动相关字符串 -->
|
||||
<string name="susfs_autostart_enabled_success">SuSFS auto-start module enabled, module path: %s</string>
|
||||
<string name="susfs_autostart_disabled_success">SuSFS auto-start module disabled</string>
|
||||
<!-- SuSFS Kstat相关字符串 -->
|
||||
<string name="susfs_tab_kstat_config">Kstat Configuration</string>
|
||||
<string name="kstat_static_config_added">Kstat static configuration added: %1$s</string>
|
||||
<string name="kstat_config_removed">Kstat configuration removed: %1$s</string>
|
||||
<string name="kstat_path_added">Kstat path added: %1$s</string>
|
||||
<string name="kstat_path_removed">Kstat path removed: %1$s</string>
|
||||
<string name="kstat_updated">Kstat updated: %1$s</string>
|
||||
<string name="kstat_full_clone_updated">Kstat full clone updated: %1$s</string>
|
||||
<string name="add_kstat_statically_title">Add Kstat Static Configuration</string>
|
||||
<string name="file_or_directory_path_label">File/Directory Path</string>
|
||||
<string name="hint_use_default_value">Hint: You can use "default" to use the original value</string>
|
||||
<string name="add_kstat_path_title">Add Kstat Path</string>
|
||||
<string name="add">Add</string>
|
||||
<string name="reset_kstat_config_title">Reset Kstat Configuration</string>
|
||||
<string name="reset_kstat_config_message">Are you sure you want to clear all Kstat configurations? This action cannot be undone</string>
|
||||
<string name="kstat_config_description_title">Kstat Configuration Description</string>
|
||||
<string name="kstat_config_description_add_statically">• add_sus_kstat_statically: Static stat info of files/directories</string>
|
||||
<string name="kstat_config_description_add">• add_sus_kstat: Add path before bind mount, storing original stat info</string>
|
||||
<string name="kstat_config_description_update">• update_sus_kstat: Update target ino, keep size and blocks unchanged</string>
|
||||
<string name="kstat_config_description_update_full_clone">• update_sus_kstat_full_clone: Update ino only, keep other original values</string>
|
||||
<string name="static_kstat_config">Static Kstat Configuration</string>
|
||||
<string name="kstat_path_management">Kstat Path Management</string>
|
||||
<string name="no_kstat_config_message">No Kstat configuration yet, click the button below to add</string>
|
||||
<!-- SuSFS Mount Hiding Control Related Strings -->
|
||||
<string name="susfs_hide_mounts_control_title">SUS Mount Hiding Control</string>
|
||||
<string name="susfs_hide_mounts_control_description">Control the hiding behavior of SUS mounts for processes</string>
|
||||
<string name="susfs_hide_mounts_for_all_procs_label">Hide SUS mounts for all processes</string>
|
||||
<string name="susfs_hide_mounts_for_all_procs_enabled_description">When enabled, SUS mounts will be hidden from all processes, including KSU processes</string>
|
||||
<string name="susfs_hide_mounts_for_all_procs_disabled_description">When disabled, SUS mounts will only be hidden from non-KSU processes, KSU processes can see the mounts</string>
|
||||
<string name="susfs_hide_mounts_all_enabled">Enabled hiding SUS mounts for all processes</string>
|
||||
<string name="susfs_hide_mounts_all_disabled">Disabled hiding SUS mounts for all processes</string>
|
||||
<string name="susfs_hide_mounts_recommendation">It is recommended to set to disabled after screen is unlocked, or during service.sh or boot-completed.sh stage, as this should fix the issue on some rooted apps that rely on mounts mounted by KSU process</string>
|
||||
<string name="susfs_hide_mounts_current_setting">Current setting: %s</string>
|
||||
<string name="susfs_hide_mounts_setting_all">Hide for all processes</string>
|
||||
<string name="susfs_hide_mounts_setting_non_ksu">Hide only for non-KSU processes</string>
|
||||
<string name="susfs_android_data_path_set">Android Data path has been set to: %s</string>
|
||||
<string name="susfs_sdcard_path_set">SD card path has been set to: %s</string>
|
||||
<string name="susfs_path_setup_warning">Path setup may not be fully successful, but SUS paths will continue to be added</string>
|
||||
<!-- 备份和还原相关字符串 -->
|
||||
<string name="susfs_backup_title">Backup</string>
|
||||
<string name="susfs_backup_description">Create a backup of all SuSFS configurations. The backup file will include all settings, paths, and configurations</string>
|
||||
<string name="susfs_backup_create">Create Backup</string>
|
||||
<string name="susfs_backup_success">Backup created successfully: %s</string>
|
||||
<string name="susfs_backup_failed">Backup creation failed: %s</string>
|
||||
<string name="susfs_backup_file_not_found">Backup file not found</string>
|
||||
<string name="susfs_backup_invalid_format">Invalid backup file format</string>
|
||||
<string name="susfs_backup_version_mismatch">Backup version mismatch, but will attempt to restore</string>
|
||||
<string name="susfs_restore_title">Restore</string>
|
||||
<string name="susfs_restore_description">Restore SuSFS configurations from a backup file. This will overwrite all current settings</string>
|
||||
<string name="susfs_restore_select_file">Select Backup File</string>
|
||||
<string name="susfs_restore_success" formatted="false">Configuration restored successfully from backup created on %s from device: %s</string>
|
||||
<string name="susfs_restore_failed">Restore failed: %s</string>
|
||||
<string name="susfs_restore_confirm_title">Confirm Restore</string>
|
||||
<string name="susfs_restore_confirm_description">This will overwrite all current SuSFS configurations. Are you sure you want to continue?</string>
|
||||
<string name="susfs_restore_confirm">Restore</string>
|
||||
<string name="susfs_backup_info_date">Backup Date: %s</string>
|
||||
<string name="susfs_backup_info_device">Device: %s</string>
|
||||
<string name="susfs_backup_info_version">Version: %s</string>
|
||||
<string name="hide_bl_script">Lock state</string>
|
||||
<string name="hide_bl_script_description">Overwrite bootloader locking status attribute in late_start service mode</string>
|
||||
<string name="cleanup_residue">Cleanup Residue</string>
|
||||
<string name="cleanup_residue_description">Clean up the residual files and directories of various modules and tools (May be deleted by mistake, resulting in loss and failure to start, use with caution)</string>
|
||||
<string name="susfs_edit_sus_path">Edit SUS Path</string>
|
||||
<string name="susfs_edit_sus_mount">Edit SUS Mount</string>
|
||||
<string name="susfs_edit_try_umount">Edit Try Umount</string>
|
||||
<string name="edit_kstat_statically_title">Edit Kstat Static Configuration</string>
|
||||
<string name="edit_kstat_path_title">Edit Kstat Path</string>
|
||||
<string name="susfs_save">Save</string>
|
||||
<string name="edit">Edit</string>
|
||||
<string name="delete">Delete</string>
|
||||
<string name="update">Update</string>
|
||||
<string name="kstat_config_updated">Kstat config update</string>
|
||||
<string name="kstat_path_updated">Kstat path update</string>
|
||||
<string name="susfs_update_full_clone">Susfs update full clone</string>
|
||||
<string name="umount_zygote_iso_service">Unmount Zygote Isolation Service</string>
|
||||
<string name="umount_zygote_iso_service_description">Enable this option to unmount Zygote isolation service mount points at system startup</string>
|
||||
<string name="umount_zygote_iso_service_enabled">Zygote isolation service unmount enabled</string>
|
||||
<string name="umount_zygote_iso_service_disabled">Zygote isolation service unmount disabled</string>
|
||||
<string name="app_paths_section">Application Path</string>
|
||||
<string name="other_paths_section">Other paths</string>
|
||||
<string name="add_custom_path">Other</string>
|
||||
<string name="add_app_path">App</string>
|
||||
<string name="susfs_add_app_path">Add App Path</string>
|
||||
<string name="susfs_version_mismatch">SuSFS library version mismatch, kernel: %1$s vs manager: %2$s, It is recommended to update the kernel or manager</string>
|
||||
<string name="warning">Warning</string>
|
||||
<string name="search_apps">Search Apps</string>
|
||||
<string name="selected_apps_count">%1$d apps selected</string>
|
||||
<string name="already_added_apps_count">%1$d apps already added</string>
|
||||
<string name="all_apps_already_added">All apps have been added</string>
|
||||
<string name="no_apps_found">No apps found</string>
|
||||
<!-- 循环路径相关 -->
|
||||
<string name="susfs_tab_sus_loop_paths">SUS Loop Paths</string>
|
||||
<string name="susfs_add_sus_loop_path">Add SUS Loop Path</string>
|
||||
<string name="susfs_edit_sus_loop_path">Edit SUS Loop Path</string>
|
||||
<string name="susfs_loop_path_added_success">SUS loop path added successfully: %1$s</string>
|
||||
<string name="susfs_loop_path_removed">SUS loop path removed: %1$s</string>
|
||||
<string name="susfs_loop_path_updated">SUS loop path updated: %1$s -> %2$s</string>
|
||||
<string name="susfs_no_loop_paths_configured">No SUS loop paths configured</string>
|
||||
<string name="susfs_reset_loop_paths_title">Reset Loop Paths</string>
|
||||
<string name="susfs_reset_loop_paths_message">Are you sure you want to clear all SUS loop paths? This action cannot be undone</string>
|
||||
<string name="susfs_loop_path_label">Loop Path</string>
|
||||
<string name="susfs_loop_path_placeholder">/data/example/path</string>
|
||||
<string name="susfs_loop_path_restriction_warning">Note: Only paths NOT inside /storage/ and /sdcard/ can be added via loop paths</string>
|
||||
<string name="susfs_loop_path_invalid_location">Error: Loop paths cannot be inside /storage/ or /sdcard/ directories</string>
|
||||
<string name="loop_paths_section">Loop Paths</string>
|
||||
<string name="add_loop_path">Add Loop Path</string>
|
||||
<!-- 循环路径功能描述 -->
|
||||
<string name="sus_loop_paths_description_title">Loop Path Configuration</string>
|
||||
<string name="sus_loop_paths_description_text">Loop paths are re-flagged as SUS_PATH on each non-root user app or isolated service startup. This helps address issues where added paths may have their inode status reset or inode re-created in the kernel</string>
|
||||
<string name="avc_log_spoofing">AVC Log Spoofing</string>
|
||||
<string name="avc_log_spoofing_enabled">AVC log spoofing has been enabled</string>
|
||||
<string name="avc_log_spoofing_disabled">AVC log spoofing has been disabled</string>
|
||||
<string name="avc_log_spoofing_description">Disabled: Disable spoofing the sus tcontext of \'su\' shown in avc log in kernel\nEnabled: Enable spoofing the sus tcontext of \'su\' with \'kernel\' shown in avc log in kernel</string>
|
||||
<string name="avc_log_spoofing_warning">Important Note:\n- It is set to \'0\' by default in kernel\n- Enabling this will sometimes make developers hard to identify the cause when they are debugging with some permission or SELinux issue, so users are advised to disable this when doing</string>
|
||||
<!-- SUS Map related strings -->
|
||||
<string name="susfs_tab_sus_maps">SUS Maps</string>
|
||||
<string name="susfs_sus_map_label">Library Path</string>
|
||||
<string name="susfs_sus_map_placeholder">/data/adb/modules/my_module/zygisk/arm64-v8a.so</string>
|
||||
<string name="susfs_add_sus_map">Add SUS Map</string>
|
||||
<string name="susfs_edit_sus_map">Edit SUS Map</string>
|
||||
<string name="susfs_sus_map_added_success">SUS map added successfully: %1$s</string>
|
||||
<string name="susfs_sus_map_removed">SUS map removed: %1$s</string>
|
||||
<string name="susfs_sus_map_updated">SUS map updated: %1$s -> %2$s</string>
|
||||
<string name="susfs_no_sus_maps_configured">No SUS maps configured</string>
|
||||
<string name="susfs_reset_sus_maps_title">Reset SUS Maps</string>
|
||||
<string name="susfs_reset_sus_maps_message">This will remove all configured SUS maps. This action cannot be undone.</string>
|
||||
<string name="sus_maps_section">Memory Map Hiding</string>
|
||||
<string name="sus_maps_description_title">Hide the mmapped real file from various maps in /proc/self/</string>
|
||||
<string name="sus_maps_description_text">Hide the real file paths of memory mappings from /proc/self/[maps|smaps|smaps_rollup|map_files|mem|pagemap]. Please note: This feature does not support hiding anonymous memory mappings, nor can it hide inline hooks or PLT hooks caused by the injected library itself.</string>
|
||||
<string name="sus_maps_warning">Important Notice: For applications with well-implemented injection detection mechanisms, this feature may not effectively bypass detection.</string>
|
||||
<string name="sus_maps_debug_info">First, find the target application\'s PID and UID using ps -enf, then check the relevant paths in /proc/<pid>/maps and compare the device numbers with those in /proc/1/mountinfo to ensure consistency. Only when the device numbers match can the map hiding function work properly.</string>
|
||||
</resources>
|
||||
|
||||
Reference in New Issue
Block a user