device_information() {
clear
echo -e "\033[1;32m主菜单\033[0m"
PS3='请选择一个操作: '
echo -e "[1] Luna相关
[2] 牛头相关
[3] 春秋相关
[4] Hunter相关
[5] 设备属性恢复
[6] 游戏相关
[7] 其他功能
[8] 退出"
options=(
    "Luna相关                      "
    "牛头相关"
    "春秋相关" 
    "Hunter相关"
    "设备属性恢复"
    "游戏相关"
    "其他功能"
    "退出"
)
select opt in "${options[@]}"
do
case $opt in
"Luna相关                      ")
clear
echo -e "\033[33m提示：\033[0m"
echo -e "\033[1;33mLuna相关\033[0m"
PS3='请选择一个操作: '
options=(
    "过Luna异常和外挂文件"
    "返回"
)
select opt in "${options[@]}"
do
case $opt in
"过Luna异常和外挂文件")
clear
echo -e "一键过Luna和牛头"

sleep 1
#目标目录（按格式可自行添加修改）
paths=(
    "/data/BingPUBG/guns.cfg"
    "/data/BingHPJY/pz.cfg"
    "/dev/Bing"
    "/data/单发枪配置.txt"
    "/data/A内核.ini"
    "/data/物资.txt"
    "/data/HPX"
    "/data/HPY"
    "/data/system/HPX"
    "/data/system/HPY"
    "/storage/emulated/0/落叶配置"
    "/storage/emulated/0/BY物资"
    "/data/nh2"
    "/data/nh3"
    "/data/nh4"
    "/data/nh5"
    "/data/nh.ko"
    "/data/jz"
    "/data/jz.sh"
    "/data/system/1iboxmem.so"
    "/data/system/liborangeinit.so"
    "/data/system/xydriver.ko"
)

for path in "${paths[@]}"; do
    if [ -f "$path" ]; then
        rm -f "$path"
        echo -e "${GREEN}文件 $path 已成功删除。${NC}"
    elif [ -d "$path" ]; then
        rm -rf "$path"
        echo -e "${GREEN}文件夹 $path 已成功删除。${NC}"
    else
        echo -e "${YELLOW}路径 $path 无残留，无需清理。${NC}"
    fi
done


sleep 2

clear
#目标目录
paths=(
    "/data/BingPUBG/guns.cfg"
    "/data/BingHPJY/pz.cfg"
    "/dev/Bing"
    "/data/adb/enenen"
    "/data/单发枪配置.txt"
    "/data/A内核.ini"
    "/data/物资.txt"
    "/data/HPX"
    "/data/HPY"
    "/data/system/HPX"
    "/data/system/HPY"
    "/storage/emulated/0/落叶配置"
    "/storage/emulated/0/BY物资"
    "/data/nh"
    "/data/nh2"
    "/data/nh3"
    "/data/nh4"
    "/data/nh5"
    "/data/nh.ko"
    "/data/jz"
    "/data/jz.sh"
    "/data/system/1iboxmem.so"
    "/data/system/liborangeinit.so"
    "/data/system/xydriver.ko"
    "/sdcard/缓存文件"
    "/sdcard/原神内核"
    "/sdcard/imei"
    "/sdcard/km"
    "/sdcard/Download/nbavmc_unxqbih.dat.tmp"
    "/sdcard/Download/nbavmc_unxqbih.dat"
    "/sdcard/Download/juscrkat.dat.tmp"
    "/sdcard/Download/juscrkat.dat"
    "/sdcard/Download/HANYCJLZOEUS_TOKEN2.dat.tmp"
    "/sdcard/Download/HANYCJLZOEUS_TOKEN2.dat"
    "/sdcard/M3u898k"
    "/sdcard/rlgg"
    "/data/apple"
    "/data/lolcat"
    "/data/lost+found"
    "/data/gsi"
    "/data/incremiopcvb"
    "/data/incremental"
    "/data/fonts"
    "/data/dpm"
    "/data/bootanim"
    "/data/bootchart"
    "/data/app-staging"
    "/data/app-private"
    "/data/app-lib"
    "/data/app-ephemeral"
    "/data/app-asec"
    "/data/ota"
    "/data/ota_package"
    "/data/ru.sxbuIDfx.pFSOyagrF"
    "/data/server_configurable_flags"
    "/data/ss"
    "/data/tmp"
    "/data/system/orangekernel"
    "/data/system/orange/kernel"
    "/data/system/orange"
    "/data/system/orange-kernel"
    "/data/system/orange_kernel"
    "/data/data/88imei"
    "/data/data/88km"
    "/data/data/imei"
    "/data/data/km"
    "/data/system/PBX"
    "/data/system/HPX"
    "/data/system/out"
    "/data/data/PBX"
    "/data/data/HPX"
    "/data/data/out"
)
total_paths=${#paths[@]}
success_count=0
no_residue_count=0

show_progress() {
    local progress=$((100 * (success_count + no_residue_count) / total_paths))
    local filled_count=$((progress / 10))
    local filled_bars=$(printf '%*s' "$filled_count" | tr ' ' '⚀')
    local empty_bars=$(printf '%*s' "$((10 - filled_count))" | tr ' ' ' ')
    printf "\r${RED}清理进度: [${filled_bars}${empty_bars}] ${progress}%%${NC}"
}

for path in "${paths[@]}"; do
    if [ -f "$path" ]; then
        rm -f "$path"
        ((success_count++))
    elif [ -d "$path" ]; then
        rm -rf "$path"
        ((success_count++))
    else
        ((no_residue_count++))
    fi
    show_progress
    sleep 0.01
done
echo -e "\n>>>>>>>> 执行清理残留完成 >>>>>>>>"
echo -e ""
echo -e "清理结果："
if [ $success_count -gt 0 ]; then
    echo -e "$success_count 个文件或文件夹已成功删除。"
fi
if [ $no_residue_count -gt 0 ]; then
    echo -e "$no_residue_count 个路径无残留，无需清理。"
fi
echo -e ""
echo -e "${GREEN}特别说明：${NC}"
echo -e ""
echo -e "${GREEN}希望各位把您使用的辅助配置目录位发给我，我会添加进去的，因为辅助太多太多了，我个人也收集不完全。${NC}"
echo -e "${GREEN}文件目录位置例子：【/data/A内核.ini】【/data/单发枪配置.txt】【/data/BingHPJY/pz.cfg】${NC}"
echo -e "${GREEN}添加了更多的残留清理。${NC}"
echo -e "${GREEN}加QQ:3153729134直接发我您使用的辅助配置目录就行${NC}"
sleep 1
clear

# 多目录小文件清理脚本（Android特化版）

TARGET_DIRS=(
    "/storage/emulated/0/Android/data"
    "/storage/emulated/0/Android/media" 
    "/storage/emulated/0/Android/obb"
)

SIZE_LIMIT=20  # 单位KB
PROTECTED_PATTERNS=(
    "com.android.*" 
    "com.google.*"
    "android"
    "*.nomedia"       # 媒体库控制文件
    "*.obb"           # 游戏数据包
)

function clean_small_dirs() {
    local target_dir="$1"
    
    echo -e "🔍 扫描目录：$target_dir"
    [ ! -d "$target_dir" ] && {
        echo -e "⚠️ 目录不存在，跳过"
        return
    }

    find "$target_dir" -mindepth 1 -maxdepth 1 -type d 2>/dev/null \
        | while read dir; do
        
        dir_name=$(basename "$dir")
        
        # 保护规则检查
        for pattern in "${PROTECTED_PATTERNS[@]}"; do
            case "$dir_name" in
                $pattern)
                    echo -e "🛡️ 受保护: $dir_name"
                    continue 2
                    ;;
            esac
        done

        # 精确计算目录大小
        dir_size=$(du -sk "$dir" 2>/dev/null | awk '{print $1}')
        
        # 大小判断
        if [ -n "$dir_size" ] && [ "$dir_size" -lt $SIZE_LIMIT ]; then
            echo -e "🗑️ 删除 ${dir_size}KB: $dir_name"
            rm -rf "$dir" 2>/dev/null
        fi
    done
}

# 主流程
for dir in "${TARGET_DIRS[@]}"; do
    clean_small_dirs "$dir"
done

echo -e "✅ 多目录清理完成"
sleep 1
clear

# 定义 resetprop 路径列表
RESETPROP_PATHS=(
    "/system/bin/resetprop"
    "/system_ext/bin/resetprop"
    "/product/bin/resetprop"
    "/data/adb/ksu/bin/resetprop"
    "/data/adb/ap/bin/resetprop"
)

# 初始化 resetprop 路径变量
RESETPROP_BIN=""

# 查找 resetprop
for path in "${RESETPROP_PATHS[@]}"; do
    if [ -f "$path" ] && [ -x "$path" ]; then
        RESETPROP_BIN="$path"
        case "$path" in
            "/system/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别德尔塔/金丝雀"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            "/system_ext/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别阿尔法(旧版)"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            "/product/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别Magisk/阿尔法(新版)"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            "/data/adb/ksu/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别KernelSU/Wild KSU/SukiSU Ultra"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            "/data/adb/ap/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别APatch/FolkPatch"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            *)
                # 理论上不会进入这里
                echo -e "🚫 暂未适配你的设备"
                echo -e "请网盘下载查找sh并执行，然后截屏发给我。"
                echo -e "酷安SukiSU土豆"
                exit 1
                ;;
        esac
        break
    fi
done

PROP_NAME="persist.hyperceiler.log.level"

# 检查属性是否存在
PROP_VALUE=$(getprop "$PROP_NAME")

if [ -n "$PROP_VALUE" ]; then
    echo -e "发现西米露模块残留"
    # 检查是否找到 resetprop
    if [ -z "$RESETPROP_BIN" ]; then
        echo -e "\033[31m❌ 错误：未找到可执行的resetprop，您可能无法清理西米露模块残留！\033[0m"
        echo -e "此项暂不支持skroot"
        sleep 3
    fi
    $RESETPROP_BIN "$PROP_NAME" ""
    # 验证
    NEW_VALUE=$(getprop "$PROP_NAME")
    if [ -z "$NEW_VALUE" ]; then
        echo -e "西米露 残留已清除"
    else
        echo -e "西米露残留清理失败，当前值: $NEW_VALUE"
    fi
else
    echo -e "西米露 残留已清除"
fi

sleep 0.5
rm -rf /storage/emulated/0/Android/data/me.garfieldhan.holmes
echo -e "Holmes 文件已清除"
sleep 0.5
rm -rf /storage/emulated/0/Android/data/com.zhenxi.hunter
echo -e "Hunter 文件已清除"
sleep 0.5
rm -rf /storage/emulated/0/Android/data/icu.nullptr.nativetest
echo -e "Native Test 文件已清除"
sleep 0.5
rm -rf /storage/emulated/0/Android/data/com.byyoung.setting
echo -e "爱玩机工具箱 文件已清除"
sleep 0.5
rm -rf /storage/emulated/0/Android/data/bin.mt.plus
echo -e "MT管理器 杂质已清理"
sleep 0.5
rm -rf /storage/emulated/0/Android/data/com.byyoung.setting
rm -rf /data/property/
echo -e "隐藏应用列表 文件已清理"
sleep 1
rm -rf /storage/emulated/0/Android/data/com.omarea.vtools
rm -rf /storage/emulated/0/Android/data/moe.shizuku.privileged.api
rm -rf /storage/emulated/0/Android/obb/io.github.vvb2060.mahoshojo
rm -rf /storage/emulated/0/Android/data/io.github.vvb2060.mahoshojo
rm -rf /storage/emulated/0/Android/media/io.github.vvb2060.mahoshojo
rm -rf /storage/emulated/0/Android/obb/icu.nullptr.applistdetector
rm -rf /storage/emulated/0/Android/data/icu.nullptr.applistdetector
rm -rf /storage/emulated/0/Android/media/icu.nullptr.applistdetector
rm -rf /storage/emulated/0/Android/obb/com.byxiaorun.detector
rm -rf /storage/emulated/0/Android/data/com.byxiaorun.detector
rm -rf /storage/emulated/0/Android/media/com.byxiaorun.detector
rm -rf /storage/emulated/0/Android/obb/io.github.huskydg.memorydetector
rm -rf /storage/emulated/0/Android/data/io.github.huskydg.memorydetector
rm -rf /storage/emulated/0/Android/media/io.github.huskydg.memorydetector
rm -rf /storage/emulated/0/Android/obb/com.OrangeEnvironment.Detector
rm -rf /storage/emulated/0/Android/data/com.OrangeEnvironment.Detector
rm -rf /storage/emulated/0/Android/media/com.OrangeEnvironment.Detector
rm -rf /storage/emulated/0/Android/obb/io.github.vvb2060.mahoshojo
rm -rf /storage/emulated/0/Android/data/io.github.vvb2060.mahoshojo
rm -rf /storage/emulated/0/Android/media/io.github.vvb2060.mahoshojo
rm -rf /storage/emulated/0/Android/obb/com.Longze.detector.pro2
rm -rf /storage/emulated/0/Android/data/com.Longze.detector.pro2
rm -rf /storage/emulated/0/Android/media/com.Longze.detector.pro2
rm -rf /storage/emulated/0/Android/obb/rikka.safetynetchecker
rm -rf /storage/emulated/0/Android/data/rikka.safetynetchecker
rm -rf /storage/emulated/0/Android/media/rikka.safetynetchecker
rm -rf /storage/emulated/0/Android/obb/io.github.vvb2060.keyattestation
rm -rf /storage/emulated/0/Android/data/io.github.vvb2060.keyattestation
rm -rf /storage/emulated/0/Android/media/io.github.vvb2060.keyattestation
rm -rf /storage/emulated/0/Download/WechatXposed
rm -rf /storage/emulated/0/WechatXposed
rm -rf /data/local/tmp/luckys
rm -rf /data/local/tmp/HyperCeiler
rm -rf /data/local/tmp/simpleHook
rm -rf /data/local/tmp/DisabledAllGoogleServices
rm -rf /data/local/tmp/cleaner_starter
rm -rf /data/local/tmp/byyang
rm -rf /data/local/tmp/mount_mask
rm -rf /data/local/tmp/mount_mark
rm -rf /data/local/tmp/scriptTMP
rm -rf /data/local/tmp/horae_control.log
rm -rf /data/local/tmp/resetprop
rm -rf /data/local/tmp/Surfing_update
rm -rf /data/local/tmp/yshell
rm -rf /data/local/tmp/encore_logo.png
echo -e "一堆杂项清理"
sleep 1

# 空目录清理/小文件清理/指定路径删除
# ======================================
# 一、空目录清理模块
# ======================================
TARGET_PATHS=(
    "/data/media/0/Android/data"
    "/data/media/0/Android/media" 
    "/data/media/0/Android/obb"
)
EXCLUDE_DIRS=("com.termux" "com.android.providers.downloads")

clean_empty_dirs() {
    echo -e "\n=== 空目录清理开始 ==="
    local total_cleaned=0
    
    for path in "${TARGET_PATHS[@]}"; do
        echo -e "处理路径: $path"
        if [ ! -d "$path" ]; then
            echo -e "❌ 目录不存在: $path"
            continue
        fi
        
        local path_cleaned=0
        find "$path" -mindepth 1 -maxdepth 1 -type d | while IFS= read -r dir; do
            local dir_name=${dir##*/}
            local exclude=0
            
            # 检查是否在排除列表中
            for exclude_dir in "${EXCLUDE_DIRS[@]}"; do
                if [ "$dir_name" = "$exclude_dir" ]; then
                    echo -e "🛡️ 保护跳过: $dir_name"
                    exclude=1
                    break
                fi
            done
            
            if [ "$exclude" -eq 0 ]; then
                if [ -z "$(ls -A "$dir" 2>/dev/null)" ]; then
                    echo -e "🗑️ 删除空目录: $dir"
                    if rm -rf -- "$dir" 2>/dev/null; then
                        echo -e "✅ 删除成功"
                        path_cleaned=$((path_cleaned + 1))
                    else
                        echo -e "❌ 删除失败"
                    fi
                fi
            fi
        done
        
        if [ "$path_cleaned" -gt 0 ]; then
            echo -e "📊 本路径共清理 $path_cleaned 个空目录"
            total_cleaned=$((total_cleaned + path_cleaned))
        fi
    done
    
    echo -e "📈 空目录清理完成，总计清理 $total_cleaned 个空目录"
    sleep 3
}

# ======================================
# 二、小文件目录清理模块
# ======================================
SMALL_TARGET_DIRS=(
    "/storage/emulated/0/Android/data"
    "/storage/emulated/0/Android/media"
    "/storage/emulated/0/Android/obb"
)
SIZE_LIMIT=20  # KB
PROTECT_PATTERNS=("com.android.*" "com.google.*" "android" "*.nomedia" "*.obb")

clean_small_dirsm() {
    echo -e "\n=== 小文件目录清理开始 ==="
    for dir in "${SMALL_TARGET_DIRS[@]}"; do
        [ ! -d "$dir" ] && {
            echo -e "⚠️ 目录不存在: $dir"
            continue
        }
        echo -e "🔍 扫描目录: $dir"
        find "$dir" -mindepth 1 -maxdepth 1 -type d | while IFS= read -r dir_path; do
            local name=${dir_path##*/}
            # 保护规则匹配（case语法完全兼容POSIX）
            for pattern in "${PROTECT_PATTERNS[@]}"; do
                case "$name" in $pattern)
                    echo -e "🛡️ 受保护目录: $name"
                    continue 2
                esac
            done
            # 大小计算
            local size=$(du -sk "$dir_path" | cut -f1)
            [[ "$size" -lt "$SIZE_LIMIT" ]] && {
                echo -e "🗑️ 删除 ${size}KB 目录: $name"
                rm -rf -- "$dir_path"
            }
        done
    done
}

# ======================================
# 三、指定路径删除模块
# ======================================
DELETE_PATHS=(
    "/data/nh"
    "/data/nh5"
    "/data/nh6"
    "/data/nh2"
    "/data/nh3"
    "/data/nh4"
    "/data/nh.ko"
    "/data/gamepad_driver.so"
    "/sdcard/elgg"
    "/data/BingPUBG"
    "/data/BingHPJY"
    "/data/jz"
    "/data/jz.sh"
    "/data/system/liboxmem.so"
    "/system/lib/hid/gamepad_driver.so"
    "/data/.gamepad_driver_installed"
    "/data/system/liborangeinit.so"
    "/data/system/xydriver.ko"
    "/data/BingPUBG/guns.cfg"
    "/data/BingHPJY/pz.cfg"
    "/dev/Bing"
    "/data/单发枪配置.txt"
    "/data/A内核.ini"
    "/data/物资.txt"
    "/data/HPX" 
    "/data/HPY"
    "/data/system/HPX"
    "/data/system/HPY"
    "/storage/emulated/0/落叶配置"
    "/storage/emulated/0/BY物资"
    "/storage/emulated/0/落叶配置/落叶配置.txt"
    "/storage/emulated/0/BY物资/BY物资.txt"
    "/storage/emulated/elgg"
    "/storage/emulated/0/Download/WechatXposed"
    "/storage/emulated/legacy/Android/data/com.apocalua.run"
)

delete_specified_paths() {
    echo -e "\n=== 指定路径删除开始 ==="
    for path in "${DELETE_PATHS[@]}"; do
        [ -e "$path" ] || {
            echo -e "跳过不存在的路径: $path"
            continue
        }
        rm -rf -- "$path" 2>/dev/null
        echo -e "$(if [ -d "$path" ]; then echo -e "已删除目录"; else echo -e "已删除文件"; fi): $path"
    done
}

clean_empty_dirs
clean_small_dirsm
delete_specified_paths


echo -e "✅所有操作已完成！"
echo -e ""
sleep 2
clear
echo -e "1) 过Luna异常和外挂文件
2) 返回"
;;

"返回")
clear
echo -e "\033[1;32m主菜单\033[0m"
echo -e "1) Luna相关
2) 牛头相关
3) 春秋相关
4) Hunter相关
5) 设备属性恢复
6) 游戏相关
7) 其他功能
8) 退出"
break
;;

*) 
echo -e "\033[33m无效的选项\033[0m";;
esac
done
;;

"牛头相关")
clear
echo -e ""
echo -e "\033[33m提示：\033[0m"
echo -e "\033[1;33m牛头相关\033[0m"
PS3='请选择一个操作: '
options=(
    "过牛头32 Found Root/Hook"
    "返回"
)
select opt in "${options[@]}"
do
case $opt in
"过牛头32 Found Root/Hook")
clear
echo -e "一键过Luna和牛头"
echo -e "其他脚本的大合自己加了几个指令"
sleep 1
#目标目录（按格式可自行添加修改）
paths=(
    "/data/BingPUBG/guns.cfg"
    "/data/BingHPJY/pz.cfg"
    "/dev/Bing"
    "/data/单发枪配置.txt"
    "/data/A内核.ini"
    "/data/物资.txt"
    "/data/HPX"
    "/data/HPY"
    "/data/system/HPX"
    "/data/system/HPY"
    "/storage/emulated/0/落叶配置"
    "/storage/emulated/0/BY物资"
    "/data/nh2"
    "/data/nh3"
    "/data/nh4"
    "/data/nh5"
    "/data/nh.ko"
    "/data/jz"
    "/data/jz.sh"
    "/data/system/1iboxmem.so"
    "/data/system/liborangeinit.so"
    "/data/system/xydriver.ko"
)

for path in "${paths[@]}"; do
    if [ -f "$path" ]; then
        rm -f "$path"
        echo -e "${GREEN}文件 $path 已成功删除。${NC}"
    elif [ -d "$path" ]; then
        rm -rf "$path"
        echo -e "${GREEN}文件夹 $path 已成功删除。${NC}"
    else
        echo -e "${YELLOW}路径 $path 无残留，无需清理。${NC}"
    fi
done
echo -e "目前只清理QX驱动残留+橘子驱动残留，还有一些辅助残留。"
echo -e "知道其它内核驱动文件残留文件地址可以告诉我，加我QQ发我就行。"
echo -e "联系QQ：3153729134"
echo -e "辅助文件地址和驱动都可以，添加进去以后方便大家使用"
echo -e "这方面我也是小白，不太懂"
sleep 2
clear

#目标目录
paths=(
    "/data/BingPUBG/guns.cfg"
    "/data/BingHPJY/pz.cfg"
    "/dev/Bing"
    "/data/adb/enenen"
    "/data/单发枪配置.txt"
    "/data/A内核.ini"
    "/data/物资.txt"
    "/data/HPX"
    "/data/HPY"
    "/data/system/HPX"
    "/data/system/HPY"
    "/storage/emulated/0/落叶配置"
    "/storage/emulated/0/BY物资"
    "/data/nh"
    "/data/nh2"
    "/data/nh3"
    "/data/nh4"
    "/data/nh5"
    "/data/nh.ko"
    "/data/jz"
    "/data/jz.sh"
    "/data/system/1iboxmem.so"
    "/data/system/liborangeinit.so"
    "/data/system/xydriver.ko"
    "/sdcard/缓存文件"
    "/sdcard/原神内核"
    "/sdcard/imei"
    "/sdcard/km"
    "/sdcard/Download/nbavmc_unxqbih.dat.tmp"
    "/sdcard/Download/nbavmc_unxqbih.dat"
    "/sdcard/Download/juscrkat.dat.tmp"
    "/sdcard/Download/juscrkat.dat"
    "/sdcard/Download/HANYCJLZOEUS_TOKEN2.dat.tmp"
    "/sdcard/Download/HANYCJLZOEUS_TOKEN2.dat"
    "/sdcard/M3u898k"
    "/sdcard/rlgg"
    "/data/apple"
    "/data/lolcat"
    "/data/lost+found"
    "/data/gsi"
    "/data/incremiopcvb"
    "/data/incremental"
    "/data/fonts"
    "/data/dpm"
    "/data/bootanim"
    "/data/bootchart"
    "/data/app-staging"
    "/data/app-private"
    "/data/app-lib"
    "/data/app-ephemeral"
    "/data/app-asec"
    "/data/ota"
    "/data/ota_package"
    "/data/ru.sxbuIDfx.pFSOyagrF"
    "/data/server_configurable_flags"
    "/data/ss"
    "/data/tmp"
    "/data/system/orangekernel"
    "/data/system/orange/kernel"
    "/data/system/orange"
    "/data/system/orange-kernel"
    "/data/system/orange_kernel"
    "/data/data/88imei"
    "/data/data/88km"
    "/data/data/imei"
    "/data/data/km"
    "/data/system/PBX"
    "/data/system/HPX"
    "/data/system/out"
    "/data/data/PBX"
    "/data/data/HPX"
    "/data/data/out"
)
total_paths=${#paths[@]}
success_count=0
no_residue_count=0

show_progress() {
    local progress=$((100 * (success_count + no_residue_count) / total_paths))
    local filled_count=$((progress / 10))
    local filled_bars=$(printf '%*s' "$filled_count" | tr ' ' '⚀')
    local empty_bars=$(printf '%*s' "$((10 - filled_count))" | tr ' ' ' ')
    printf "\r${RED}清理进度: [${filled_bars}${empty_bars}] ${progress}%%${NC}"
}

for path in "${paths[@]}"; do
    if [ -f "$path" ]; then
        rm -f "$path"
        ((success_count++))
    elif [ -d "$path" ]; then
        rm -rf "$path"
        ((success_count++))
    else
        ((no_residue_count++))
    fi
    show_progress
    sleep 0.01
done
echo -e "\n>>>>>>>> 执行清理残留完成 >>>>>>>>"
echo -e ""
echo -e "清理结果："
if [ $success_count -gt 0 ]; then
    echo -e "$success_count 个文件或文件夹已成功删除。"
fi
if [ $no_residue_count -gt 0 ]; then
    echo -e "$no_residue_count 个路径无残留，无需清理。"
fi
echo -e ""
echo -e "${GREEN}特别说明：${NC}"
echo -e ""
echo -e "${GREEN}希望各位把您使用的辅助配置目录位发给我，我会添加进去的，因为辅助太多太多了，我个人也收集不完全。${NC}"
echo -e "${GREEN}文件目录位置例子：【/data/A内核.ini】【/data/单发枪配置.txt】【/data/BingHPJY/pz.cfg】${NC}"
echo -e "${GREEN}添加了更多的残留清理。${NC}"
echo -e "${GREEN}加QQ:3153729134直接发我您使用的辅助配置目录就行${NC}"
sleep 1
clear

# 多目录小文件清理脚本（Android特化版）

TARGET_DIRS=(
    "/storage/emulated/0/Android/data"
    "/storage/emulated/0/Android/media" 
    "/storage/emulated/0/Android/obb"
)

SIZE_LIMIT=20  # 单位KB
PROTECTED_PATTERNS=(
    "com.android.*" 
    "com.google.*"
    "android"
    "*.nomedia"       # 媒体库控制文件
    "*.obb"           # 游戏数据包
)

function clean_small_dirs() {
    local target_dir="$1"
    
    echo -e "🔍 扫描目录：$target_dir"
    [ ! -d "$target_dir" ] && {
        echo -e "⚠️ 目录不存在，跳过"
        return
    }

    find "$target_dir" -mindepth 1 -maxdepth 1 -type d 2>/dev/null \
        | while read dir; do
        
        dir_name=$(basename "$dir")
        
        # 保护规则检查
        for pattern in "${PROTECTED_PATTERNS[@]}"; do
            case "$dir_name" in
                $pattern)
                    echo -e "🛡️ 受保护: $dir_name"
                    continue 2
                    ;;
            esac
        done

        # 精确计算目录大小
        dir_size=$(du -sk "$dir" 2>/dev/null | awk '{print $1}')
        
        # 大小判断
        if [ -n "$dir_size" ] && [ "$dir_size" -lt $SIZE_LIMIT ]; then
            echo -e "🗑️ 删除 ${dir_size}KB: $dir_name"
            rm -rf "$dir" 2>/dev/null
        fi
    done
}

# 主流程
for dir in "${TARGET_DIRS[@]}"; do
    clean_small_dirs "$dir"
done
echo -e "✅ 多目录清理完成"
sleep 1
clear

# 定义 resetprop 路径列表
RESETPROP_PATHS=(
    "/system/bin/resetprop"
    "/system_ext/bin/resetprop"
    "/product/bin/resetprop"
    "/data/adb/ksu/bin/resetprop"
    "/data/adb/ap/bin/resetprop"
)

# 初始化 resetprop 路径变量
RESETPROP_BIN=""

# 查找 resetprop
for path in "${RESETPROP_PATHS[@]}"; do
    if [ -f "$path" ] && [ -x "$path" ]; then
        RESETPROP_BIN="$path"
        case "$path" in
            "/system/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别德尔塔/金丝雀"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            "/system_ext/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别阿尔法(旧版)"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            "/product/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别Magisk/阿尔法(新版)"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            "/data/adb/ksu/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别KernelSU/Wild KSU/SukiSU Ultra"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            "/data/adb/ap/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别APatch/FolkPatch"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            *)
                # 理论上不会进入这里
                echo -e "🚫 暂未适配你的设备"
                echo -e "请网盘下载查找sh并执行，然后截屏发给我。"
                echo -e "酷安SukiSU土豆"
                exit 1
                ;;
        esac
        break
    fi
done

PROP_NAME="persist.hyperceiler.log.level"

# 检查属性是否存在
PROP_VALUE=$(getprop "$PROP_NAME")

if [ -n "$PROP_VALUE" ]; then
    echo -e "发现西米露模块残留"
    # 检查是否找到 resetprop
    if [ -z "$RESETPROP_BIN" ]; then
        echo -e "\033[31m❌ 错误：未找到可执行的resetprop，您可能无法清理西米露模块残留！\033[0m"
        echo -e "此项暂不支持skroot"
        sleep 3
    fi
    $RESETPROP_BIN "$PROP_NAME" ""
    # 验证
    NEW_VALUE=$(getprop "$PROP_NAME")
    if [ -z "$NEW_VALUE" ]; then
        echo -e "西米露 残留已清除"
    else
        echo -e "西米露残留清理失败，当前值: $NEW_VALUE"
    fi
else
    echo -e "西米露 残留已清除"
fi

sleep 0.5
rm -rf /storage/emulated/0/Android/data/me.garfieldhan.holmes
echo -e "Holmes 文件已清除"
sleep 0.5
rm -rf /storage/emulated/0/Android/data/com.zhenxi.hunter
echo -e "Hunter 文件已清除"
sleep 0.5
rm -rf /storage/emulated/0/Android/data/icu.nullptr.nativetest
echo -e "Native Test 文件已清除"
sleep 0.5
rm -rf /storage/emulated/0/Android/data/com.byyoung.setting
echo -e "爱玩机工具箱 文件已清除"
sleep 0.5
rm -rf /storage/emulated/0/Android/data/bin.mt.plus
echo -e "MT管理器 杂质已清理"
sleep 0.5
rm -rf /storage/emulated/0/Android/data/com.byyoung.setting
rm -rf /data/property/
echo -e "隐藏应用列表 文件已清理"
sleep 1
rm -rf /storage/emulated/0/Android/data/com.omarea.vtools
rm -rf /storage/emulated/0/Android/data/moe.shizuku.privileged.api
rm -rf /storage/emulated/0/Android/obb/io.github.vvb2060.mahoshojo
rm -rf /storage/emulated/0/Android/data/io.github.vvb2060.mahoshojo
rm -rf /storage/emulated/0/Android/media/io.github.vvb2060.mahoshojo
rm -rf /storage/emulated/0/Android/obb/icu.nullptr.applistdetector
rm -rf /storage/emulated/0/Android/data/icu.nullptr.applistdetector
rm -rf /storage/emulated/0/Android/media/icu.nullptr.applistdetector
rm -rf /storage/emulated/0/Android/obb/com.byxiaorun.detector
rm -rf /storage/emulated/0/Android/data/com.byxiaorun.detector
rm -rf /storage/emulated/0/Android/media/com.byxiaorun.detector
rm -rf /storage/emulated/0/Android/obb/io.github.huskydg.memorydetector
rm -rf /storage/emulated/0/Android/data/io.github.huskydg.memorydetector
rm -rf /storage/emulated/0/Android/media/io.github.huskydg.memorydetector
rm -rf /storage/emulated/0/Android/obb/com.OrangeEnvironment.Detector
rm -rf /storage/emulated/0/Android/data/com.OrangeEnvironment.Detector
rm -rf /storage/emulated/0/Android/media/com.OrangeEnvironment.Detector
rm -rf /storage/emulated/0/Android/obb/io.github.vvb2060.mahoshojo
rm -rf /storage/emulated/0/Android/data/io.github.vvb2060.mahoshojo
rm -rf /storage/emulated/0/Android/media/io.github.vvb2060.mahoshojo
rm -rf /storage/emulated/0/Android/obb/com.Longze.detector.pro2
rm -rf /storage/emulated/0/Android/data/com.Longze.detector.pro2
rm -rf /storage/emulated/0/Android/media/com.Longze.detector.pro2
rm -rf /storage/emulated/0/Android/obb/rikka.safetynetchecker
rm -rf /storage/emulated/0/Android/data/rikka.safetynetchecker
rm -rf /storage/emulated/0/Android/media/rikka.safetynetchecker
rm -rf /storage/emulated/0/Android/obb/io.github.vvb2060.keyattestation
rm -rf /storage/emulated/0/Android/data/io.github.vvb2060.keyattestation
rm -rf /storage/emulated/0/Android/media/io.github.vvb2060.keyattestation
rm -rf /storage/emulated/0/Download/WechatXposed
rm -rf /storage/emulated/0/WechatXposed
rm -rf /data/local/tmp/luckys
rm -rf /data/local/tmp/HyperCeiler
rm -rf /data/local/tmp/simpleHook
rm -rf /data/local/tmp/DisabledAllGoogleServices
rm -rf /data/local/tmp/cleaner_starter
rm -rf /data/local/tmp/byyang
rm -rf /data/local/tmp/mount_mask
rm -rf /data/local/tmp/mount_mark
rm -rf /data/local/tmp/scriptTMP
rm -rf /data/local/tmp/horae_control.log
rm -rf /data/local/tmp/resetprop
rm -rf /data/local/tmp/Surfing_update
rm -rf /data/local/tmp/yshell
rm -rf /data/local/tmp/encore_logo.png
echo -e "一堆杂项清理"
sleep 1

# 空目录清理/小文件清理/指定路径删除
# ======================================
# 一、空目录清理模块
# ======================================
TARGET_PATHS=(
    "/data/media/0/Android/data"
    "/data/media/0/Android/media" 
    "/data/media/0/Android/obb"
)
EXCLUDE_DIRS=("com.termux" "com.android.providers.downloads")

clean_empty_dirs() {
    echo -e "\n=== 空目录清理开始 ==="
    local total_cleaned=0
    
    for path in "${TARGET_PATHS[@]}"; do
        echo -e "处理路径: $path"
        if [ ! -d "$path" ]; then
            echo -e "❌ 目录不存在: $path"
            continue
        fi
        
        local path_cleaned=0
        find "$path" -mindepth 1 -maxdepth 1 -type d | while IFS= read -r dir; do
            local dir_name=${dir##*/}
            local exclude=0
            
            # 检查是否在排除列表中
            for exclude_dir in "${EXCLUDE_DIRS[@]}"; do
                if [ "$dir_name" = "$exclude_dir" ]; then
                    echo -e "🛡️ 保护跳过: $dir_name"
                    exclude=1
                    break
                fi
            done
            
            if [ "$exclude" -eq 0 ]; then
                if [ -z "$(ls -A "$dir" 2>/dev/null)" ]; then
                    echo -e "🗑️ 删除空目录: $dir"
                    if rm -rf -- "$dir" 2>/dev/null; then
                        echo -e "✅ 删除成功"
                        path_cleaned=$((path_cleaned + 1))
                    else
                        echo -e "❌ 删除失败"
                    fi
                fi
            fi
        done
        
        if [ "$path_cleaned" -gt 0 ]; then
            echo -e "📊 本路径共清理 $path_cleaned 个空目录"
            total_cleaned=$((total_cleaned + path_cleaned))
        fi
    done
    
    echo -e "📈 空目录清理完成，总计清理 $total_cleaned 个空目录"
    sleep 3
}

# ======================================
# 二、小文件目录清理模块
# ======================================
SMALL_TARGET_DIRS=(
    "/storage/emulated/0/Android/data"
    "/storage/emulated/0/Android/media"
    "/storage/emulated/0/Android/obb"
)
SIZE_LIMIT=20  # KB
PROTECT_PATTERNS=("com.android.*" "com.google.*" "android" "*.nomedia" "*.obb")

clean_small_dirsm() {
    echo -e "\n=== 小文件目录清理开始 ==="
    for dir in "${SMALL_TARGET_DIRS[@]}"; do
        [ ! -d "$dir" ] && {
            echo -e "⚠️ 目录不存在: $dir"
            continue
        }
        echo -e "🔍 扫描目录: $dir"
        find "$dir" -mindepth 1 -maxdepth 1 -type d | while IFS= read -r dir_path; do
            local name=${dir_path##*/}
            # 保护规则匹配（case语法完全兼容POSIX）
            for pattern in "${PROTECT_PATTERNS[@]}"; do
                case "$name" in $pattern)
                    echo -e "🛡️ 受保护目录: $name"
                    continue 2
                esac
            done
            # 大小计算
            local size=$(du -sk "$dir_path" | cut -f1)
            [[ "$size" -lt "$SIZE_LIMIT" ]] && {
                echo -e "🗑️ 删除 ${size}KB 目录: $name"
                rm -rf -- "$dir_path"
            }
        done
    done
}

# ======================================
# 三、指定路径删除模块
# ======================================
DELETE_PATHS=(
    "/data/nh"
    "/data/nh5"
    "/data/nh6"
    "/data/nh2"
    "/data/nh3"
    "/data/nh4"
    "/data/nh.ko"
    "/data/gamepad_driver.so"
    "/sdcard/elgg"
    "/data/BingPUBG"
    "/data/BingHPJY"
    "/data/jz"
    "/data/jz.sh"
    "/data/system/liboxmem.so"
    "/system/lib/hid/gamepad_driver.so"
    "/data/.gamepad_driver_installed"
    "/data/system/liborangeinit.so"
    "/data/system/xydriver.ko"
    "/data/BingPUBG/guns.cfg"
    "/data/BingHPJY/pz.cfg"
    "/dev/Bing"
    "/data/单发枪配置.txt"
    "/data/A内核.ini"
    "/data/物资.txt"
    "/data/HPX" 
    "/data/HPY"
    "/data/system/HPX"
    "/data/system/HPY"
    "/storage/emulated/0/落叶配置"
    "/storage/emulated/0/BY物资"
    "/storage/emulated/0/落叶配置/落叶配置.txt"
    "/storage/emulated/0/BY物资/BY物资.txt"
    "/storage/emulated/elgg"
    "/storage/emulated/0/Download/WechatXposed"
    "/storage/emulated/legacy/Android/data/com.apocalua.run"
)

delete_specified_paths() {
    echo -e "\n=== 指定路径删除开始 ==="
    for path in "${DELETE_PATHS[@]}"; do
        [ -e "$path" ] || {
            echo -e "跳过不存在的路径: $path"
            continue
        }
        rm -rf -- "$path" 2>/dev/null
        echo -e "$(if [ -d "$path" ]; then echo -e "已删除目录"; else echo -e "已删除文件"; fi): $path"
    done
}

clean_empty_dirs
clean_small_dirsm
delete_specified_paths

echo -e "✅所有操作已完成！"
sleep 3
clear
echo -e "1) 过牛头32 Found Root/Hook
2) 返回"
;;

"返回")
clear
echo -e "\033[1;32m主菜单\033[0m"
echo -e "1) Luna相关
2) 牛头相关
3) 春秋相关
4) Hunter相关
5) 设备属性恢复
6) 游戏相关
7) 其他功能
8) 退出"
break
;;

*) 
echo -e "\033[33m无效的选项\033[0m";;
esac
done

;;
"春秋相关")
clear
echo -e "\033[33m提示：\033[0m"
echo -e "\033[1;33m春秋相关\033[0m"
PS3='请选择一个操作: '
options=(
    "过Abnormal Environment"
    "过Suspicious suroundings"
    "过Txxx Axxx" 
    "过ct及不合法哈希值"
    "过刷机痕迹"
    "返回"
)
select opt in "${options[@]}"
do
case $opt in
"过Abnormal Environment")
clear

# 定义 resetprop 路径列表
RESETPROP_PATHS=(
    "/system/bin/resetprop"
    "/system_ext/bin/resetprop"
    "/product/bin/resetprop"
    "/data/adb/ksu/bin/resetprop"
    "/data/adb/ap/bin/resetprop"
)

# 初始化 resetprop 路径变量
RESETPROP_BIN=""

# 查找 resetprop
for path in "${RESETPROP_PATHS[@]}"; do
    if [ -f "$path" ] && [ -x "$path" ]; then
        RESETPROP_BIN="$path"
        case "$path" in
            "/system/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别德尔塔/金丝雀"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            "/system_ext/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别阿尔法(旧版)"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            "/product/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别Magisk/阿尔法(新版)"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            "/data/adb/ksu/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别KernelSU/Wild KSU/SukiSU Ultra"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            "/data/adb/ap/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别APatch/FolkPatch"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            *)
                # 理论上不会进入这里
                echo -e "🚫 暂未适配你的设备"
                echo -e "请网盘下载查找sh并执行，然后截屏发给我。"
                echo -e "酷安SukiSU土豆"
                exit 1
                ;;
        esac
        break
    fi
done

PROP_NAME="persist.hyperceiler.log.level"

# 检查属性是否存在
PROP_VALUE=$(getprop "$PROP_NAME")

if [ -n "$PROP_VALUE" ]; then
    echo -e "发现西米露模块残留"
    # 检查是否找到 resetprop
    if [ -z "$RESETPROP_BIN" ]; then
        echo -e "\033[31m❌ 错误：未找到可执行的resetprop，您可能无法清理西米露模块残留！\033[0m"
        echo -e "此项暂不支持skroot"
        sleep 3
    fi
    $RESETPROP_BIN "$PROP_NAME" ""
    # 验证
    NEW_VALUE=$(getprop "$PROP_NAME")
    if [ -z "$NEW_VALUE" ]; then
        echo -e "西米露 残留已清除"
    else
        echo -e "西米露残留清理失败，当前值: $NEW_VALUE"
    fi
else
    echo -e "西米露 残留已清除"
fi

sleep 0.5
rm -rf /storage/emulated/0/Android/data/me.garfieldhan.holmes
echo -e "Holmes 文件已清除"
sleep 0.5
rm -rf /storage/emulated/0/Android/data/com.zhenxi.hunter
echo -e "Hunter 文件已清除"
sleep 0.5
rm -rf /storage/emulated/0/Android/data/icu.nullptr.nativetest
echo -e "Native Test 文件已清除"
sleep 0.5
rm -rf /storage/emulated/0/Android/data/com.byyoung.setting
rm -rf /data/property/
rm -rf /storage/emulated/0/Android/media/org.telegram.messenger.web
echo -e "爱玩机工具箱 文件已清除"
sleep 0.5
rm -rf /storage/emulated/0/Android/data/bin.mt.plus
rm -rf /storage/emulated/0/MT2
rm -rf /storage/emulated/0/Android/data/bin.mt.plus.canary
echo -e "MT管理器 杂质已清理"
sleep 0.5
sleep 1
echo -e "准备清理异常文件…"
sleep 2
clear

# 颜色定义
RED='\033[32m'
NC='\033[0m' # No Color

# 清理列表
target_paths=(
    "/storage/emulated/0/Android/data/com.omarea.vtools"
    "/storage/emulated/0/Android/data/moe.shizuku.privileged.api"
    "/storage/emulated/0/Android/obb/io.github.vvb2060.mahoshojo"
    "/storage/emulated/0/Android/data/io.github.vvb2060.mahoshojo"
    "/storage/emulated/0/Android/media/io.github.vvb2060.mahoshojo"
    "/storage/emulated/0/Android/obb/icu.nullptr.applistdetector"
    "/storage/emulated/0/Android/data/icu.nullptr.applistdetector"
    "/storage/emulated/0/Android/media/icu.nullptr.applistdetector"
    "/storage/emulated/0/Android/obb/com.byxiaorun.detector"
    "/storage/emulated/0/Android/data/com.byxiaorun.detector"
    "/storage/emulated/0/Android/media/com.byxiaorun.detector"
    "/storage/emulated/0/Android/obb/io.github.huskydg.memorydetector"
    "/storage/emulated/0/Android/data/io.github.huskydg.memorydetector"
    "/storage/emulated/0/Android/media/io.github.huskydg.memorydetector"
    "/storage/emulated/0/Android/obb/com.OrangeEnvironment.Detector"
    "/storage/emulated/0/Android/data/com.OrangeEnvironment.Detector"
    "/storage/emulated/0/Android/media/com.OrangeEnvironment.Detector"
    "/storage/emulated/0/Android/obb/io.github.vvb2060.mahoshojo"
    "/storage/emulated/0/Android/data/io.github.vvb2060.mahoshojo"
    "/storage/emulated/0/Android/media/io.github.vvb2060.mahoshojo"
    "/storage/emulated/0/Android/obb/com.Longze.detector.pro2"
    "/storage/emulated/0/Android/data/com.Longze.detector.pro2"
    "/storage/emulated/0/Android/media/com.Longze.detector.pro2"
    "/storage/emulated/0/Android/obb/rikka.safetynetchecker"
    "/storage/emulated/0/Android/data/rikka.safetynetchecker"
    "/storage/emulated/0/Android/media/rikka.safetynetchecker"
    "/storage/emulated/0/Android/obb/io.github.vvb2060.keyattestation"
    "/storage/emulated/0/Android/data/io.github.vvb2060.keyattestation"
    "/storage/emulated/0/Android/media/io.github.vvb2060.keyattestation"
    "/storage/emulated/0/Download/WechatXposed"
    "/storage/emulated/0/WechatXposed"
    "/data/user/0/com.juom"
    "/storage/emulated/0/Android/data/org.telegram.messenger.web"
    "/data/system/graphicsstats"
    "/data/system/package_cache"
    "/data/dev/pts/*"
    "/storage/emulated/0/HMA_Config.json"
    "/storage/emulated/0/最新版隐藏配置.json"
    "/storage/emulated/0/Android/data/com.coolapk.market"
    "/storage/emulated/0/Android/data/com.estrongs.android.pop"
    "/storage/emulated/0/Android/obb/com.android.nativetest"
    "/storage/emulated/0/Android/data/com.lingqing.detector"
    "/storage/emulated/0/Android/data/aidepro.top"
    "/storage/emulated/0/Android/data/com.android.nativetest"
    "/storage/emulated/0/Android/data/bin.mt.plus"
    "/storage/emulated/0/Android/data/bin.mt.plus.canary"
    "/storage/emulated/0/Android/data/com.byyoung.setting"
    "/storage.emulated/0/Android/data/me.garfieldhan.holmes"
    "/storage/emulated/0/Android/data/icu.nullptr.nativetest"
    "/storage/emulated/0/Android/obb/icu.nullptr.nativetest"
    "/storage/emulated/0/Android/media/icu.nullptr.nativetest"
    "/storage/emulated/0/Android/data/com.omarea.vtools/*"
    "/storage/emulated/0/Android/data/com.zhenxi.hunter/*"
    "/storage/emulated/0/MT2/*"
    "/storage/emulated/0/Android/data/com.junge.algorithmAidePro/*"
    "/data/swap_config.conf"
    "/storage/emulated/0/rlgg/*"
    "/storage/emulated/legacy"
    "/data/system/junge"
    "/storage/emulated/0/Android/data/chunqiu.safe"
    "/storage/emulated/0/Android/data/com.junge.algorithmAidePro"
    "/storage/emulated/0/Android/data/org.telegram.messenger.web/*"
    "/storage/emulated/0/Android/naki"
    "/data/swap_config.conf"
    "/data/system/Freezer"
    "/dev/memcg/scene_idle"
    "/dev/memcg/scene_active"
    "/dev/scene"
    "/dev/cpuset/scene-daemon"
    "/data/system/NoActive"
    "/data/system/graphicsstats"
    "/data/system/package_cache"
    "/storage/emulated/0/Android/data/com.omarea.vtools"
    "/storage/emulated/0/Android/data/moe.shizuku.privileged.api"
    "/storage/emulated/0/Android/obb/io.github.vvb2060.mahoshojo"
    "/storage/emulated/0/Android/data/io.github.vvb2060.mahoshojo"
    "/storage/emulated/0/Android/media/io.github.vvb2060.mahoshojo"
    "/storage/emulated/0/Android/obb/icu.nullptr.applistdetector"
    "/storage.emulated/0/Android/data/icu.nullptr.applistdetector"
    "/storage/emulated/0/Android/media/icu.nullptr.applistdetector"
    "/storage.emulated/0/Android/obb/com.byxiaorun.detector"
    "/storage/emulated/0/Android/data/com.byxiaorun.detector"
    "/storage.emulated/0/Android/media/com.byxiaorun.detector"
    "/storage.emulated/0/Android/obb/io.github.huskydg.memorydetector"
    "/storage/emulated/0/Android/data/io.github.huskydg.memorydetector"
    "/storage/emulated/0/Android/media/io.github.huskydg.memorydetector"
    "/storage.emulated/0/Android/obb/com.OrangeEnvironment.Detector"
    "/storage/emulated/0/Android/data/com.OrangeEnvironment.Detector"
    "/storage.emulated/0/Android/media/com.OrangeEnvironment.Detector"
    "/storage.emulated/0/Android/obb/io.github.vvb2060.mahoshojo"
    "/storage/emulated/0/Android/data/io.github.vvb2060.mahoshojo"
    "/storage/emulated/0/Android/media/io.github.vvb2060.mahoshojo"
    "/storage.emulated/0/Android/obb/com.Longze.detector.pro2"
    "/storage/emulated/0/Android/data/com.Longze.detector.pro2"
    "/storage/emulated/0/Android/media/com.Longze.detector.pro2"
    "/storage.emulated/0/Android/obb/rikka.safetynetchecker"
    "/storage/emulated/0/Android/data/rikka.safetynetchecker"
    "/storage/emulated/0/Android/media/rikka.safetynetchecker"
    "/storage.emulated/0/Android/obb/io.github.vvb2060.keyattestation"
    "/storage/emulated/0/Android/data/io.github.vvb2060.keyattestation"
    "/storage/emulated/0/Android/media/io.github.vvb2060.keyattestation"
    "/storage/emulated/0/Download/WechatXposed"
    "/storage/emulated/0/WechatXposed"
    "/data/local/tmp/*"
    "/data/user/0/com.juom"
    "/storage/emulated/0/Android/data/org.telegram.messenger.web"
    "/storage/emulated/0/Android/data/me.garfieldhan.holmes"
    "/storage/emulated/0/Android/data/com.zhenxi.hunter"
    "/storage/emulated/0/Android/data/icu.nullptr.nativetest"
    "/storage/emulated/0/Android/data/com.byyoung.setting"
    "/storage/emulated/0/Android/media/org.telegram.messenger.web"
    "/storage/emulated/0/Android/data/bin.mt.plus"
    "/storage/emulated/0/Android/data/bin.mt.plus.canary"
    "/data/local/stryker"
    "/data/system/AppRetention"
    "/data/local/MIO"
    "/data/DNA"
    "/data/local/luckys"
    "/data/gpu_freq_table.conf"
    "/storage/emulated/0/Download/advanced"
    "/storage/emulated/0/Documents/advanced"
    "/data/system/NoActive"
    "/data/system/Freezer"
    "/storage/emulated/0/Android/naki"
    "/data/swap_config.conf"
    "/dev/cpuset/AppOpt"
    "/storage/emulated/0/Android/Clash/|Clash for Magisk"
    "/storage/emulated/0/Android/Yume-Yunyun"
    "/data/encore/custom_default_cpu_gov"
    "/data/encore/default_cpu_gov"
    "/storage/emulated/legacy"
    "/storage/emulated/elgg/*"
    "/data/system/junge"
)

# 初始化计数器
total_count=${#target_paths[@]}
cleaned_count=0
not_found_count=0
failed_count=0

# 进度显示函数
show_progress() {
    current=$((cleaned_count + not_found_count + failed_count))
    progress=$((100 * current / total_count))
    bars=$((progress / 4))
    spaces=$((25 - bars))
    
    # 构建进度条字符串
    bar_str=""
    i=0
    while [ $i -lt $bars ]; do
        bar_str="${bar_str}■"
        i=$((i + 1))
    done
    
    # 构建空格字符串
    space_str=""
    i=0
    while [ $i -lt $spaces ]; do
        space_str="${space_str} "
        i=$((i + 1))
    done
    
    printf "\r${RED}[${bar_str}${space_str}] ${progress}%%${NC}"
}



# 清理函数
clean_path() {
    local path=$1
    
    if [[ -f "$path" ]]; then
        if rm -f "$path" 2>/dev/null; then
            return 0
        else
            return 2
        fi
    elif [[ -d "$path" ]]; then
        if rm -rf "$path" 2>/dev/null; then
            return 0
        else
            return 2
        fi
    else
        return 1
    fi
}

# 主清理逻辑
for target_path in "${target_paths[@]}"; do
    # 清屏并显示当前处理项
    clear
    echo -e "正在处理中..."
    
    # 执行清理
    clean_path "$target_path"
    
    # 更新计数器
    case $? in
        0) ((cleaned_count++)) ;;
        1) ((not_found_count++)) ;;
        2) ((failed_count++)) ;;
    esac
    
    # 显示进度
    show_progress
done

# 显示最终结果
echo -e "\n"
echo -e "------------------------------------------------"
echo -e "✅清理完成！"
echo -e "已清理: ${cleaned_count} 个路径"
echo -e "清理失败: ${failed_count} 个路径"

sleep 3
clear
echo -e "1) 过Abnormal Environment
2) 过Suspicious suroundings
3) 过Txxx Axxx
4) 过ct及不合法哈希值
5) 过刷机痕迹
6) 返回"
;;

"过Suspicious suroundings")
clear
PS3='请选择一个操作: '
options=("Suspicious suroundings(a)" "Suspicious suroundings(b)" "Suspicious suroundings(c)" "返回")
select opt in "${options[@]}"
do
case $opt in
"Suspicious suroundings(a)")
clear
PS3='请选择一个操作: '
options=("新方案(理论更快)        " "旧方案(标准方法)" "返回")
select opt in "${options[@]}"
do
case $opt in
"新方案(理论更快)        ")
clear
# 定义目录
DIR_NAME="/data/local/tmp"
TARGET_DIR="/data/local"
NEW_DIR="${TARGET_DIR}/low_inode_dir"
TMP_DIR="${TARGET_DIR}/tmp"

# =============================
# 前置检查
# =============================
# 检查 /data/local/tmp 目录是否存在
if [ -d "$DIR_NAME" ]; then
    # 获取 /data/local/tmp 目录的 inode 号
    INODE=$(stat -c '%i' "$DIR_NAME" 2>/dev/null)
    
    # 检查 stat 命令是否成功获取 inode 号
    if [ -n "$INODE" ]; then
        echo -e "当前tmp的inode号为: $INODE"
        
        # 判断 inode 号是否小于或等于 10000
        if [ "$INODE" -le 10000 ]; then
            echo -e "无需执行，强制停止。"
            exit 0
        else
            echo -e "达到执行标准，开始执行。"
            sleep 2
        fi
    else
        echo -e "警告：无法获取inode 号。"
        exit 0
    fi
else
    echo -e "tmp不存在，请先执行(b)"
    exit 0
fi

echo -e "\033[33m过程可能花上几十秒\033[0m"
echo -e "\033[33m请耐心等待...\033[0m"

# 创建新目录的函数
create_low_inode_dir() {
    # 创建新目录
    mkdir -p "${NEW_DIR}"
    
    # 获取目录的inode号
    inode=$(ls -id "${NEW_DIR}" | awk '{print $1}')
    
    # 检查inode是否大于10000
    if [ "$inode" -gt 10000 ]; then
        # 删除目录并返回1表示需要重试
        rm -rf "${NEW_DIR}"
        return 1
    else
        # 返回0表示成功
        return 0
    fi
}

# 循环直到找到inode低于10000的目录
while true; do
    if create_low_inode_dir; then
        break
    fi
done

# 删除旧的tmp目录（如果存在）
rm -rf "${TMP_DIR}"

# 将新目录重命名为tmp
mv "${NEW_DIR}" "${TMP_DIR}"

# 设置权限和所有者
chmod 771 "${TMP_DIR}"
chown shell:shell "${TMP_DIR}"

# 查看当前inode
FINAL_INODE=$(stat -c '%i' "$DIR_NAME" 2>/dev/null)
if [ -n "$FINAL_INODE" ]; then
    echo -e "操作完成：当前tmp目录inode号为 \033[32m$FINAL_INODE\033[0m"
else
    echo -e "\033[31m错误：无法获取最终tmp目录的inode号\033[0m"
fi

sleep 3

while true; do
    echo -n "是否立即重启以完全恢复？[y/n] "
    read choice
    case "$choice" in
        y|Y)
            echo -e "${YELLOW}正在重启设备...${NC}"
            reboot
            exit 0
            ;;
        n|N|"")
            echo -e "${GREEN}已取消重启${NC}"
            sleep 2
            clear
            break
            ;;
        *)
            echo -e "${RED}无效输入，请输入 y(重启) 或 n(不重启)${NC}"
            ;;
    esac
done

echo -e ""
echo -e "1) 新方案(理论更快)
2) 旧方案(标准方法)
3) 返回"
;;
"旧方案(标准方法)")
clear
echo -e "🛠️春秋开发者发布脚本
"
echo -e "⚠️春秋没有此词条不用执行
"
echo -e "⚠️此功能会占用大量时间
"
echo -e "⚠️误触强制退出即可
"
echo -e "⚠️脚本准备开始运行...
"
sleep 2
echo -e "已加载设备所有性能
"
sleep 8
echo -e "时间较长耐心等待..."
sleep 2
# 定义目录和前缀
DIR_NAME="/data/local/tmp"
TMP_PREFIX="/data/local/tmp_compete_"

# =============================
# 前置检查
# =============================
# 检查 /data/local/tmp 目录是否存在
if [ -d "$DIR_NAME" ]; then
    # 获取 /data/local/tmp 目录的 inode 号
    INODE=$(stat -c '%i' "$DIR_NAME" 2>/dev/null)
    
    # 检查 stat 命令是否成功获取 inode 号
    if [ -n "$INODE" ]; then
        echo -e "当前tmp的inode号为: $INODE"
        
        # 判断 inode 号是否小于或等于 10000
        if [ "$INODE" -le 10000 ]; then
            echo -e "无需执行，强制停止。"
            exit 0
        else
            echo -e "达到执行标准，开始执行。"
            sleep 2
        fi
    else
        echo -e "警告：无法获取inode 号。"
        exit 0
    fi
else
    echo -e "tmp不存在，请先执行(b)"
    exit 0
fi

# 反复创建和删除临时目录 /data/local/tmp_compete_{1..10}
for i in {1..10}; do
    (
        while :; do 
            rm -rf "${TMP_PREFIX}${i}" 2>/dev/null
            mkdir "${TMP_PREFIX}${i}" 2>/dev/null
        done
    ) &
done

# 调整当前脚本的进程优先级为最高
renice -n -20 -p $$

# 设置多线程环境变量
export OMP_NUM_THREADS=8

# 持续监控并反复删除和重建 /data/local/tmp 目录，直到 inode 号 <= 10000
while true; do
    [ -d "$DIR_NAME" ] && rm -rf "$DIR_NAME"
    mkdir "$DIR_NAME" || { echo -e "Failed to create $DIR_NAME"; exit 1; }
    INODE=$(stat -c '%i' "$DIR_NAME")
    echo -e "Current inode: $INODE"
    [ "$INODE" -le 10000 ] && { echo -e "Triggered: inode <= 10000！"; break; }
done

# 终止所有相关的后台进程
pkill -f "$(basename "$0")"

# 清理之前创建的临时目录 /data/local/tmp_compete_*
rm -rf "${TMP_PREFIX}*"
echo -e "✅已完成"
echo -e "重启后执行(c)"
while true; do
    echo -n "是否立即重启以恢复性能？[y/n] "
    read choice
    case "$choice" in
        y|Y)
            echo -e "${YELLOW}正在重启设备...${NC}"
            reboot
            exit 0
            ;;
        n|N|"")
            echo -e "${GREEN}已取消重启${NC}"
            sleep 2
            clear
            break
            ;;
        *)
            echo -e "${RED}无效输入，请输入 y(重启) 或 n(不重启)${NC}"
            ;;
    esac
done
echo -e "⚠️重启后再执行(c)"
echo -e ""
echo -e "1) 新方案(理论更快)
2) 旧方案(标准方法)
3) 返回"
;;

"返回")
clear
echo -e "1) Suspicious suroundings(a)
2) Suspicious suroundings(b)
3) Suspicious suroundings(c)
4) 返回"
break
;;

*) echo -e "\033[33m无效的选项\033[0m";;
esac
done
;;

"Suspicious suroundings(b)")
clear
echo -e "\033[33m提示:\033[0m"
echo -e "\033[33m●仅用于先天性(未root就有的)！\033[0m"
echo -e "\033[33m●后天造成需执行(a)！\033[0m"
echo -e "\033[33m●如果(a)提示无需执行，重启即可解决(b)问题。\033[0m"
# 确认操作
echo -e "是否继续？(y/n)"
read -r confirm

if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then
    echo -e "[⚠️操作已取消]"
    exit 0
fi
clear
# 定义目录
DIR_NAME="/data/local/tmp"
TARGET_DIR="/data/local"
NEW_DIR="${TARGET_DIR}/low_inode_dir"
TMP_DIR="${TARGET_DIR}/tmp"

echo -e "\033[33m过程可能花上几十秒\033[0m"
echo -e "\033[33m请耐心等待...\033[0m"

# 创建新目录的函数
create_low_inode_dir() {
    # 创建新目录
    mkdir -p "${NEW_DIR}"
    
    # 获取目录的inode号
    inode=$(ls -id "${NEW_DIR}" | awk '{print $1}')
    
    # 检查inode是否大于10000
    if [ "$inode" -gt 10000 ]; then
        # 删除目录并返回1表示需要重试
        rm -rf "${NEW_DIR}"
        return 1
    else
        # 返回0表示成功
        return 0
    fi
}

# 循环直到找到inode低于10000的目录
while true; do
    if create_low_inode_dir; then
        break
    fi
done

# 删除旧的tmp目录（如果存在）
rm -rf "${TMP_DIR}"

# 将新目录重命名为tmp
mv "${NEW_DIR}" "${TMP_DIR}"

# 设置权限和所有者
chmod 771 "${TMP_DIR}"
chown shell:shell "${TMP_DIR}"

# 查看当前inode
FINAL_INODE=$(stat -c '%i' "$DIR_NAME" 2>/dev/null)
if [ -n "$FINAL_INODE" ]; then
    echo -e "操作完成：当前tmp目录inode号为 \033[32m$FINAL_INODE\033[0m"
else
    echo -e "\033[31m错误：无法获取最终tmp目录的inode号\033[0m"
fi

sleep 3

while true; do
    echo -n "是否立即重启以完全恢复？[y/n] "
    read choice
    case "$choice" in
        y|Y)
            echo -e "${YELLOW}正在重启设备...${NC}"
            reboot
            exit 0
            ;;
        n|N|"")
            echo -e "${GREEN}已取消重启${NC}"
            sleep 2
            clear
            break
            ;;
        *)
            echo -e "${RED}无效输入，请输入 y(重启) 或 n(不重启)${NC}"
            ;;
    esac
done

sleep 2

echo -e ""
echo -e "1) Suspicious suroundings(a)
2) Suspicious suroundings(b)
3) Suspicious suroundings(c)
4) 返回"
;;
"Suspicious suroundings(c)")
clear
echo -e "\033[33m提示:\033[0m"
echo -e "\033[33m●仅用于先天性和执行(a)旧方案后清理残留！\033[0m"
echo -e "\033[33m●后天造成需执行(a)\033[0m"
sleep 4
mkdir "/data/local/tmp"
mkdir "/data/local/traces"
mkdir "/data/local/tests"
mkdir "/data/local/tests/vendor"
mkdir "/data/local/tests/unrestricted"
mkdir "/data/local/tests/unrestricted"
echo -e "正在执行..."
rm -rf /data/local/tmp_compete_1
rm -rf /data/local/tmp_compete_2
rm -rf /data/local/tmp_compete_3
rm -rf /data/local/tmp_compete_4
rm -rf /data/local/tmp_compete_5
rm -rf /data/local/tmp_compete_6
rm -rf /data/local/tmp_compete_7
rm -rf /data/local/tmp_compete_8
rm -rf /data/local/tmp_compete_9
rm -rf /data/local/tmp_compete_10
sleep 2
# 定义目标目录和文件
TARGET_DIR="/data/local/tmp/pkg_extract"
TARGET_FILE="$TARGET_DIR/all_packages.txt"

# 创建目录（如果不存在）
mkdir -p "$TARGET_DIR"

# 检查目录是否创建成功
if [ ! -d "$TARGET_DIR" ]; then
    echo -e "Error: 无法创建目录 $TARGET_DIR"
    exit 1
fi

# 创建空文件 all_packages.txt
touch "$TARGET_FILE"

# 检查文件是否创建成功
if [ ! -f "$TARGET_FILE" ]; then
    echo -e "Error: 无法创建文件 $TARGET_FILE"
    exit 1
fi

echo -e "已创建文件："
echo -e "目录: $TARGET_DIR"
echo -e "文件: $TARGET_FILE"
echo -e "✅Suspicious suroundings(c)完成"
echo -e "\033[41m若不成功请执行(a)\033[0m"
sleep 3
echo -e ""
echo -e "1) Suspicious suroundings(a)
2) Suspicious suroundings(b)
3) Suspicious suroundings(c)
4) 返回"
;;
"返回")
clear
echo -e "1) 过Abnormal Environment
2) 过Suspicious suroundings
3) 过Txxx Axxx
4) 过ct及不合法哈希值
5) 过刷机痕迹
6) 返回"
break
;;
*) echo -e "\033[33m无效的选项\033[0m";;
esac
done
;;
"过Txxx Axxx")
clear
PS3='请选择一个操作: '
options=("Tarmper Attribute" "Tamered Attestation(b)*" "返回")
select opt in "${options[@]}"
do
case $opt in
"Tarmper Attribute")
clear
pm clear "chunqiu.safe"
pm clear "chunqiu.safe.detector"
echo -e "
✅已清除春秋检测数据，排除报错原因
"
# 提示输入
echo -e "\033[1;32m现在打开检测，Tarmper Attribute问题解决了吗？\033[0m"
printf "
问题解决了😊(输入y)
没解决问题🙁(输入n)
输入别的退出
请输入: "
read user_input

# 转为小写（使用兼容的语法）
user_input=$(echo -e "$user_input" | tr '[:upper:]' '[:lower:]')

if [ "$user_input" = "y" ]; then
    echo -e "
你输入了y，已解决问题✅"
    exit 0
elif [ "$user_input" = "n" ]; then
    echo -e "
你输入了n，即将执行"
    sleep 1
    echo -e "🔧 正在执行操作..."
    # 在这里添加你的操作代码
else
    echo -e "输入无效，退出脚本。"
    exit 1
fi

# 定义 resetprop 路径列表
RESETPROP_PATHS=(
    "/system/bin/resetprop"
    "/system_ext/bin/resetprop"
    "/product/bin/resetprop"
    "/data/adb/ksu/bin/resetprop"
    "/data/adb/ap/bin/resetprop"
)

# 初始化 resetprop 路径变量
RESETPROP_BIN=""

# 查找 resetprop
for path in "${RESETPROP_PATHS[@]}"; do
    if [ -f "$path" ] && [ -x "$path" ]; then
        RESETPROP_BIN="$path"
        case "$path" in
            "/system/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别德尔塔/金丝雀"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            "/system_ext/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别阿尔法(旧版)"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            "/product/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别Magisk/阿尔法(新版)"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            "/data/adb/ksu/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别KernelSU/Wild KSU/SukiSU Ultra"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            "/data/adb/ap/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别APatch/FolkPatch"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            *)
                # 理论上不会进入这里
                echo -e "🚫 暂未适配你的设备"
                echo -e "请网盘下载查找sh并执行，然后截屏发给我。"
                echo -e "酷安SukiSU土豆"
                exit 1
                ;;
        esac
        break
    fi
done

# 检查是否找到 resetprop
if [ -z "$RESETPROP_BIN" ]; then
    echo -e "❌ 错误：未找到可执行的resetprop"
    echo -e "🚫 暂未适配你的设备。"
    echo -e "请网盘下载查找sh并执行，然后截屏发给我"
    echo -e "酷安SukiSU土豆"
    exit 1
fi

# 临时删除数据隔离prop属性的命令
$RESETPROP_BIN --delete persist.sys.vold_app_data_isolation_enabled
$RESETPROP_BIN --delete persist.zygote.app_data_isolation

sleep 2
echo -e "执行完毕"
echo -e "✅已临时关闭模块prop属性命令"
sleep 2
echo -e ""
echo -e "1) Tarmper Attribute
2) Tamered Attestation(b)*
3) 返回"
;;

"Tamered Attestation(b)*")
clear
echo -e "提示："
echo -e "📝编辑设备指纹。"
echo -e "\033[43;30m不包含Tampered Attestation Key\033[0m"
echo -e ""
PS3='请选择一个操作: '
options=("启用" "恢复" "返回")
select opt in "${options[@]}"
do
case $opt in
"启用")
clear
# 定义 resetprop 路径列表
RESETPROP_PATHS=(
    "/system/bin/resetprop"
    "/system_ext/bin/resetprop"
    "/product/bin/resetprop"
    "/data/adb/ksu/bin/resetprop"
    "/data/adb/ap/bin/resetprop"
)

# 初始化 resetprop 路径变量
RESETPROP_BIN=""

# 查找 resetprop
for path in "${RESETPROP_PATHS[@]}"; do
    if [ -f "$path" ] && [ -x "$path" ]; then
        RESETPROP_BIN="$path"
        case "$path" in
            "/system/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别德尔塔/金丝雀"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            "/system_ext/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别阿尔法(旧版)"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            "/product/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别Magisk/阿尔法(新版)"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            "/data/adb/ksu/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别KernelSU/Wild KSU/SukiSU Ultra"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            "/data/adb/ap/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别APatch/FolkPatch"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            *)
                # 理论上不会进入这里
                echo -e "🚫 暂未适配你的设备"
                echo -e "请网盘下载查找sh并执行，然后截屏发给我。"
                echo -e "酷安SukiSU土豆"
                exit 1
                ;;
        esac
        break
    fi
done

# 检查是否找到 resetprop
if [ -z "$RESETPROP_BIN" ]; then
    echo -e "❌ 错误：未找到可执行的resetprop"
    echo -e "🚫 暂未适配你的设备。"
    echo -e "请网盘下载查找sh并执行，然后截屏发给我"
    echo -e "酷安SukiSU土豆"
    exit 1
fi

# 函数：判断希腊字母
is_greek_char() {
    local char="$1"
    case "$char" in
        [Α-Ωα-ω]) return 0;;
        *) return 1;;
    esac
}

# 函数：统计字符串中的希腊字母个数
count_greek_chars() {
    local input="$1"
    local count=0
    local i=0
    local len=${#input}
    
    while [ $i -lt $len ]; do
        char="${input:$i:1}"
        if is_greek_char "$char"; then
            count=$((count + 1))
        fi
        i=$((i + 1))
    done
    
    echo -e "$count"
}

# 函数：映射规则，将单个小写拉丁字母转换为希腊字母
map_single_latin_to_greek() {
    local char="$1"
    case "$char" in
        # 仅处理小写拉丁字母 → 希腊小写字母
        a) echo -e "α";;
        b) echo -e "β";;
        c) echo -e "κ";;
        d) echo -e "δ";;
        e) echo -e "ε";;
        f) echo -e "φ";;
        g) echo -e "γ";;
        h) echo -e "η";;
        i) echo -e "ι";;
        j) echo -e "ι";;
        k) echo -e "κ";;
        l) echo -e "λ";;
        m) echo -e "μ";;
        n) echo -e "ν";;
        o) echo -e "ο";;
        p) echo -e "π";;
        q) echo -e "κ";;
        r) echo -e "ρ";;
        s) echo -e "σ";;
        t) echo -e "τ";;
        u) echo -e "υ";;
        v) echo -e "υ";;
        w) echo -e "ω";;
        x) echo -e "χ";;
        y) echo -e "υ";;
        z) echo -e "ζ";;

        # 其他字符（包括大写字母）保持不变
        *) echo -e "$char";;
    esac
}

# 函数：替换成希腊字母（仅替换小写字母）
replace_latin_with_greek_mapping() {
    local input="$1"
    local count="$2"
    local len=${#input}
    chars=()
    is_latin=()
    latin_positions=()
    latin_chars=()

    # 扫描字符串，仅识别小写字母
    i=0
    while [ $i -lt $len ]; do
        char="${input:$i:1}"
        chars+=("$char")
        # 仅识别小写字母，且排除希腊字母
        if echo -e "$char" | grep -q '[a-z]' && ! is_greek_char "$char"; then
            latin_positions+=("$i")
            latin_chars+=("$char")
        fi
        i=$((i + 1))
    done

    total_latin=${#latin_positions[@]}

    if [ "$total_latin" -eq 0 ]; then
        echo -e "$input"
        return
    fi

    # 确保不超过可用字母数量
    if [ "$count" -gt "$total_latin" ]; then
        count="$total_latin"
    fi

    # 随机选择指定数量的字母
    selected_indices=()
    i=0
    while [ $i -lt $count ]; do
        idx=$(( RANDOM % total_latin ))
        selected_indices+=("$idx")
        i=$((i + 1))
    done

    # 去重复
    unique_indices=($(echo -e "${selected_indices[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' '))

    # 构建新字符数组
    new_chars=("${chars[@]}")

    for idx_in_latin in "${unique_indices[@]}"; do
        pos=${latin_positions[$idx_in_latin]}
        old_char=${latin_chars[$idx_in_latin]}

        # 按映射规则替换这个小写字母
        new_char=$(map_single_latin_to_greek "$old_char")
        new_chars[$pos]="$new_char"
    done

    # 拼接成最终字符串
    echo -e "${new_chars[*]}" | tr -d ' '
}

# =============================
# 主程序
# =============================

echo -e "\033[33m################################################\033[0m"
echo -e "\033[33m●每个设备的指纹都不同，所以可以看情况修改数量。\033[0m"
echo -e "\033[33m●修改的数量能过检测就行，不要改太多！\033[0m"
echo -e "\033[33m●当前希腊字母个数若大于7，Hunter会变色哟。\033[0m"
echo -e "\033[33m################################################\033[0m"

# 获取当前指纹
original_fp=$(getprop ro.build.fingerprint)

if [ -z "$original_fp" ]; then
    echo -e "[❌错误] 无法获取属性值。"
    echo -e "未适配您的设备，请网盘下载查找sh并执行，然后发给我。"
    exit 1
fi

# 统计当前指纹中的希腊字母个数
current_greek_count=$(count_greek_chars "$original_fp")
echo -e "[当前指纹中的希腊字母个数]: $current_greek_count"

# 计算推荐修改数量
recommend_count=$((7 - current_greek_count))

# 确保推荐值不小于0
if [ "$recommend_count" -lt 0 ]; then
    recommend_count=0
fi

fingerprint() {
clear
# 生成新的指纹
greek_fp=$(replace_latin_with_greek_mapping "$original_fp" "$replace_count")
echo -e "------------------------------------------------"
echo -e "[原指纹]: $original_fp"
echo -e "------------------------------------------------"
echo -e "[修改成]: $greek_fp"
echo -e "------------------------------------------------"

# 确认操作
echo -e ""
echo -e "确认要修改指纹吗？(y/n)"
read -r confirm

if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then
    echo -e "[⚠️操作已取消]"
    exit 0
fi

# 使用 resetprop 设置新指纹
if [ -f "$RESETPROP_BIN" ] && [ -x "$RESETPROP_BIN" ]; then
    echo -e "[正在编辑新的指纹...]"
    "$RESETPROP_BIN" ro.build.fingerprint "$greek_fp"
    sleep 3
    # 验证
    new_fp=$(getprop ro.build.fingerprint)
    if [ "$new_fp" = "$greek_fp" ]; then
        clear
        echo -e "[✅成功] 指纹已修改"
        sleep 1
        echo -e ""
    else
        clear
        echo -e "[⚠️警告] resetprop 执行成功，但重新读取的指纹不匹配。当前值: $new_fp"
        echo -e "[🤔可能原因] 系统缓存、属性只读、或需要重启生效。"
        sleep 1
        echo -e ""
    fi
else
    clear
    echo -e "[❌错误] 找不到可用的 resetprop 可执行文件！"
    echo -e "如果没有你的类别，请网盘下载查找sh并执行，然后发给我。"
    exit 1
fi
}

# 获取用户输入
echo -e "请输入要替换的数量(推荐: $recommend_count, 输入0退出):"
read -r replace_count

# 检查用户输入
if [ -z "$replace_count" ]; then
    echo -e "[❌错误] 请输入有效的数字"
    exit 1
fi

# 先清理输入，再检查
replace_count=$(echo -e "$replace_count" | tr -d '[:space:]')

if ! echo -e "$replace_count" | grep -q '^[0-9][0-9]*$'; then
    echo -e "[❌错误] 请输入有效的数字"
    exit 1
fi

# 检查用户是否输入0
if [ "$replace_count" -eq 0 ]; then
    clear
else
    fingerprint
fi

echo -e "提示："
echo -e "📝编辑设备指纹。"
echo -e "\033[43;30m不包含Tampered Attestation Key\033[0m"
echo -e ""
echo -e "1) 启用
2) 恢复
3) 返回"
;;

"恢复")
clear

# 根据SETTING的值执行不同逻辑
if [ "$SETTING" = "扩展包环境" ]; then

clear
# 定义 resetprop 路径列表
RESETPROP_PATHS=(
    "/system/bin/resetprop"
    "/system_ext/bin/resetprop"
    "/product/bin/resetprop"
    "/data/adb/ksu/bin/resetprop"
    "/data/adb/ap/bin/resetprop"
)

# 初始化 resetprop 路径变量
RESETPROP_BIN=""

# 查找 resetprop
for path in "${RESETPROP_PATHS[@]}"; do
    if [ -f "$path" ] && [ -x "$path" ]; then
        RESETPROP_BIN="$path"
        case "$path" in
            "/system/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别德尔塔/金丝雀"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                ;;
            "/system_ext/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别阿尔法(旧版)"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                ;;
            "/product/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别Magisk/阿尔法(新版)"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                ;;
            "/data/adb/ksu/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别KernelSU/Wild KSU/SukiSU Ultra"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                ;;
            "/data/adb/ap/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别APatch/FolkPatch"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                ;;
            *)
                # 理论上不会进入这里
                echo -e "🚫 暂未适配你的设备"
                echo -e "请网盘下载查找sh并执行，然后截屏发给我。"
                echo -e "酷安SukiSU土豆"
                exit 1
                ;;
        esac
        break
    fi
done

# 函数：判断希腊字母
is_greek_char() {
    local char="$1"
    case "$char" in
        [α-ω]) return 0;;  # 仅小写希腊字母
        *) return 1;;
    esac
}

# 函数：映射规则，将小写希腊字母还原为小写拉丁字母
map_greek_to_latin() {
    local char="$1"
    case "$char" in
        # 仅处理小写希腊字母 → 小写拉丁字母
        "α") echo -e "a";;
        "β") echo -e "b";;
        "κ") echo -e "c";;
        "δ") echo -e "d";;
        "ε") echo -e "e";;
        "φ") echo -e "f";;
        "γ") echo -e "g";;
        "η") echo -e "h";;
        "ι") echo -e "i";;
        "λ") echo -e "l";;
        "μ") echo -e "m";;
        "ν") echo -e "n";;
        "ο") echo -e "o";;
        "π") echo -e "p";;
        "ρ") echo -e "r";;
        "σ") echo -e "s";;
        "τ") echo -e "t";;
        "υ") echo -e "u";;
        "ω") echo -e "w";;
        "χ") echo -e "x";;
        "ζ") echo -e "z";;

        *) echo -e "$char";; # 非小写希腊字母保持不变
    esac
}

# 函数：恢复指纹（仅将小写希腊字母还原为小写拉丁字母）
restore_fingerprint() {
    local current_fp="$1"
    local len=${#current_fp}
    local restored_fp=""
    
    i=0
    while [ $i -lt $len ]; do
        char="${current_fp:$i:1}"
        if is_greek_char "$char"; then
            # 仅处理小写希腊字母
            restored_char=$(map_greek_to_latin "$char")
            restored_fp="${restored_fp}${restored_char}"
        else
            # 大写希腊字母和其他字符保持不变
            restored_fp="${restored_fp}${char}"
        fi
        i=$((i+1))
    done
    
    echo -e "$restored_fp"
}

# =============================
# 主程序
# =============================
clear
echo -e "\033[33m################################################\033[0m"
echo -e "\033[33m●指纹恢复\033[0m"
echo -e "\033[33m●如果不是此脚本编辑的指纹，恢复指纹可能不完全！\033[0m"
echo -e "\033[33m●仅恢复小写希腊字母，大写希腊字母保持不变\033[0m"
echo -e "\033[33m################################################\033[0m"

# 获取当前指纹
current_fp=$(getprop ro.build.fingerprint)

if [ -z "$current_fp" ]; then
    echo -e "[❌错误] 无法获取属性值"
    exit 1
fi

echo -e "[当前指纹]: $current_fp"

# 恢复指纹
original_fp=$(restore_fingerprint "$current_fp")
echo -e "[恢复成为]: $original_fp"

# 检查当前指纹是否已经是原始指纹
if [ "$current_fp" = "$original_fp" ]; then
    echo -e "✅当前已是原始指纹，无需恢复"
    exit 0
fi

# 确认操作
echo -e "确认要恢复指纹吗？(y/n)"
read -r confirm

if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then
    echo -e "[⚠️操作已取消]"
    exit 0
fi

# 使用 resetprop 恢复指纹
if [ -f "$RESETPROP_BIN" ] && [ -x "$RESETPROP_BIN" ]; then
    echo -e "[正在恢复指纹...]"
    "$RESETPROP_BIN" ro.build.fingerprint "$original_fp"
    sleep 3
    
    # 验证
    new_fp=$(getprop ro.build.fingerprint)
    if [ "$new_fp" = "$original_fp" ]; then
        clear
        echo -e "[✅成功] 指纹已恢复"
        sleep 2
        echo -e ""
    else
        clear
        echo -e "[⚠️警告] resetprop 执行成功，但重新读取的指纹不匹配。当前值: $new_fp"
        echo -e "[🤔可能原因] 系统缓存、属性只读、或需要重启生效。"
        sleep 2
        echo -e ""
    fi
else
    clear
    echo -e "[❌错误] 找不到可用的 resetprop 可执行文件"
    exit 1
fi

elif [ "$SETTING" = "系统环境" ]; then
    echo -e "------------------------------------------------"
    echo -e "提示："
    echo -e "本功能需用到扩展包环境，否则无法正常使用！"
    echo -e "\033[32m当前：$SETTING\033[0m"
    echo -e "------------------------------------------------"

    while true; do
        echo -n "1.退出脚本切换
2.我不知道什么是扩展包环境
3.返回
请选择[1-3] ："
        read choice
        case "$choice" in
            1 )
                exit 0
                ;;
            2 )
                clear
                echo -e "请去网盘看切换扩展包环境教程。"
                exit 0
                ;;
            3 )
                break
                ;;
            *)
                echo -e "\033[33m无效输入，请输入1-3区间内的数字！\033[0m"
                ;;
        esac
    done
else
    echo -e "未知环境状态，退出脚本。"
    exit 1
fi

echo -e "提示："
echo -e "📝编辑设备指纹。"
echo -e "\033[43;30m不包含Tampered Attestation Key\033[0m"
echo -e ""
echo -e "1) 启用
2) 恢复
3) 返回"

;;

"返回")
clear
echo -e "1) Tarmper Attribute
2) Tamered Attestation(b)*
3) 返回"
break
;;

*)
echo -e "\033[33m无效的选项\033[0m"
;;

esac
done
;;

"返回")
clear
echo -e "1) 过Abnormal Environment
2) 过Suspicious suroundings
3) 过Txxx Axxx
4) 过ct及不合法哈希值
5) 过刷机痕迹
6) 返回"
break
;;

*)
echo -e "\033[33m无效的选项\033[0m"
;;

esac
done
;;

"过ct及不合法哈希值")
clear
echo -e "\033[42;30m已移植到属性恢复。\033[0m"
sleep 3
echo -e ""
echo -e "1) 过Abnormal Environment
2) 过Suspicious suroundings
3) 过Txxx Axxx
4) 过ct及不合法哈希值
5) 返回"
;;

"过刷机痕迹")
clear
# 定义 resetprop 路径列表
RESETPROP_PATHS=(
    "/system/bin/resetprop"
    "/system_ext/bin/resetprop"
    "/product/bin/resetprop"
    "/data/adb/ksu/bin/resetprop"
    "/data/adb/ap/bin/resetprop"
)

# 初始化 resetprop 路径变量
RESETPROP_BIN=""

# 查找 resetprop
for path in "${RESETPROP_PATHS[@]}"; do
    if [ -f "$path" ] && [ -x "$path" ]; then
        RESETPROP_BIN="$path"
        case "$path" in
            "/system/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别德尔塔/金丝雀"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            "/system_ext/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别阿尔法(旧版)"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            "/product/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别Magisk/阿尔法(新版)"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            "/data/adb/ksu/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别KernelSU/Wild KSU/SukiSU Ultra"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            "/data/adb/ap/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别APatch/FolkPatch"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            *)
                # 理论上不会进入这里
                echo -e "🚫 暂未适配你的设备"
                echo -e "请网盘下载查找sh并执行，然后截屏发给我。"
                echo -e "酷安SukiSU土豆"
                exit 1
                ;;
        esac
        break
    fi
done

# 检查是否找到 resetprop
if [ -z "$RESETPROP_BIN" ]; then
    echo -e "❌ 错误：未找到可执行的resetprop"
    echo -e "🚫 暂未适配你的设备。"
    echo -e "请网盘下载查找sh并执行，然后截屏发给我"
    echo -e "酷安SukiSU土豆"
    exit 1
fi

# 定义属性
PROP_NAME="persist.adb.nonblocking_ffs"

# 检查属性是否存在
PROP_VALUE=$(getprop "$PROP_NAME")

if [ -n "$PROP_VALUE" ]; then
    echo -e "发现刷机属性残留"
    $RESETPROP_BIN "$PROP_NAME" ""
    # 验证
    NEW_VALUE=$(getprop "$PROP_NAME")
    if [ -z "$NEW_VALUE" ]; then
        clear
        echo -e "✅刷机属性已清除"
    else
        clear
        echo -e "刷机属性清除失败，当前值: $NEW_VALUE"
    fi
else
    clear
    echo -e "✅刷机属性已清除"
fi

sleep 2
echo -e ""
echo -e "1) 过Abnormal Environment
2) 过Suspicious suroundings
3) 过Txxx Axxx
4) 过ct及不合法哈希值
5) 过刷机痕迹
6) 返回"
;;

"返回")
clear
echo -e "\033[1;32m主菜单\033[0m"
echo -e "1) Luna相关
2) 牛头相关
3) 春秋相关
4) Hunter相关
5) 设备属性恢复
6) 游戏相关
7) 其他功能
8) 退出"
break
;;

*)
echo -e "\033[33m无效的选项\033[0m"
;;

esac
done
;;

"Hunter相关")
clear
echo -e "\033[33m提示：\033[0m"
echo -e "\033[1;33mHunter相关\033[0m"
PS3='请选择一个操作: '
options=(
    "过Hunter api调用"
    "返回"
)
select opt in "${options[@]}"
do
case $opt in
"过Hunter api调用")
clear
echo -e "操作中"
settings delete global hidden_api_policy
settings delete global hidden_api_policy_p_apps
settings delete global hidden_api_policy_pre_p_apps
settings delete global hidden_api_blacklist_exemptions
sleep 2
clear
echo -e "✅已完成！"
echo -e ""
echo -e "1) 过Hunter api调用
2) 返回"
;;

"返回")
clear
echo -e "\033[1;32m主菜单\033[0m"
echo -e "1) Luna相关
2) 牛头相关
3) 春秋相关
4) Hunter相关
5) 设备属性恢复
6) 游戏相关
7) 其他功能
8) 退出"
break
;;

*)
echo -e "\033[33m无效的选项\033[0m"
;;

esac
done
;;

"设备属性恢复")
clear
echo -e "提示："
echo -e "🔃恢复常见检测项属性。
⚠️ 但如果刷入某种命令模块，重启后可能会失效。"
echo -e ""

PS3='请选择一个操作: '
options=(
"启用                        "
"返回")
select opt in "${options[@]}"
do
case $opt in
"启用                        ")
clear
# 定义 resetprop 路径列表
RESETPROP_PATHS=(
    "/system/bin/resetprop"
    "/system_ext/bin/resetprop"
    "/product/bin/resetprop"
    "/data/adb/ksu/bin/resetprop"
    "/data/adb/ap/bin/resetprop"
)

# 初始化 resetprop 路径变量
RESETPROP_BIN=""

# 查找 resetprop
for path in "${RESETPROP_PATHS[@]}"; do
    if [ -f "$path" ] && [ -x "$path" ]; then
        RESETPROP_BIN="$path"
        case "$path" in
            "/system/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别德尔塔/金丝雀"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            "/system_ext/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别阿尔法(旧版)"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            "/product/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别Magisk/阿尔法(新版)"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            "/data/adb/ksu/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别KernelSU/Wild KSU/SukiSU Ultra"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            "/data/adb/ap/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别APatch/FolkPatch"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            *)
                # 理论上不会进入这里
                echo -e "🚫 暂未适配你的设备"
                echo -e "请网盘下载查找sh并执行，然后截屏发给我。"
                echo -e "酷安SukiSU土豆"
                exit 1
                ;;
        esac
        break
    fi
done

# 检查是否找到 resetprop
if [ -z "$RESETPROP_BIN" ]; then
    echo -e "❌ 错误：未找到可执行的resetprop"
    echo -e "🚫 暂未适配你的设备。"
    echo -e "请网盘下载查找sh并执行，然后截屏发给我"
    echo -e "酷安SukiSU土豆"
    exit 1
fi

echo -e "🔒 开始重置系统属性..."
sleep 1

# -------------------------------
# 删除 persist 相关的调试属性
# -------------------------------
echo -e "🗑️  删除 persist 相关的调试属性..."
$RESETPROP_BIN --delete persist.hyperceiler.log.level
$RESETPROP_BIN --delete persist.service.adb.enable
$RESETPROP_BIN --delete persist.service.debuggable
$RESETPROP_BIN --delete persist.zygote.app_data_isolation
sleep 0.5

# -------------------------------
# 重置系统安全与调试属性
# -------------------------------
echo -e "🔐 重置系统安全与调试属性..."
$RESETPROP_BIN ro.debuggable 0
$RESETPROP_BIN ro.secure 1
$RESETPROP_BIN ro.adb.secure 1
sleep 0.5

# -------------------------------
# 重置启动相关的安全属性
# -------------------------------
echo -e "🛡︎ 重置启动安全验证属性..."
$RESETPROP_BIN ro.boot.flash.locked 1
$RESETPROP_BIN ro.boot.verifiedbootstate green
$RESETPROP_BIN ro.secureboot.lockstate locked
$RESETPROP_BIN ro.boot.vbmeta.device_state locked
sleep 0.5

# -------------------------------
# 清理日志缓冲区相关属性
# -------------------------------
echo -e "📜 重置日志缓冲区相关属性..."
$RESETPROP_BIN -n persist.logd.size ""
$RESETPROP_BIN -n persist.logd.size.crash ""
$RESETPROP_BIN -n persist.logd.size.main ""
$RESETPROP_BIN -n persist.log.tag ""
sleep 0.5

# -------------------------------
# 设置 USB 与 AVB 相关属性
# -------------------------------
echo -e "🔌 重置 USB 与 AVB（验证启动）相关属性..."
$RESETPROP_BIN sys.usb.adb.disabled 0
$RESETPROP_BIN ro.boot.avb_version 1.2
$RESETPROP_BIN ro.boot.vbmeta.avb_version 1.2
$RESETPROP_BIN ro.boot.vbmeta.size 19968
$RESETPROP_BIN ro.boot.vbmeta.digest d74bf68ce680f1f84679d10f25f07dbe92274a3f45c28dc061a6ae49a9b18ec4
sleep 0.5

# -------------------------------
# 最终确保关键属性正确设置，并清理多余项
# -------------------------------
echo -e "⚙️ 确保最终系统属性处于安全状态..."
$RESETPROP_BIN ro.debuggable 0
$RESETPROP_BIN ro.secure 1
$RESETPROP_BIN ro.adb.secure 1
$RESETPROP_BIN --delete persist.zygote.app_data_isolation
$RESETPROP_BIN --delete persist.hyperceiler.log.level
sleep 0.5
clear
echo -e "✅ 所有 resetprop 命令已执行完毕！"
sleep 2
echo -e ""
echo -e "提示："
echo -e "🔃恢复常见检测项属性。
⚠️ 但如果刷入某种命令模块，重启后可能会失效。"
echo -e ""
echo -e "1) 启用
2) 返回"
;;

"返回")
clear
echo -e "\033[1;32m主菜单\033[0m"
echo -e "1) Luna相关
2) 牛头相关
3) 春秋相关
4) Hunter相关
5) 设备属性恢复
6) 游戏相关
7) 其他功能
8) 退出"
break
;;

*)
echo -e "\033[33m无效的选项\033[0m";;
esac
done
;;

"游戏相关")
clear
echo -e "\033[33m提示：\033[0m"
echo -e "\033[1;33m已进入清理界面。所有都支持清理分身应用，执行后主应用和所有分身都会一起清理。\033[0m"
echo -e ""
PS3='请选择一个操作: '
options=(
    "王者清理(游戏前)"
    "和平清理(游戏前)"
    "CF手游清理(游戏前)"
    "三角洲三服清理(游戏前)"
    "暗区四服清理(游戏前)"
    "瓦手游清理(游戏前)"
    "使命手游清理(游戏前)"
    "过设备标记(腾讯通用)"
    "修改序列号"
    "重置防火墙"
    "返回"
)
select opt in "${options[@]}"
do
case $opt in
"王者清理(游戏前)")
clear
sgame() {
    clear
    # 目标目录模式
    TARGET_PATTERN="/data/user/*/com.tencent.tmgp.sgame"
    
    # 检查是否存在匹配的目录
    if ! ls -d $TARGET_PATTERN >/dev/null 2>&1; then
        echo -e "❌错误：王者荣耀未安装！"
        exit 1
    fi
    
    # 标志变量
    found_main=false
    found_clones=false
    
    # 先检查主应用和分身
    for TARGET_DIR in $TARGET_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        # 提取用户ID
        user_id=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        if [ "$user_id" = "0" ]; then
            found_main=true
        else
            found_clones=true
        fi
    done
    
    # 输出检查结果
    if [ "$found_main" = true ]; then
        echo -e "✅ 已找到主应用"
    fi
    if [ "$found_clones" = true ]; then
        echo -e "✅ 已找到分身应用"
    fi
    
    echo -e ""
    
    # 遍历所有匹配的目录进行清理
    for TARGET_DIR in $TARGET_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        # 提取用户ID
        user_id=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        if [ "$user_id" = "0" ]; then
            echo -e "正在清理主应用..."
        else
            echo -e "正在清理分身应用(路径id:$user_id)..."
        fi
        
        # 进入目标目录
        cd "$TARGET_DIR" || continue
        
        # 获取当前目录下所有文件和目录
        for item in *; do
            # 跳过files目录
            if [ "$item" = "files" ]; then
                continue
            fi
            
            # 删除文件或目录
            if [ -e "$item" ]; then
                echo -e "  正在删除: $item"
                rm -rf "$item"
            fi
        done
        
        if [ "$user_id" = "0" ]; then
            echo -e "✅ 主应用清理完成"
        else
            echo -e "✅ 分身应用(路径id:$user_id)清理完成"
        fi
        echo -e ""
    done

    # 清理游戏资源文件（对应每个用户）
    echo -e "🧹 正在清理游戏资源文件..."
    
    for TARGET_DIR in $TARGET_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        # 提取用户ID
        user_id=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        TARGET_DIR1="$TARGET_DIR/files"
        
        # 检查目标目录是否存在
        if [ ! -d "$TARGET_DIR1" ]; then
            if [ "$user_id" = "0" ]; then
                echo -e "⚠️ 主应用未下载游戏资源，已跳过。"
                sleep 1
            else
                echo -e "⚠️ 分身应用 (路径id:$user_id) 未下载游戏资源，已跳过。"
                sleep 1
            fi
            continue
        fi
        
        if [ "$user_id" = "0" ]; then
            echo -e "正在清理主应用..."
        else
            echo -e "正在清理分身应用(路径id:$user_id)..."
        fi
        
        # 进入目标目录
        cd "$TARGET_DIR1" || continue

        # 获取当前目录下所有文件和目录
        for item in *; do
            # 跳过QtsVFSCache和TP目录
            if [ "$item" = "QtsVFSCache" ] || [ "$item" = "TP" ]; then
                continue
            fi
            
            # 删除文件或目录
            if [ -e "$item" ]; then
                echo -e "  正在删除: $item"
                rm -rf "$item"
            fi
        done
        
        if [ "$user_id" = "0" ]; then
            echo -e "✅ 主应用清理完成"
        else
            echo -e "✅ 分身应用(路径id:$user_id)清理完成"
        fi
        echo -e ""
    done

    # 清理存储目录
    rm -rf /storage/emulated/*/Android/data/com.tencent.tmgp.sgame/*
    
    clear
    echo -e "------------------------------------------------"
    echo -e "🎉 王者清理完成！"
    echo -e "📝 清理列表："
    if [ "$found_main" = true ]; then
        echo -e "   • 主应用 ✅"
    fi
    if [ "$found_clones" = true ]; then
        echo -e "   • 分身应用(路径id:$user_id) ✅"
    fi
    echo -e "------------------------------------------------"
    sleep 1
    echo -e ""
}

while true; do
    echo -n "清理后需重新登录，是否继续？[y/n]"
    read choice
    case "$choice" in
        y|Y)
            echo -e "${YELLOW}正在清理...${NC}"
            sleep 0.5
            sgame
            break
            ;;
        n|N|"")
            echo -e "${GREEN}已取消清理${NC}"
            sleep 2
            clear
            break
            ;;
        *)
            echo -e "${RED}无效输入，请输入 y(继续) 或 n(取消)${NC}"
            ;;
    esac
done

sleep 1
echo -e " 1) 王者清理(游戏前)
 2) 和平清理(游戏前)
 3) CF手游清理(游戏前)
 4) 三角洲三服清理(游戏前)
 5) 暗区四服清理(游戏前)
 6) 瓦手游清理(游戏前)
 7) 使命手游清理(游戏前)
 8) 过设备标记(腾讯通用)
 9) 修改序列号
10) 重置防火墙
11) 返回"
;;

"和平清理(游戏前)")
clear
pubgmhd() {
    clear
    # 目标目录模式
    TARGET_PATTERN="/data/user/*/com.tencent.tmgp.pubgmhd"
    
    # 检查是否存在匹配的目录
    if ! ls -d $TARGET_PATTERN >/dev/null 2>&1; then
        echo -e "❌错误：和平精英未安装！"
        exit 1
    fi
    
    # 标志变量
    found_main=false
    found_clones=false
    
    # 先检查主应用和分身
    for TARGET_DIR in $TARGET_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        # 提取用户ID
        user_id=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        if [ "$user_id" = "0" ]; then
            found_main=true
        else
            found_clones=true
        fi
    done
    
    # 输出检查结果
    if [ "$found_main" = true ]; then
        echo -e "✅ 已找到主应用"
    fi
    if [ "$found_clones" = true ]; then
        echo -e "✅ 已找到分身应用"
    fi
    
    echo -e ""
    
    # 1. 清理应用数据目录
    echo -e "🧹 正在清理应用数据..."
    for TARGET_DIR in $TARGET_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        # 提取用户ID
        user_id=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        if [ "$user_id" = "0" ]; then
            echo -e "🧹 正在清理主应用数据..."
        else
            echo -e "🧹 正在清理分身应用(路径id:$user_id)数据..."
        fi
        
        # 进入目标目录
        cd "$TARGET_DIR" || continue
        
        # 获取当前目录下所有文件和目录
        for item in *; do
            # 跳过files目录
            if [ "$item" = "files" ]; then
                continue
            fi
            
            # 删除文件或目录
            if [ -e "$item" ]; then
                echo -e "  正在删除: $item"
                rm -rf "$item"
            fi
        done
        
        if [ "$user_id" = "0" ]; then
            echo -e "✅ 主应用数据清理完成"
        else
            echo -e "✅ 分身应用(路径id:$user_id)数据清理完成"
        fi
        echo -e ""
    done

    # 2. 清理游戏资源文件
    echo -e "🧹 正在清理游戏资源文件..."
    for TARGET_DIR in $TARGET_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        # 提取用户ID
        user_id=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        TARGET_DIR1="$TARGET_DIR/files"
        
        # 检查目标目录是否存在
        if [ ! -d "$TARGET_DIR1" ]; then
            if [ "$user_id" = "0" ]; then
                echo -e "⚠️ 主应用未下载游戏资源，已跳过"
                sleep 1
            else
                echo -e "⚠️ 分身应用(路径id:$user_id)未下载游戏资源，已跳过"
                sleep 1
            fi
            continue
        fi
        
        if [ "$user_id" = "0" ]; then
            echo -e "🧹 正在清理主应用游戏资源..."
        else
            echo -e "🧹 正在清理分身应用(路径id:$user_id)游戏资源..."
        fi
        
        # 进入目标目录
        cd "$TARGET_DIR1" || continue

        # 获取当前目录下所有文件和目录
        for item in *; do
            # 跳过ProgramBinaryCache目录
            if [ "$item" = "ProgramBinaryCache" ]; then
                continue
            fi
            
            # 删除文件或目录
            if [ -e "$item" ]; then
                echo -e "  正在删除: $item"
                rm -rf "$item"
            fi
        done
        
        if [ "$user_id" = "0" ]; then
            echo -e "✅ 主应用游戏资源清理完成"
        else
            echo -e "✅ 分身应用(路径id:$user_id)游戏资源清理完成"
        fi
        echo -e ""
    done

    # 3. 清理存储数据目录
    echo -e "🧹 正在清理存储数据..."
    STORAGE_PATTERN="/storage/emulated/*/Android/data/com.tencent.tmgp.pubgmhd"
    
    for TARGET_DIR2 in $STORAGE_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR2" ]; then
            continue
        fi
        
        echo -e "🧹 正在清理存储目录..."
        
        # 进入目标目录
        cd "$TARGET_DIR2" || continue

        # 获取当前目录下所有文件和目录
        for item in *; do
            # 跳过files目录
            if [ "$item" = "files" ]; then
                continue
            fi
            
            # 删除文件或目录
            if [ -e "$item" ]; then
                echo -e "  正在删除: $item"
                rm -rf "$item"
            fi
        done
        echo -e "✅ 存储数据清理完成"
        echo -e ""
    done

    # 4. 清理存储游戏资源
    echo -e "🧹 正在清理存储游戏资源..."
    for TARGET_DIR2 in $STORAGE_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR2" ]; then
            continue
        fi
        
        TARGET_DIR3="$TARGET_DIR2/files"
        
        # 检查目标目录是否存在
        if [ ! -d "$TARGET_DIR3" ]; then
            echo -e "⚠️ 未找到存储游戏资源，已跳过"
            continue
        fi
        
        echo -e "🧹 正在清理存储游戏资源..."
        
        # 进入目标目录
        cd "$TARGET_DIR3" || continue

        # 获取当前目录下所有文件和目录
        for item in *; do
            # 跳过UE4Game目录
            if [ "$item" = "UE4Game" ]; then
                continue
            fi
            
            # 删除文件或目录
            if [ -e "$item" ]; then
                echo -e "  正在删除: $item"
                rm -rf "$item"
            fi
        done
        echo -e "✅ 存储游戏资源清理完成"
        echo -e ""
    done

    # 5. 清理Saved目录
    echo -e "🧹 正在清理..."
    for TARGET_DIR2 in $STORAGE_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR2" ]; then
            continue
        fi
        
        TARGET_DIR4="$TARGET_DIR2/files/UE4Game/ShadowTrackerExtra/ShadowTrackerExtra/Saved"
        
        # 检查目标目录是否存在
        if [ ! -d "$TARGET_DIR4" ]; then
            echo -e "⚠️ 未找到资源目录，已跳过"
            continue
        fi
        
        echo -e "🧹 正在清理资源目录..."
        
        # 进入目标目录
        cd "$TARGET_DIR4" || continue

        # 获取当前目录下所有文件和目录
        for item in *; do
            # 跳过Paks目录
            if [ "$item" = "Paks" ]; then
                continue
            fi
            
            # 删除文件或目录
            if [ -e "$item" ]; then
                echo -e "  正在删除: $item"
                rm -rf "$item"
            fi
        done
        echo -e "✅ 资源清理完成"
        echo -e ""
    done

    clear
    echo -e "------------------------------------------------"
    echo -e "🎉 和平精英清理完成！"
    echo -e "📝 清理列表："
    if [ "$found_main" = true ]; then
        echo -e "   • 主应用 ✅"
    fi
    if [ "$found_clones" = true ]; then
        echo -e "   • 分身应用(路径id:$user_id) ✅"
    fi
    echo -e "------------------------------------------------"
    sleep 1
    echo -e ""
}

while true; do
    echo -n "清理后需重新登录，是否继续？[y/n]"
    read choice
    case "$choice" in
        y|Y)
            echo -e "${YELLOW}正在清理...${NC}"
            sleep 0.5
            pubgmhd
            break
            ;;
        n|N|"")
            echo -e "${GREEN}已取消清理${NC}"
            sleep 2
            clear
            break
            ;;
        *)
            echo -e "${RED}无效输入，请输入 y(继续) 或 n(取消)${NC}"
            ;;
    esac
done

sleep 1
echo -e " 1) 王者清理(游戏前)
 2) 和平清理(游戏前)
 3) CF手游清理(游戏前)
 4) 三角洲三服清理(游戏前)
 5) 暗区四服清理(游戏前)
 6) 瓦手游清理(游戏前)
 7) 使命手游清理(游戏前)
 8) 过设备标记(腾讯通用)
 9) 修改序列号
10) 重置防火墙
11) 返回"
;;

"CF手游清理(游戏前)")
clear
cf_clean() {
    clear
    # 目标目录模式
    TARGET_PATTERN="/data/user/*/com.tencent.tmgp.cf"
    
    # 检查是否存在匹配的目录
    if ! ls -d $TARGET_PATTERN >/dev/null 2>&1; then
        echo -e "❌错误：穿越火线未安装！"
        exit 1
    fi
    
    # 标志变量
    found_main=false
    found_clones=false
    
    # 先检查主应用和分身
    for TARGET_DIR in $TARGET_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        # 提取用户ID
        user_id=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        if [ "$user_id" = "0" ]; then
            found_main=true
        else
            found_clones=true
        fi
    done
    
    # 输出检查结果
    if [ "$found_main" = true ]; then
        echo -e "✅ 已找到主应用"
    fi
    if [ "$found_clones" = true ]; then
        echo -e "✅ 已找到分身应用"
    fi
    
    echo -e ""
    
    # 1. 清理应用数据目录（保留shared_prefs）
    echo -e "🧹 正在清理应用杂志目录..."
    for TARGET_DIR in $TARGET_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        # 提取用户ID
        user_id=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        if [ "$user_id" = "0" ]; then
            echo -e "🧹 正在清理主应用杂志..."
        else
            echo -e "🧹 正在清理分身应用(路径id:$user_id)杂志..."
        fi
        
        # 进入目标目录
        cd "$TARGET_DIR" || continue
        
        # 获取当前目录下所有文件和目录
        for item in *; do
            # 跳过shared_prefs目录
            if [ "$item" = "shared_prefs" ]; then
                continue
            fi
            
            # 删除文件或目录
            if [ -e "$item" ]; then
                echo -e "  正在删除: $item"
                rm -rf "$item"
            fi
        done
        
        if [ "$user_id" = "0" ]; then
            echo -e "✅ 主应用杂志清理完成"
        else
            echo -e "✅ 分身应用(路径id:$user_id)杂志清理完成"
        fi
        echo -e ""
    done

    # 2. 清理存储目录（保留Assets4）
    echo -e "🧹 正在清理存储目录..."
    STORAGE_PATTERN="/storage/emulated/*/Android/data/com.tencent.tmgp.cf"
    
    storage_found=false
    for TARGET_DIR in $STORAGE_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        storage_found=true
        
        # 提取存储路径信息
        storage_path=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        # 进入目标目录
        cd "$TARGET_DIR" || continue

        # 获取当前目录下所有文件和目录
        for item in *; do
            # 跳过files目录
            if [ "$item" = "files" ]; then
                continue
            fi
            
            # 删除文件或目录
            if [ -e "$item" ]; then
                echo -e "  正在删除: $item"
                rm -rf "$item"
            fi
        done
        
        echo -e "✅ 存储目录清理完成"
        echo -e ""
    done
    
    if [ "$storage_found" = false ]; then
        echo -e "⚠️ 未找到存储目录，已跳过"
        sleep 1
    fi

    # 3. 清理存储files目录（保留Assets4）
    echo -e "🧹 正在清理存储杂志..."
    for TARGET_DIR in $STORAGE_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        TARGET_DIR1="$TARGET_DIR/files"
        
        # 检查目标目录是否存在
        if [ ! -d "$TARGET_DIR1" ]; then
            echo -e "⚠️ 未找到杂志目录，已跳过"
            sleep 1
            continue
        fi
        
        echo -e "🧹 正在清理"
        
        # 进入目标目录
        cd "$TARGET_DIR1" || continue

        # 获取当前目录下所有文件和目录
        for item in *; do
            # 跳过Assets4目录
            if [ "$item" = "Assets4" ]; then
                continue
            fi
            
            # 删除文件或目录
            if [ -e "$item" ]; then
                echo -e "  正在删除: $item"
                rm -rf "$item"
            fi
        done
        
        echo -e "✅ 目录清理完成"
        echo -e ""
    done

    clear
    echo -e "------------------------------------------------"
    echo -e "🎉 穿越火线清理完成！"
    echo -e "📝 清理列表："
    if [ "$found_main" = true ]; then
        echo -e "   • 主应用 ✅"
    fi
    if [ "$found_clones" = true ]; then
        echo -e "   • 分身应用(路径id:$user_id) ✅"
    fi
    echo -e "------------------------------------------------"
    sleep 1
    echo -e ""
}

while true; do
    echo -n "清理后需重新登录，是否继续？[y/n]"
    read choice
    case "$choice" in
        y|Y)
            echo -e "${YELLOW}正在清理...${NC}"
            sleep 0.5
            cf_clean
            break
            ;;
        n|N|"")
            echo -e "${GREEN}已取消清理${NC}"
            sleep 2
            clear
            break
            ;;
        *)
            echo -e "${RED}无效输入，请输入 y(继续) 或 n(取消)${NC}"
            ;;
    esac
done

sleep 1
echo -e " 1) 王者清理(游戏前)
 2) 和平清理(游戏前)
 3) CF手游清理(游戏前)
 4) 三角洲三服清理(游戏前)
 5) 暗区四服清理(游戏前)
 6) 瓦手游清理(游戏前)
 7) 使命手游清理(游戏前)
 8) 过设备标记(腾讯通用)
 9) 修改序列号
10) 重置防火墙
11) 返回"
;;

"三角洲三服清理(游戏前)")
clear
dfm_ch() {
    clear
    # 目标目录模式
    TARGET_PATTERN="/data/user/*/com.tencent.tmgp.dfm"
    
    # 检查是否存在匹配的目录
    if ! ls -d $TARGET_PATTERN >/dev/null 2>&1; then
        echo -e "❌错误：三角洲(国服)未安装！"
        exit 1
    fi
    
    # 标志变量
    found_main=false
    found_clones=false
    
    # 先检查主应用和分身
    for TARGET_DIR in $TARGET_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        # 提取用户ID
        user_id=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        if [ "$user_id" = "0" ]; then
            found_main=true
        else
            found_clones=true
        fi
    done
    
    # 输出检查结果
    if [ "$found_main" = true ]; then
        echo -e "✅ 已找到主应用"
    fi
    if [ "$found_clones" = true ]; then
        echo -e "✅ 已找到分身应用"
    fi
    
    echo -e ""
    
    # 1. 清理应用数据目录
    echo -e "🧹 正在清理应用数据..."
    for TARGET_DIR in $TARGET_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        # 提取用户ID
        user_id=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        if [ "$user_id" = "0" ]; then
            echo -e "🧹 正在清理主应用数据..."
        else
            echo -e "🧹 正在清理分身应用(路径id:$user_id)数据..."
        fi
        
        # 进入目标目录
        cd "$TARGET_DIR" || continue
        
        # 获取当前目录下所有文件和目录
        for item in *; do
            # 跳过files目录
            if [ "$item" = "files" ]; then
                continue
            fi
            
            # 删除文件或目录
            if [ -e "$item" ]; then
                echo -e "  正在删除: $item"
                rm -rf "$item"
            fi
        done
        
        if [ "$user_id" = "0" ]; then
            echo -e "✅ 主应用数据清理完成"
        else
            echo -e "✅ 分身应用(路径id:$user_id)数据清理完成"
        fi
        echo -e ""
    done

    # 2. 清理游戏资源文件
    echo -e "🧹 正在清理游戏资源文件..."
    for TARGET_DIR in $TARGET_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        # 提取用户ID
        user_id=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        TARGET_DIR1="$TARGET_DIR/files"
        
        # 检查目标目录是否存在
        if [ ! -d "$TARGET_DIR1" ]; then
            if [ "$user_id" = "0" ]; then
                echo -e "⚠️ 主应用未下载游戏资源"
            else
                echo -e "⚠️ 分身应用(路径id:$user_id)未下载游戏资源"
            fi
            continue
        fi
        
        if [ "$user_id" = "0" ]; then
            echo -e "🧹 正在清理主应用游戏资源..."
        else
            echo -e "🧹 正在清理分身应用(路径id:$user_id)游戏资源..."
        fi
        
        # 进入目标目录
        cd "$TARGET_DIR1" || continue

        # 获取当前目录下所有文件和目录
        for item in *; do
            # 跳过UE4Game目录
            if [ "$item" = "UE4Game" ]; then
                continue
            fi
            
            # 删除文件或目录
            if [ -e "$item" ]; then
                echo -e "  正在删除: $item"
                rm -rf "$item"
            fi
        done
        
        if [ "$user_id" = "0" ]; then
            echo -e "✅ 主应用游戏资源清理完成"
        else
            echo -e "✅ 分身应用(路径id:$user_id)游戏资源清理完成"
        fi
        echo -e ""
    done

    # 3. 清理Manifest文件
    echo -e "🧹 正在清理文件..."
    for TARGET_DIR in $TARGET_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        # 提取用户ID
        user_id=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        MANIFEST_FILE="$TARGET_DIR/files/UE4Game/DeltaForce/Manifest_UFSFiles_Android.txt"
        
        # 检查文件是否存在
        if [ ! -f "$MANIFEST_FILE" ]; then
            if [ "$user_id" = "0" ]; then
                echo -e "⚠️ 主应用未找到Manifest文件，已跳过"
            else
                echo -e "⚠️ 分身应用(路径id:$user_id)未找到文件，已跳过"
            fi
            continue
        fi
        
        if [ "$user_id" = "0" ]; then
            echo -e "🧹 正在删除主应用Manifest文件..."
        else
            echo -e "🧹 正在删除分身应用(路径id:$user_id)文件..."
        fi
        
        rm -rf "$MANIFEST_FILE"
        
        if [ "$user_id" = "0" ]; then
            echo -e "✅ 主应用Manifest文件删除完成"
        else
            echo -e "✅ 分身应用(路径id:$user_id)文件删除完成"
        fi
        echo -e ""
    done

    # 4. 清理存储目录
    echo -e "🧹 正在清理存储目录..."
    STORAGE_PATTERN="/storage/emulated/*/Android/data/com.tencent.tmgp.dfm"
    
    storage_found=false
    for TARGET_DIR2 in $STORAGE_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR2" ]; then
            continue
        fi
        
        storage_found=true
        echo -e "🧹 正在清理存储目录..."
        rm -rf "$TARGET_DIR2"/*
        echo -e "✅ 存储目录清理完成"
        echo -e ""
    done
    
    if [ "$storage_found" = false ]; then
        echo -e "⚠️ 未找到存储目录，已跳过"
    fi

    clear
    echo -e "------------------------------------------------"
    echo -e "🎉 三角洲(国服)清理完成！"
    echo -e "📝 清理列表："
    if [ "$found_main" = true ]; then
        echo -e "   • 主应用 ✅"
    fi
    if [ "$found_clones" = true ]; then
        echo -e "   • 分身应用(路径id:$user_id) ✅"
    fi
    echo -e "------------------------------------------------"
    sleep 1
    echo -e ""
}

dfm_ga() {
    clear
    # 目标目录模式
    TARGET_PATTERN="/data/user/*/com.garena.game.df"
    
    # 检查是否存在匹配的目录
    if ! ls -d $TARGET_PATTERN >/dev/null 2>&1; then
        echo -e "❌错误：三角洲(台服)未安装！"
        exit 1
    fi
    
    # 标志变量
    found_main=false
    found_clones=false
    
    # 先检查主应用和分身
    for TARGET_DIR in $TARGET_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        # 提取用户ID
        user_id=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        if [ "$user_id" = "0" ]; then
            found_main=true
        else
            found_clones=true
        fi
    done
    
    # 输出检查结果
    if [ "$found_main" = true ]; then
        echo -e "✅ 已找到主应用"
    fi
    if [ "$found_clones" = true ]; then
        echo -e "✅ 已找到分身应用"
    fi
    
    echo -e ""
    
    # 1. 清理应用数据目录
    echo -e "🧹 正在清理应用数据..."
    for TARGET_DIR in $TARGET_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        # 提取用户ID
        user_id=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        if [ "$user_id" = "0" ]; then
            echo -e "🧹 正在清理主应用数据..."
        else
            echo -e "🧹 正在清理分身应用(路径id:$user_id)数据..."
        fi
        
        # 进入目标目录
        cd "$TARGET_DIR" || continue
        
        # 获取当前目录下所有文件和目录
        for item in *; do
            # 跳过files目录
            if [ "$item" = "files" ]; then
                continue
            fi
            
            # 删除文件或目录
            if [ -e "$item" ]; then
                echo -e "  正在删除: $item"
                rm -rf "$item"
            fi
        done
        
        if [ "$user_id" = "0" ]; then
            echo -e "✅ 主应用数据清理完成"
        else
            echo -e "✅ 分身应用(路径id:$user_id)数据清理完成"
        fi
        echo -e ""
    done

    # 2. 清理游戏资源文件
    echo -e "🧹 正在清理游戏资源文件..."
    for TARGET_DIR in $TARGET_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        # 提取用户ID
        user_id=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        TARGET_DIR1="$TARGET_DIR/files"
        
        # 检查目标目录是否存在
        if [ ! -d "$TARGET_DIR1" ]; then
            if [ "$user_id" = "0" ]; then
                echo -e "⚠️ 主应用未下载游戏资源"
            else
                echo -e "⚠️ 分身应用(路径id:$user_id)未下载游戏资源"
            fi
            continue
        fi
        
        if [ "$user_id" = "0" ]; then
            echo -e "🧹 正在清理主应用游戏资源..."
        else
            echo -e "🧹 正在清理分身应用(路径id:$user_id)游戏资源..."
        fi
        
        # 进入目标目录
        cd "$TARGET_DIR1" || continue

        # 获取当前目录下所有文件和目录
        for item in *; do
            # 跳过UE4Game目录
            if [ "$item" = "UE4Game" ]; then
                continue
            fi
            
            # 删除文件或目录
            if [ -e "$item" ]; then
                echo -e "  正在删除: $item"
                rm -rf "$item"
            fi
        done
        
        if [ "$user_id" = "0" ]; then
            echo -e "✅ 主应用游戏资源清理完成"
        else
            echo -e "✅ 分身应用(路径id:$user_id)游戏资源清理完成"
        fi
        echo -e ""
    done

    # 3. 清理Manifest文件
    echo -e "🧹 正在清理文件..."
    for TARGET_DIR in $TARGET_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        # 提取用户ID
        user_id=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        MANIFEST_FILE="$TARGET_DIR/files/UE4Game/DeltaForce/Manifest_UFSFiles_Android.txt"
        
        # 检查文件是否存在
        if [ ! -f "$MANIFEST_FILE" ]; then
            if [ "$user_id" = "0" ]; then
                echo -e "⚠️ 主应用未找到Manifest文件，已跳过"
            else
                echo -e "⚠️ 分身应用(路径id:$user_id)未找到文件，已跳过"
            fi
            continue
        fi
        
        if [ "$user_id" = "0" ]; then
            echo -e "🧹 正在删除主应用Manifest文件..."
        else
            echo -e "🧹 正在删除分身应用(路径id:$user_id)文件..."
        fi
        
        rm -rf "$MANIFEST_FILE"
        
        if [ "$user_id" = "0" ]; then
            echo -e "✅ 主应用Manifest文件删除完成"
        else
            echo -e "✅ 分身应用(路径id:$user_id)文件删除完成"
        fi
        echo -e ""
    done

    # 4. 清理存储目录
    echo -e "🧹 正在清理存储目录..."
    STORAGE_PATTERN="/storage/emulated/*/Android/data/com.garena.game.df"
    
    storage_found=false
    for TARGET_DIR2 in $STORAGE_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR2" ]; then
            continue
        fi
        
        storage_found=true
        echo -e "🧹 正在清理存储目录..."
        rm -rf "$TARGET_DIR2"/*
        echo -e "✅ 存储目录清理完成"
        echo -e ""
    done
    
    if [ "$storage_found" = false ]; then
        echo -e "⚠️ 未找到存储目录，已跳过"
    fi

    clear
    echo -e "------------------------------------------------"
    echo -e "🎉 三角洲(台服)清理完成！"
    echo -e "📝 清理列表："
    if [ "$found_main" = true ]; then
        echo -e "   • 主应用 ✅"
    fi
    if [ "$found_clones" = true ]; then
        echo -e "   • 分身应用(路径id:$user_id) ✅"
    fi
    echo -e "------------------------------------------------"
    sleep 1
    echo -e ""
}

dfm_df() {
    clear
    # 目标目录模式
    TARGET_PATTERN="/data/user/*/com.proxima.dfm"
    
    # 检查是否存在匹配的目录
    if ! ls -d $TARGET_PATTERN >/dev/null 2>&1; then
        echo -e "❌错误：三角洲(国服)未安装！"
        exit 1
    fi
    
    # 标志变量
    found_main=false
    found_clones=false
    
    # 先检查主应用和分身
    for TARGET_DIR in $TARGET_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        # 提取用户ID
        user_id=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        if [ "$user_id" = "0" ]; then
            found_main=true
        else
            found_clones=true
        fi
    done
    
    # 输出检查结果
    if [ "$found_main" = true ]; then
        echo -e "✅ 已找到主应用"
    fi
    if [ "$found_clones" = true ]; then
        echo -e "✅ 已找到分身应用"
    fi
    
    echo -e ""
    
    # 1. 清理应用数据目录
    echo -e "🧹 正在清理应用数据..."
    for TARGET_DIR in $TARGET_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        # 提取用户ID
        user_id=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        if [ "$user_id" = "0" ]; then
            echo -e "🧹 正在清理主应用数据..."
        else
            echo -e "🧹 正在清理分身应用(路径id:$user_id)数据..."
        fi
        
        # 进入目标目录
        cd "$TARGET_DIR" || continue
        
        # 获取当前目录下所有文件和目录
        for item in *; do
            # 跳过files目录
            if [ "$item" = "files" ]; then
                continue
            fi
            
            # 删除文件或目录
            if [ -e "$item" ]; then
                echo -e "  正在删除: $item"
                rm -rf "$item"
            fi
        done
        
        if [ "$user_id" = "0" ]; then
            echo -e "✅ 主应用数据清理完成"
        else
            echo -e "✅ 分身应用(路径id:$user_id)数据清理完成"
        fi
        echo -e ""
    done

    # 2. 清理游戏资源文件
    echo -e "🧹 正在清理游戏资源文件..."
    for TARGET_DIR in $TARGET_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        # 提取用户ID
        user_id=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        TARGET_DIR1="$TARGET_DIR/files"
        
        # 检查目标目录是否存在
        if [ ! -d "$TARGET_DIR1" ]; then
            if [ "$user_id" = "0" ]; then
                echo -e "⚠️ 主应用未下载游戏资源"
            else
                echo -e "⚠️ 分身应用(路径id:$user_id)未下载游戏资源"
            fi
            continue
        fi
        
        if [ "$user_id" = "0" ]; then
            echo -e "🧹 正在清理主应用游戏资源..."
        else
            echo -e "🧹 正在清理分身应用(路径id:$user_id)游戏资源..."
        fi
        
        # 进入目标目录
        cd "$TARGET_DIR1" || continue

        # 获取当前目录下所有文件和目录
        for item in *; do
            # 跳过UE4Game目录
            if [ "$item" = "UE4Game" ]; then
                continue
            fi
            
            # 删除文件或目录
            if [ -e "$item" ]; then
                echo -e "  正在删除: $item"
                rm -rf "$item"
            fi
        done
        
        if [ "$user_id" = "0" ]; then
            echo -e "✅ 主应用游戏资源清理完成"
        else
            echo -e "✅ 分身应用(路径id:$user_id)游戏资源清理完成"
        fi
        echo -e ""
    done

    # 3. 清理Manifest文件
    echo -e "🧹 正在清理文件..."
    for TARGET_DIR in $TARGET_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        # 提取用户ID
        user_id=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        MANIFEST_FILE="$TARGET_DIR/files/UE4Game/DeltaForce/Manifest_UFSFiles_Android.txt"
        
        # 检查文件是否存在
        if [ ! -f "$MANIFEST_FILE" ]; then
            if [ "$user_id" = "0" ]; then
                echo -e "⚠️ 主应用未找到Manifest文件，已跳过"
            else
                echo -e "⚠️ 分身应用(路径id:$user_id)未找到文件，已跳过"
            fi
            continue
        fi
        
        if [ "$user_id" = "0" ]; then
            echo -e "🧹 正在删除主应用Manifest文件..."
        else
            echo -e "🧹 正在删除分身应用(路径id:$user_id)文件..."
        fi
        
        rm -rf "$MANIFEST_FILE"
        
        if [ "$user_id" = "0" ]; then
            echo -e "✅ 主应用Manifest文件删除完成"
        else
            echo -e "✅ 分身应用(路径id:$user_id)文件删除完成"
        fi
        echo -e ""
    done

    # 4. 清理存储目录
    echo -e "🧹 正在清理存储目录..."
    STORAGE_PATTERN="/storage/emulated/*/Android/data/com.proxima.dfm"
    
    storage_found=false
    for TARGET_DIR2 in $STORAGE_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR2" ]; then
            continue
        fi
        
        storage_found=true
        echo -e "🧹 正在清理存储目录..."
        rm -rf "$TARGET_DIR2"/*
        echo -e "✅ 存储目录清理完成"
        echo -e ""
    done
    
    if [ "$storage_found" = false ]; then
        echo -e "⚠️ 未找到存储目录，已跳过"
    fi

    clear
    echo -e "------------------------------------------------"
    echo -e "🎉 三角洲(国际服)清理完成！"
    echo -e "📝 清理列表："
    if [ "$found_main" = true ]; then
        echo -e "   • 主应用 ✅"
    fi
    if [ "$found_clones" = true ]; then
        echo -e "   • 分身应用(路径id:$user_id) ✅"
    fi
    echo -e "------------------------------------------------"
    sleep 1
    echo -e ""
}

PS3='请选择一个操作: '
options=(
    "国服China                             "
    "台服Garena"
    "国际服Delta Force"
    "返回"
)
select opt in "${options[@]}"
do
case $opt in
"国服China                             ")
clear

while true; do
    echo -n "清理后需重新登录，是否继续？[y/n]"
    read choice
    case "$choice" in
        y|Y)
            echo -e "${YELLOW}正在清理...${NC}"
            sleep 0.5
            dfm_ch
            break
            ;;
        n|N|"")
            echo -e "${GREEN}已取消清理${NC}"
            sleep 2
            clear
            break
            ;;
        *)
            echo -e "${RED}无效输入，请输入 y(继续) 或 n(取消)${NC}"
            ;;
    esac
done

sleep 1
echo -e "1) 国服China
2) 台服Garena
3) 国际服Delta Force
4) 返回"
;;

"台服Garena")
clear

while true; do
    echo -n "清理后需重新登录，是否继续？[y/n]"
    read choice
    case "$choice" in
        y|Y)
            echo -e "${YELLOW}正在清理...${NC}"
            sleep 0.5
            dfm_ga
            break
            ;;
        n|N|"")
            echo -e "${GREEN}已取消清理${NC}"
            sleep 2
            clear
            break
            ;;
        *)
            echo -e "${RED}无效输入，请输入 y(继续) 或 n(取消)${NC}"
            ;;
    esac
done

sleep 1
echo -e "1) 国服China
2) 台服Garena
3) 国际服Delta Force
4) 返回"
;;

"国际服Delta Force")
clear

while true; do
    echo -n "清理后需重新登录，是否继续？[y/n]"
    read choice
    case "$choice" in
        y|Y)
            echo -e "${YELLOW}正在清理...${NC}"
            sleep 0.5
            dfm_df
            break
            ;;
        n|N|"")
            echo -e "${GREEN}已取消清理${NC}"
            sleep 2
            clear
            break
            ;;
        *)
            echo -e "${RED}无效输入，请输入 y(继续) 或 n(取消)${NC}"
            ;;
    esac
done

sleep 1
echo -e "1) 国服China
2) 台服Garena
3) 国际服Delta Force
4) 返回"
;;

"返回")
clear
echo -e " 1) 王者清理(游戏前)
 2) 和平清理(游戏前)
 3) CF手游清理(游戏前)
 4) 三角洲三服清理(游戏前)
 5) 暗区四服清理(游戏前)
 6) 瓦手游清理(游戏前)
 7) 使命手游清理(游戏前)
 8) 过设备标记(腾讯通用)
 9) 修改序列号
10) 重置防火墙
11) 返回"
break
;;

*) 
echo -e "\033[33m无效的选项\033[0m";;
esac
done
;;

"暗区四服清理(游戏前)")
clear
PS3='请选择一个操作: '
options=(
    "暗区突围(国服)                      "
    "暗区突围(国际服)"
    "暗区突围(台服)" 
    "暗区突围(越南服)"
    "返回"
)
select opt in "${options[@]}"
do
case $opt in
"暗区突围(国服)                      ")
clear
uam() {
    clear
    # 目标目录模式
    TARGET_PATTERN="/data/user/*/com.tencent.mf.uam"
    
    # 检查是否存在匹配的目录
    if ! ls -d $TARGET_PATTERN >/dev/null 2>&1; then
        echo -e "❌错误：暗区突围未安装！"
        exit 1
    fi
    
    # 标志变量
    found_main=false
    found_clones=false
    
    # 先检查主应用和分身
    for TARGET_DIR in $TARGET_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        # 提取用户ID
        user_id=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        if [ "$user_id" = "0" ]; then
            found_main=true
        else
            found_clones=true
        fi
    done
    
    # 输出检查结果
    if [ "$found_main" = true ]; then
        echo -e "✅ 已找到主应用"
    fi
    if [ "$found_clones" = true ]; then
        echo -e "✅ 已找到分身应用"
    fi
    
    echo -e ""
    
    # 1. 清理应用数据目录
    echo -e "🧹 正在清理应用数据..."
    for TARGET_DIR in $TARGET_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        # 提取用户ID
        user_id=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        if [ "$user_id" = "0" ]; then
            echo -e "🧹 正在清理主应用数据..."
        else
            echo -e "🧹 正在清理分身应用(路径id:$user_id)数据..."
        fi
        
        # 进入目标目录
        cd "$TARGET_DIR" || continue
        
        # 获取当前目录下所有文件和目录
        for item in *; do
            # 跳过files目录
            if [ "$item" = "files" ]; then
                continue
            fi
            
            # 删除文件或目录
            if [ -e "$item" ]; then
                echo -e "  正在删除: $item"
                rm -rf "$item"
            fi
        done
        
        if [ "$user_id" = "0" ]; then
            echo -e "✅ 主应用数据清理完成"
        else
            echo -e "✅ 分身应用(路径id:$user_id)数据清理完成"
        fi
        echo -e ""
    done

    # 2. 清理游戏资源文件
    echo -e "🧹 正在清理游戏资源文件..."
    for TARGET_DIR in $TARGET_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        # 提取用户ID
        user_id=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        TARGET_DIR1="$TARGET_DIR/files"
        
        # 检查目标目录是否存在
        if [ ! -d "$TARGET_DIR1" ]; then
            if [ "$user_id" = "0" ]; then
                echo -e "⚠️ 主应用未下载游戏资源，已跳过"
                sleep 1
            else
                echo -e "⚠️ 分身应用(路径id:$user_id)未下载游戏资源，已跳过"
                sleep 1
            fi
            continue
        fi
        
        if [ "$user_id" = "0" ]; then
            echo -e "🧹 正在清理主应用游戏资源..."
        else
            echo -e "🧹 正在清理分身应用(路径id:$user_id)游戏资源..."
        fi
        
        # 进入目标目录
        cd "$TARGET_DIR1" || continue

        # 获取当前目录下所有文件和目录
        for item in *; do
            # 跳过FileManagerRecycler目录
            if [ "$item" = "FileManagerRecycler" ]; then
                continue
            fi
            
            # 删除文件或目录
            if [ -e "$item" ]; then
                echo -e "  正在删除: $item"
                rm -rf "$item"
            fi
        done
        
        if [ "$user_id" = "0" ]; then
            echo -e "✅ 主应用游戏资源清理完成"
        else
            echo -e "✅ 分身应用(路径id:$user_id)游戏资源清理完成"
        fi
        echo -e ""
    done

    # 3. 清理存储目录
    echo -e "🧹 正在清理存储目录..."
    STORAGE_PATTERN="/storage/emulated/*/Android/data/com.tencent.mf.uam"
    
    storage_found=false
    for TARGET_DIR2 in $STORAGE_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR2" ]; then
            continue
        fi
        
        storage_found=true
        
        # 提取存储路径信息
        storage_path=$(echo -e "$TARGET_DIR2" | cut -d'/' -f4)
        
        echo -e "🧹 正在清理存储目录..."
        
        # 进入目标目录
        cd "$TARGET_DIR2" || continue

        # 获取当前目录下所有文件和目录
        for item in *; do
            # 跳过files目录
            if [ "$item" = "files" ]; then
                continue
            fi
            
            # 删除文件或目录
            if [ -e "$item" ]; then
                echo -e "  正在删除: $item"
                rm -rf "$item"
            fi
        done
        
        echo -e "✅ 存储目录清理完成"
        echo -e ""
    done
    
    if [ "$storage_found" = false ]; then
        echo -e "⚠️ 未找到存储目录"
    fi

    # 4. 强制清理files目录内容
    echo -e "🧹 正在强制清理目录..."
    for TARGET_DIR in $TARGET_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        # 提取用户ID
        user_id=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        TARGET_DIR1="$TARGET_DIR/files"
        
        # 检查目标目录是否存在
        if [ ! -d "$TARGET_DIR1" ]; then
            if [ "$user_id" = "0" ]; then
                echo -e "⚠️ 主应用目录不存在，已跳过"
            else
                echo -e "⚠️ 分身应用(路径id:$user_id)目录不存在，已跳过"
            fi
            continue
        fi
        
        if [ "$user_id" = "0" ]; then
            echo -e "🧹 正在强制清理主应用目录..."
        else
            echo -e "🧹 正在强制清理分身应用(路径id:$user_id)目录..."
        fi
        
        # 删除files目录下的所有内容
        rm -rf "$TARGET_DIR1"/*
        
        if [ "$user_id" = "0" ]; then
            echo -e "✅ 主应用强制清理完成"
        else
            echo -e "✅ 分身应用(路径id:$user_id)强制清理完成"
        fi
        echo -e ""
    done

    clear
    echo -e "------------------------------------------------"
    echo -e "🎉 暗区突围(国服)清理完成！"
    echo -e "📝 清理列表："
    if [ "$found_main" = true ]; then
        echo -e "   • 主应用 ✅"
    fi
    if [ "$found_clones" = true ]; then
        echo -e "   • 分身应用(路径id:$user_id) ✅"
    fi
    echo -e "------------------------------------------------"
    sleep 1
    echo -e ""
}

while true; do
    echo -n "清理后需重新登录，是否继续？[y/n]"
    read choice
    case "$choice" in
        y|Y)
            echo -e "${YELLOW}正在清理...${NC}"
            sleep 0.5
            uam
            break
            ;;
        n|N|"")
            echo -e "${GREEN}已取消清理${NC}"
            sleep 2
            clear
            break
            ;;
        *)
            echo -e "${RED}无效输入，请输入 y(继续) 或 n(取消)${NC}"
            ;;
    esac
done

sleep 1
echo -e ""
echo -e " 1) 暗区突围(国服)
 2) 暗区突围(国际服)
 3) 暗区突围(台服)
 4) 暗区突围(越南服)
 5) 返回"
;;

"暗区突围(国际服)")
clear
uamo() {
    clear
    # 目标目录模式
    TARGET_PATTERN="/data/user/*/com.proximabeta.mf.uamo"
    
    # 检查是否存在匹配的目录
    if ! ls -d $TARGET_PATTERN >/dev/null 2>&1; then
        echo -e "❌错误：暗区突围未安装！"
        exit 1
    fi
    
    # 标志变量
    found_main=false
    found_clones=false
    
    # 先检查主应用和分身
    for TARGET_DIR in $TARGET_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        # 提取用户ID
        user_id=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        if [ "$user_id" = "0" ]; then
            found_main=true
        else
            found_clones=true
        fi
    done
    
    # 输出检查结果
    if [ "$found_main" = true ]; then
        echo -e "✅ 已找到主应用"
    fi
    if [ "$found_clones" = true ]; then
        echo -e "✅ 已找到分身应用"
    fi
    
    echo -e ""
    
    # 1. 清理应用数据目录
    echo -e "🧹 正在清理应用数据..."
    for TARGET_DIR in $TARGET_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        # 提取用户ID
        user_id=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        if [ "$user_id" = "0" ]; then
            echo -e "🧹 正在清理主应用数据..."
        else
            echo -e "🧹 正在清理分身应用(路径id:$user_id)数据..."
        fi
        
        # 进入目标目录
        cd "$TARGET_DIR" || continue
        
        # 获取当前目录下所有文件和目录
        for item in *; do
            # 跳过files目录
            if [ "$item" = "files" ]; then
                continue
            fi
            
            # 删除文件或目录
            if [ -e "$item" ]; then
                echo -e "  正在删除: $item"
                rm -rf "$item"
            fi
        done
        
        if [ "$user_id" = "0" ]; then
            echo -e "✅ 主应用数据清理完成"
        else
            echo -e "✅ 分身应用(路径id:$user_id)数据清理完成"
        fi
        echo -e ""
    done

    # 2. 清理游戏资源文件
    echo -e "🧹 正在清理游戏资源文件..."
    for TARGET_DIR in $TARGET_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        # 提取用户ID
        user_id=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        TARGET_DIR1="$TARGET_DIR/files"
        
        # 检查目标目录是否存在
        if [ ! -d "$TARGET_DIR1" ]; then
            if [ "$user_id" = "0" ]; then
                echo -e "⚠️ 主应用未下载游戏资源，已跳过"
                sleep 1
            else
                echo -e "⚠️ 分身应用(路径id:$user_id)未下载游戏资源，已跳过"
                sleep 1
            fi
            continue
        fi
        
        if [ "$user_id" = "0" ]; then
            echo -e "🧹 正在清理主应用游戏资源..."
        else
            echo -e "🧹 正在清理分身应用(路径id:$user_id)游戏资源..."
        fi
        
        # 进入目标目录
        cd "$TARGET_DIR1" || continue

        # 获取当前目录下所有文件和目录
        for item in *; do
            # 跳过FileManagerRecycler目录
            if [ "$item" = "FileManagerRecycler" ]; then
                continue
            fi
            
            # 删除文件或目录
            if [ -e "$item" ]; then
                echo -e "  正在删除: $item"
                rm -rf "$item"
            fi
        done
        
        if [ "$user_id" = "0" ]; then
            echo -e "✅ 主应用游戏资源清理完成"
        else
            echo -e "✅ 分身应用(路径id:$user_id)游戏资源清理完成"
        fi
        echo -e ""
    done

    # 3. 清理存储目录
    echo -e "🧹 正在清理存储目录..."
    STORAGE_PATTERN="/storage/emulated/*/Android/data/com.proximabeta.mf.uamo"
    
    storage_found=false
    for TARGET_DIR2 in $STORAGE_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR2" ]; then
            continue
        fi
        
        storage_found=true
        
        # 提取存储路径信息
        storage_path=$(echo -e "$TARGET_DIR2" | cut -d'/' -f4)
        
        echo -e "🧹 正在清理存储目录..."
        
        # 进入目标目录
        cd "$TARGET_DIR2" || continue

        # 获取当前目录下所有文件和目录
        for item in *; do
            # 跳过files目录
            if [ "$item" = "files" ]; then
                continue
            fi
            
            # 删除文件或目录
            if [ -e "$item" ]; then
                echo -e "  正在删除: $item"
                rm -rf "$item"
            fi
        done
        
        echo -e "✅ 存储目录清理完成"
        echo -e ""
    done
    
    if [ "$storage_found" = false ]; then
        echo -e "⚠️ 未找到存储目录"
    fi

    # 4. 强制清理files目录内容
    echo -e "🧹 正在强制清理目录..."
    for TARGET_DIR in $TARGET_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        # 提取用户ID
        user_id=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        TARGET_DIR1="$TARGET_DIR/files"
        
        # 检查目标目录是否存在
        if [ ! -d "$TARGET_DIR1" ]; then
            if [ "$user_id" = "0" ]; then
                echo -e "⚠️ 主应用目录不存在，已跳过"
            else
                echo -e "⚠️ 分身应用(路径id:$user_id)目录不存在，已跳过"
            fi
            continue
        fi
        
        if [ "$user_id" = "0" ]; then
            echo -e "🧹 正在强制清理主应用目录..."
        else
            echo -e "🧹 正在强制清理分身应用(路径id:$user_id)目录..."
        fi
        
        # 删除files目录下的所有内容
        rm -rf "$TARGET_DIR1"/*
        
        if [ "$user_id" = "0" ]; then
            echo -e "✅ 主应用强制清理完成"
        else
            echo -e "✅ 分身应用(路径id:$user_id)强制清理完成"
        fi
        echo -e ""
    done

    clear
    echo -e "------------------------------------------------"
    echo -e "🎉 暗区突围(国际服)清理完成！"
    echo -e "📝 清理列表："
    if [ "$found_main" = true ]; then
        echo -e "   • 主应用 ✅"
    fi
    if [ "$found_clones" = true ]; then
        echo -e "   • 分身应用(路径id:$user_id) ✅"
    fi
    echo -e "------------------------------------------------"
    sleep 1
    echo -e ""
}

while true; do
    echo -n "清理后需重新登录，是否继续？[y/n]"
    read choice
    case "$choice" in
        y|Y)
            echo -e "${YELLOW}正在清理...${NC}"
            sleep 0.5
            uamo
            break
            ;;
        n|N|"")
            echo -e "${GREEN}已取消清理${NC}"
            sleep 2
            clear
            break
            ;;
        *)
            echo -e "${RED}无效输入，请输入 y(继续) 或 n(取消)${NC}"
            ;;
    esac
done

sleep 1
echo -e ""
echo -e " 1) 暗区突围(国服)
 2) 暗区突围(国际服)
 3) 暗区突围(台服)
 4) 暗区突围(越南服)
 5) 返回"
;;

"暗区突围(台服)")
clear
kbinstaller() {
    clear
    # 目标目录模式
    TARGET_PATTERN="/data/user/*/com.tw.mf.uamo.kbinstaller"
    
    # 检查是否存在匹配的目录
    if ! ls -d $TARGET_PATTERN >/dev/null 2>&1; then
        echo -e "❌错误：暗区突围未安装！"
        exit 1
    fi
    
    # 标志变量
    found_main=false
    found_clones=false
    
    # 先检查主应用和分身
    for TARGET_DIR in $TARGET_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        # 提取用户ID
        user_id=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        if [ "$user_id" = "0" ]; then
            found_main=true
        else
            found_clones=true
        fi
    done
    
    # 输出检查结果
    if [ "$found_main" = true ]; then
        echo -e "✅ 已找到主应用"
    fi
    if [ "$found_clones" = true ]; then
        echo -e "✅ 已找到分身应用"
    fi
    
    echo -e ""
    
    # 1. 清理应用数据目录
    echo -e "🧹 正在清理应用数据..."
    for TARGET_DIR in $TARGET_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        # 提取用户ID
        user_id=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        if [ "$user_id" = "0" ]; then
            echo -e "🧹 正在清理主应用数据..."
        else
            echo -e "🧹 正在清理分身应用(路径id:$user_id)数据..."
        fi
        
        # 进入目标目录
        cd "$TARGET_DIR" || continue
        
        # 获取当前目录下所有文件和目录
        for item in *; do
            # 跳过files目录
            if [ "$item" = "files" ]; then
                continue
            fi
            
            # 删除文件或目录
            if [ -e "$item" ]; then
                echo -e "  正在删除: $item"
                rm -rf "$item"
            fi
        done
        
        if [ "$user_id" = "0" ]; then
            echo -e "✅ 主应用数据清理完成"
        else
            echo -e "✅ 分身应用(路径id:$user_id)数据清理完成"
        fi
        echo -e ""
    done

    # 2. 清理游戏资源文件
    echo -e "🧹 正在清理游戏资源文件..."
    for TARGET_DIR in $TARGET_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        # 提取用户ID
        user_id=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        TARGET_DIR1="$TARGET_DIR/files"
        
        # 检查目标目录是否存在
        if [ ! -d "$TARGET_DIR1" ]; then
            if [ "$user_id" = "0" ]; then
                echo -e "⚠️ 主应用未下载游戏资源，已跳过"
                sleep 1
            else
                echo -e "⚠️ 分身应用(路径id:$user_id)未下载游戏资源，已跳过"
                sleep 1
            fi
            continue
        fi
        
        if [ "$user_id" = "0" ]; then
            echo -e "🧹 正在清理主应用游戏资源..."
        else
            echo -e "🧹 正在清理分身应用(路径id:$user_id)游戏资源..."
        fi
        
        # 进入目标目录
        cd "$TARGET_DIR1" || continue

        # 获取当前目录下所有文件和目录
        for item in *; do
            # 跳过FileManagerRecycler目录
            if [ "$item" = "FileManagerRecycler" ]; then
                continue
            fi
            
            # 删除文件或目录
            if [ -e "$item" ]; then
                echo -e "  正在删除: $item"
                rm -rf "$item"
            fi
        done
        
        if [ "$user_id" = "0" ]; then
            echo -e "✅ 主应用游戏资源清理完成"
        else
            echo -e "✅ 分身应用(路径id:$user_id)游戏资源清理完成"
        fi
        echo -e ""
    done

    # 3. 清理存储目录
    echo -e "🧹 正在清理存储目录..."
    STORAGE_PATTERN="/storage/emulated/*/Android/data/com.tw.mf.uamo.kbinstaller"
    
    storage_found=false
    for TARGET_DIR2 in $STORAGE_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR2" ]; then
            continue
        fi
        
        storage_found=true
        
        # 提取存储路径信息
        storage_path=$(echo -e "$TARGET_DIR2" | cut -d'/' -f4)
        
        echo -e "🧹 正在清理存储目录..."
        
        # 进入目标目录
        cd "$TARGET_DIR2" || continue

        # 获取当前目录下所有文件和目录
        for item in *; do
            # 跳过files目录
            if [ "$item" = "files" ]; then
                continue
            fi
            
            # 删除文件或目录
            if [ -e "$item" ]; then
                echo -e "  正在删除: $item"
                rm -rf "$item"
            fi
        done
        
        echo -e "✅ 存储目录清理完成"
        echo -e ""
    done
    
    if [ "$storage_found" = false ]; then
        echo -e "⚠️ 未找到存储目录"
    fi

    # 4. 强制清理files目录内容
    echo -e "🧹 正在强制清理目录..."
    for TARGET_DIR in $TARGET_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        # 提取用户ID
        user_id=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        TARGET_DIR1="$TARGET_DIR/files"
        
        # 检查目标目录是否存在
        if [ ! -d "$TARGET_DIR1" ]; then
            if [ "$user_id" = "0" ]; then
                echo -e "⚠️ 主应用目录不存在，已跳过"
            else
                echo -e "⚠️ 分身应用(路径id:$user_id)目录不存在，已跳过"
            fi
            continue
        fi
        
        if [ "$user_id" = "0" ]; then
            echo -e "🧹 正在强制清理主应用目录..."
        else
            echo -e "🧹 正在强制清理分身应用(路径id:$user_id)目录..."
        fi
        
        # 删除files目录下的所有内容
        rm -rf "$TARGET_DIR1"/*
        
        if [ "$user_id" = "0" ]; then
            echo -e "✅ 主应用强制清理完成"
        else
            echo -e "✅ 分身应用(路径id:$user_id)强制清理完成"
        fi
        echo -e ""
    done

    clear
    echo -e "------------------------------------------------"
    echo -e "🎉 暗区突围(台服)清理完成！"
    echo -e "📝 清理列表："
    if [ "$found_main" = true ]; then
        echo -e "   • 主应用 ✅"
    fi
    if [ "$found_clones" = true ]; then
        echo -e "   • 分身应用(路径id:$user_id) ✅"
    fi
    echo -e "------------------------------------------------"
    sleep 1
    echo -e ""
}

while true; do
    echo -n "清理后需重新登录，是否继续？[y/n]"
    read choice
    case "$choice" in
        y|Y)
            echo -e "${YELLOW}正在清理...${NC}"
            sleep 0.5
            kbinstaller
            break
            ;;
        n|N|"")
            echo -e "${GREEN}已取消清理${NC}"
            sleep 2
            clear
            break
            ;;
        *)
            echo -e "${RED}无效输入，请输入 y(继续) 或 n(取消)${NC}"
            ;;
    esac
done

sleep 1
echo -e ""
echo -e " 1) 暗区突围(国服)
 2) 暗区突围(国际服)
 3) 暗区突围(台服)
 4) 暗区突围(越南服)
 5) 返回"
;;

"暗区突围(越南服)")
clear
uamo_vng() {
    clear
    # 目标目录模式
    TARGET_PATTERN="/data/user/*/com.vng.mf.uamo"
    
    # 检查是否存在匹配的目录
    if ! ls -d $TARGET_PATTERN >/dev/null 2>&1; then
        echo -e "❌错误：暗区突围未安装！"
        exit 1
    fi
    
    # 标志变量
    found_main=false
    found_clones=false
    
    # 先检查主应用和分身
    for TARGET_DIR in $TARGET_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        # 提取用户ID
        user_id=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        if [ "$user_id" = "0" ]; then
            found_main=true
        else
            found_clones=true
        fi
    done
    
    # 输出检查结果
    if [ "$found_main" = true ]; then
        echo -e "✅ 已找到主应用"
    fi
    if [ "$found_clones" = true ]; then
        echo -e "✅ 已找到分身应用"
    fi
    
    echo -e ""
    
    # 1. 清理应用数据目录
    echo -e "🧹 正在清理应用数据..."
    for TARGET_DIR in $TARGET_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        # 提取用户ID
        user_id=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        if [ "$user_id" = "0" ]; then
            echo -e "🧹 正在清理主应用数据..."
        else
            echo -e "🧹 正在清理分身应用(路径id:$user_id)数据..."
        fi
        
        # 进入目标目录
        cd "$TARGET_DIR" || continue
        
        # 获取当前目录下所有文件和目录
        for item in *; do
            # 跳过files目录
            if [ "$item" = "files" ]; then
                continue
            fi
            
            # 删除文件或目录
            if [ -e "$item" ]; then
                echo -e "  正在删除: $item"
                rm -rf "$item"
            fi
        done
        
        if [ "$user_id" = "0" ]; then
            echo -e "✅ 主应用数据清理完成"
        else
            echo -e "✅ 分身应用(路径id:$user_id)数据清理完成"
        fi
        echo -e ""
    done

    # 2. 清理游戏资源文件
    echo -e "🧹 正在清理游戏资源文件..."
    for TARGET_DIR in $TARGET_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        # 提取用户ID
        user_id=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        TARGET_DIR1="$TARGET_DIR/files"
        
        # 检查目标目录是否存在
        if [ ! -d "$TARGET_DIR1" ]; then
            if [ "$user_id" = "0" ]; then
                echo -e "⚠️ 主应用未下载游戏资源，已跳过"
                sleep 1
            else
                echo -e "⚠️ 分身应用(路径id:$user_id)未下载游戏资源，已跳过"
                sleep 1
            fi
            continue
        fi
        
        if [ "$user_id" = "0" ]; then
            echo -e "🧹 正在清理主应用游戏资源..."
        else
            echo -e "🧹 正在清理分身应用(路径id:$user_id)游戏资源..."
        fi
        
        # 进入目标目录
        cd "$TARGET_DIR1" || continue

        # 获取当前目录下所有文件和目录
        for item in *; do
            # 跳过FileManagerRecycler目录
            if [ "$item" = "FileManagerRecycler" ]; then
                continue
            fi
            
            # 删除文件或目录
            if [ -e "$item" ]; then
                echo -e "  正在删除: $item"
                rm -rf "$item"
            fi
        done
        
        if [ "$user_id" = "0" ]; then
            echo -e "✅ 主应用游戏资源清理完成"
        else
            echo -e "✅ 分身应用(路径id:$user_id)游戏资源清理完成"
        fi
        echo -e ""
    done

    # 3. 清理存储目录
    echo -e "🧹 正在清理存储目录..."
    STORAGE_PATTERN="/storage/emulated/*/Android/data/com.vng.mf.uamo"
    
    storage_found=false
    for TARGET_DIR2 in $STORAGE_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR2" ]; then
            continue
        fi
        
        storage_found=true
        
        # 提取存储路径信息
        storage_path=$(echo -e "$TARGET_DIR2" | cut -d'/' -f4)
        
        echo -e "🧹 正在清理存储目录..."
        
        # 进入目标目录
        cd "$TARGET_DIR2" || continue

        # 获取当前目录下所有文件和目录
        for item in *; do
            # 跳过files目录
            if [ "$item" = "files" ]; then
                continue
            fi
            
            # 删除文件或目录
            if [ -e "$item" ]; then
                echo -e "  正在删除: $item"
                rm -rf "$item"
            fi
        done
        
        echo -e "✅ 存储目录清理完成"
        echo -e ""
    done
    
    if [ "$storage_found" = false ]; then
        echo -e "⚠️ 未找到存储目录"
    fi

    # 4. 强制清理files目录内容
    echo -e "🧹 正在强制清理目录..."
    for TARGET_DIR in $TARGET_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        # 提取用户ID
        user_id=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        TARGET_DIR1="$TARGET_DIR/files"
        
        # 检查目标目录是否存在
        if [ ! -d "$TARGET_DIR1" ]; then
            if [ "$user_id" = "0" ]; then
                echo -e "⚠️ 主应用目录不存在，已跳过"
            else
                echo -e "⚠️ 分身应用(路径id:$user_id)目录不存在，已跳过"
            fi
            continue
        fi
        
        if [ "$user_id" = "0" ]; then
            echo -e "🧹 正在强制清理主应用目录..."
        else
            echo -e "🧹 正在强制清理分身应用(路径id:$user_id)目录..."
        fi
        
        # 删除files目录下的所有内容
        rm -rf "$TARGET_DIR1"/*
        
        if [ "$user_id" = "0" ]; then
            echo -e "✅ 主应用强制清理完成"
        else
            echo -e "✅ 分身应用(路径id:$user_id)强制清理完成"
        fi
        echo -e ""
    done

    clear
    echo -e "------------------------------------------------"
    echo -e "🎉 暗区突围(越南服)清理完成！"
    echo -e "📝 清理列表："
    if [ "$found_main" = true ]; then
        echo -e "   • 主应用 ✅"
    fi
    if [ "$found_clones" = true ]; then
        echo -e "   • 分身应用(路径id:$user_id) ✅"
    fi
    echo -e "------------------------------------------------"
    sleep 1
    echo -e ""
}

while true; do
    echo -n "清理后需重新登录，是否继续？[y/n]"
    read choice
    case "$choice" in
        y|Y)
            echo -e "${YELLOW}正在清理...${NC}"
            sleep 0.5
            uamo_vng
            break
            ;;
        n|N|"")
            echo -e "${GREEN}已取消清理${NC}"
            sleep 2
            clear
            break
            ;;
        *)
            echo -e "${RED}无效输入，请输入 y(继续) 或 n(取消)${NC}"
            ;;
    esac
done

sleep 1
echo -e " 1) 暗区突围(国服)
 2) 暗区突围(国际服)
 3) 暗区突围(台服)
 4) 暗区突围(越南服)
 5) 返回"
;;

"返回")
clear
echo -e " 1) 王者清理(游戏前)
 2) 和平清理(游戏前)
 3) CF手游清理(游戏前)
 4) 三角洲三服清理(游戏前)
 5) 暗区四服清理(游戏前)
 6) 瓦手游清理(游戏前)
 7) 使命手游清理(游戏前)
 8) 过设备标记(腾讯通用)
 9) 修改序列号
10) 重置防火墙
11) 返回"
break
;;

*) 
echo -e "\033[33m无效的选项\033[0m";;
esac
done
;;

"瓦手游清理(游戏前)")
clear
codev() {
    clear
    # 目标目录模式
    TARGET_PATTERN="/data/user/*/com.tencent.tmgp.codev"
    
    # 检查是否存在匹配的目录
    if ! ls -d $TARGET_PATTERN >/dev/null 2>&1; then
        echo -e "❌错误：无畏契约未安装！"
        exit 1
    fi
    
    # 标志变量
    found_main=false
    found_clones=false
    
    # 先检查主应用和分身
    for TARGET_DIR in $TARGET_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        # 提取用户ID
        user_id=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        if [ "$user_id" = "0" ]; then
            found_main=true
        else
            found_clones=true
        fi
    done
    
    # 输出检查结果
    if [ "$found_main" = true ]; then
        echo -e "✅ 已找到主应用"
    fi
    if [ "$found_clones" = true ]; then
        echo -e "✅ 已找到分身应用"
    fi
    
    echo -e ""
    
    # 1. 清理应用数据目录
    echo -e "🧹 正在清理应用数据目录..."
    for TARGET_DIR in $TARGET_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        # 提取用户ID
        user_id=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        if [ "$user_id" = "0" ]; then
            echo -e "🧹 正在清理主应用数据..."
        else
            echo -e "🧹 正在清理分身应用(路径id:$user_id)数据..."
        fi
        
        # 删除应用数据目录下的所有内容
        rm -rf "$TARGET_DIR"/*
        
        if [ "$user_id" = "0" ]; then
            echo -e "✅ 主应用数据清理完成"
        else
            echo -e "✅ 分身应用(路径id:$user_id)数据清理完成"
        fi
        echo -e ""
    done

    # 2. 清理存储目录
    echo -e "🧹 正在清理存储目录..."
    STORAGE_PATTERN="/storage/emulated/*/Android/data/com.tencent.tmgp.codev"
    
    storage_found=false
    for TARGET_DIR in $STORAGE_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        storage_found=true
        
        # 提取存储路径信息
        storage_path=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        echo -e "🧹 正在清理存储目录..."
        
        # 进入目标目录
        cd "$TARGET_DIR" || continue

        # 获取当前目录下所有文件和目录
        for item in *; do
            # 跳过files目录
            if [ "$item" = "files" ]; then
                continue
            fi
            
            # 删除文件或目录
            if [ -e "$item" ]; then
                echo -e "  正在删除: $item"
                rm -rf "$item"
            fi
        done
        
        echo -e "✅ 存储目录清理完成"
        echo -e ""
    done
    
    if [ "$storage_found" = false ]; then
        echo -e "⚠️ 未找到存储目录"
    fi

    # 3. 清理存储游戏资源
    echo -e "🧹 正在清理存储游戏资源..."
    for TARGET_DIR in $STORAGE_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        TARGET_DIR1="$TARGET_DIR/files"
        
        # 检查目标目录是否存在
        if [ ! -d "$TARGET_DIR1" ]; then
            echo -e "⚠️ 未找到游戏资源目录，已跳过"
            continue
        fi
        
        echo -e "🧹 正在清理游戏资源..."
        
        # 进入目标目录
        cd "$TARGET_DIR1" || continue

        # 获取当前目录下所有文件和目录
        for item in *; do
            # 跳过UE4Game目录
            if [ "$item" = "UE4Game" ]; then
                continue
            fi
            
            # 删除文件或目录
            if [ -e "$item" ]; then
                echo -e "  正在删除: $item"
                rm -rf "$item"
            fi
        done
        
        echo -e "✅ 游戏资源清理完成"
        echo -e ""
    done

    # 4. 清理CodeV目录
    echo -e "🧹 正在清理目录..."
    for TARGET_DIR in $STORAGE_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        TARGET_DIR2="$TARGET_DIR/files/UE4Game/CodeV"
        
        # 检查目标目录是否存在
        if [ ! -d "$TARGET_DIR2" ]; then
            echo -e "⚠️ 未找到目录，已跳过"
            continue
        fi
        
        echo -e "🧹 正在清理目录..."
        
        # 进入目标目录
        cd "$TARGET_DIR2" || continue

        # 获取当前目录下所有文件和目录
        for item in *; do
            # 跳过CodeV目录
            if [ "$item" = "CodeV" ]; then
                continue
            fi
            
            # 删除文件或目录
            if [ -e "$item" ]; then
                echo -e "  正在删除: $item"
                rm -rf "$item"
            fi
        done
        
        echo -e "✅ 目录清理完成"
        echo -e ""
    done

    clear
    echo -e "------------------------------------------------"
    echo -e "🎉 无畏契约清理完成！"
    echo -e "📝 清理列表："
    if [ "$found_main" = true ]; then
        echo -e "   • 主应用 ✅"
    fi
    if [ "$found_clones" = true ]; then
        echo -e "   • 分身应用(路径id:$user_id) ✅"
    fi

    echo -e "✅ 瓦手游清理(游戏前)完成"
    echo -e "------------------------------------------------"
    sleep 1
}

while true; do
    echo -n "清理后需重新登录，是否继续？[y/n]"
    read choice
    case "$choice" in
        y|Y)
            echo -e "${YELLOW}正在清理...${NC}"
            sleep 0.5
            codev
            break
            ;;
        n|N|"")
            echo -e "${GREEN}已取消清理${NC}"
            sleep 2
            clear
            break
            ;;
        *)
            echo -e "${RED}无效输入，请输入 y(继续) 或 n(取消)${NC}"
            ;;
    esac
done

sleep 1
echo -e " 1) 王者清理(游戏前)
 2) 和平清理(游戏前)
 3) CF手游清理(游戏前)
 4) 三角洲三服清理(游戏前)
 5) 暗区四服清理(游戏前)
 6) 瓦手游清理(游戏前)
 7) 使命手游清理(游戏前)
 8) 过设备标记(腾讯通用)
 9) 修改序列号
10) 重置防火墙
11) 返回"
;;

"使命手游清理(游戏前)")
clear
cod_clean() {
    clear
    # 目标目录模式
    TARGET_PATTERN="/data/user/*/com.tencent.tmgp.cod"
    
    # 检查是否存在匹配的目录
    if ! ls -d $TARGET_PATTERN >/dev/null 2>&1; then
        echo -e "❌错误：使命召唤手游未安装！"
        exit 1
    fi
    
    # 标志变量
    found_main=false
    found_clones=false
    
    # 先检查主应用和分身
    for TARGET_DIR in $TARGET_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        # 提取用户ID
        user_id=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        if [ "$user_id" = "0" ]; then
            found_main=true
        else
            found_clones=true
        fi
    done
    
    # 输出检查结果
    if [ "$found_main" = true ]; then
        echo -e "✅ 已找到主应用"
        sleep 1
    fi
    if [ "$found_clones" = true ]; then
        echo -e "✅ 已找到分身应用"
        sleep 1
    fi
    
    echo -e ""
    
    # 1. 清理应用数据目录（删除所有内容）
    echo -e "🧹 正在清理应用数据目录..."
    for TARGET_DIR in $TARGET_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        # 提取用户ID
        user_id=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        if [ "$user_id" = "0" ]; then
            echo -e "🧹 正在清理主应用数据..."
        else
            echo -e "🧹 正在清理分身应用(路径id:$user_id)数据..."
        fi
        
        # 删除应用数据目录下的所有内容
        rm -rf "$TARGET_DIR"/*
        
        if [ "$user_id" = "0" ]; then
            echo -e "✅ 主应用数据清理完成"
        else
            echo -e "✅ 分身应用(路径id:$user_id)数据清理完成"
        fi
        echo -e ""
    done

    # 2. 清理存储目录（保留Config、ExtractQts、PufferQts）
    echo -e "🧹 正在清理存储目录"
    STORAGE_PATTERN="/storage/emulated/*/Android/data/com.tencent.tmgp.cod"
    
    storage_found=false
    for TARGET_DIR in $STORAGE_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        storage_found=true
        
        # 提取存储路径信息
        storage_path=$(echo -e "$TARGET_DIR" | cut -d'/' -f4)
        
        echo -e "🧹 正在清理存储目录"
        
        # 进入目标目录
        cd "$TARGET_DIR" || continue

        # 获取当前目录下所有文件和目录
        for item in *; do
            # 跳过files目录
            if [ "$item" = "files" ]; then
                continue
            fi
            
            # 删除文件或目录
            if [ -e "$item" ]; then
                echo -e "  正在删除: $item"
                rm -rf "$item"
            fi
        done
        
        echo -e "✅ 存储目录清理完成"
        echo -e ""
    done
    
    if [ "$storage_found" = false ]; then
        echo -e "⚠️ 未找到存储目录"
    fi

    # 3. 清理存储files目录（保留Config、ExtractQts、PufferQts）
    echo -e "🧹 正在清理存储目录"
    for TARGET_DIR in $STORAGE_PATTERN; do
        # 检查是否是目录
        if [ ! -d "$TARGET_DIR" ]; then
            continue
        fi
        
        TARGET_DIR1="$TARGET_DIR/files"
        
        # 检查目标目录是否存在
        if [ ! -d "$TARGET_DIR1" ]; then
            echo -e "⚠️ 未找到目录，已跳过"
            continue
        fi
        
        echo -e "🧹 正在清理目录"
        
        # 进入目标目录
        cd "$TARGET_DIR1" || continue

        # 获取当前目录下所有文件和目录
        for item in *; do
            # 跳过需要保留的目录
            if [ "$item" = "Config" ] || [ "$item" = "ExtractQts" ] || [ "$item" = "PufferQts" ]; then
                continue
            fi
            
            # 删除文件或目录
            if [ -e "$item" ]; then
                echo -e "  正在删除: $item"
                rm -rf "$item"
            fi
        done
        
        echo -e "✅目录清理完成"
        echo -e ""
    done

    clear
    echo -e "------------------------------------------------"
    echo -e "🎉 使命召唤手游清理完成！"
    echo -e "📝 清理列表："
    if [ "$found_main" = true ]; then
        echo -e "   • 主应用数据 ✅"
    fi
    if [ "$found_clones" = true ]; then
        echo -e "   • 分身应用数据(路径id:$user_id) ✅"
    fi
    echo -e "------------------------------------------------"
    sleep 1
    echo -e ""
}

while true; do
    echo -n "清理后需重新登录，是否继续？[y/n]"
    read choice
    case "$choice" in
        y|Y)
            echo -e "${YELLOW}正在清理...${NC}"
            sleep 0.5
            cod_clean
            break
            ;;
        n|N|"")
            echo -e "${GREEN}已取消清理${NC}"
            sleep 3
            clear
            break
            ;;
        *)
            echo -e "${RED}无效输入，请输入 y(继续) 或 n(取消)${NC}"
            ;;
    esac
done

sleep 1
echo -e " 1) 王者清理(游戏前)
 2) 和平清理(游戏前)
 3) CF手游清理(游戏前)
 4) 三角洲三服清理(游戏前)
 5) 暗区四服清理(游戏前)
 6) 瓦手游清理(游戏前)
 7) 使命手游清理(游戏前)
 8) 过设备标记(腾讯通用)
 9) 修改序列号
10) 重置防火墙
11) 返回"
;;

"过设备标记(腾讯通用)")
clear
TARGET_DIR0="/mnt/vendor/persist/data"

# 检查目录是否存在
if [ ! -d "$TARGET_DIR0" ]; then
    echo -e "暂不适配你的适配！"
    echo -e "天玑处理器版本在内测中，预计2.1版本适配"
    exit 1
fi

# 初始化计数器
zero_count=0
nonzero_count=0
total=0

# 使用for循环遍历
for item in "$TARGET_DIR0"/*; do
    # 处理通配符未匹配的情况
    [ -e "$item" ] || [ -L "$item" ] || continue
    
    # 获取权限
    perm=$(stat -c "%a" "$item" 2>/dev/null)
    
    if [ -n "$perm" ]; then
        if [ "$perm" = "0" ]; then
            zero_count=$((zero_count + 1))
        else
            nonzero_count=$((nonzero_count + 1))
        fi
        total=$((total + 1))
    fi
done

# 设置标签
if [ $total -eq 0 ]; then
    label="空目录"
elif [ $zero_count -eq $total ]; then
    label="开启状态"
elif [ $nonzero_count -eq $total ]; then
    label="关闭状态"
else
    label="不完整开启状态"
fi

echo -e "\033[33m################################################\033[0m"
echo -e "\033[33m提示:\033[0m"
echo -e "●开启功能后，会在本次开机无视设备标记。"
echo -e "●支持王者和平三角洲暗区，其他自测。"
echo -e "●非修改游戏内存或安装包，可安全使用。"
echo -e "●部分设备重启后功能不一定失效。"
echo -e "\033[31m使用功能可能导致系统不稳定、指纹无法使用等问题，结束游戏后建议关闭功能！\033[0m"
echo -e "\033[33m################################################\033[0m"
echo -e "当前：$label"
echo -e ""
PS3='请选择一个操作: '
options=(
    "开启                      "
    "关闭"
    "返回"
)
select opt in "${options[@]}"
do
case $opt in
"开启                      ")
clear
#7788
mark_xl() {
clear
# 定义要处理的目录
TARGET_DIR="/mnt/vendor/persist/data"

sleep 1

# 检查目录是否存在
if [ ! -d "$TARGET_DIR" ]; then
    echo -e "❌错误：持久化目录不存在"
    echo -e "请确认你是骁龙设备或未适配你的手机!"
    exit 1
fi

# 检查当前目录权限
current_perm=$(stat -c "%a" "$TARGET_DIR" 2>/dev/null)

# 如果已经是000，检查子项目
if [ "$current_perm" = "0" ] || [ "$current_perm" = "000" ]; then
    # 检查是否有子项目不是000
    has_non_zero=false
    
    # 检查子目录
    if find "$TARGET_DIR" -type d ! -perm 0 2>/dev/null | grep -q .; then
        has_non_zero=true
    fi
    
    # 检查文件
    if find "$TARGET_DIR" -type f ! -perm 0 2>/dev/null | grep -q .; then
        has_non_zero=true
    fi
    
    if [ "$has_non_zero" = "false" ]; then
        echo -e "🛡️功能已处于开启状态。"
        exit 0
    fi
fi

echo -e "正在操作..."

# 先确保能访问目录
chmod 700 "$TARGET_DIR" 2>/dev/null

# 尝试递归设置权限为000
# 注意：设置为000后，将无法访问或修改这些文件
if chmod -R 000 "$TARGET_DIR" 2>/dev/null; then
    sleep 1
    echo -e "成功"
else
    echo -e "使用方案2…"
    
    # 先设置文件权限
    find "$TARGET_DIR" -type f -exec chmod 000 {} \; 2>/dev/null
    
    # 再设置目录权限（从深层到浅层）
    find "$TARGET_DIR" -type d | sort -r | while read dir; do
        chmod 000 "$dir" 2>/dev/null
    done
fi

# 最后设置顶层目录
chmod 000 "$TARGET_DIR" 2>/dev/null

# 验证设置结果
echo -e "正在验证…"
sleep 1
clear

echo -e "[✅完成]功能已开启"
echo -e ""
}

mark_tj() {
clear
echo -e "功能在内测中，正式版本未更新！"
echo -e "预计2.1版本更新"
exit 0
}

processor() {
sleep 1.5
clear
# 询问处理器
while true; do
    echo -e "1.高通骁龙"
    echo -e "2.联发科天玑"
    echo -e "q.退出"
    echo -n "请选择您设备的处理器[1/2/q]: "
    read -r choice
    
    case "$choice" in
        [1]* )
            mark_xl
            break
            ;;
        [2]* )
            mark_tj
            break
            ;;
        [Qq]* )
            clear
            echo -e "${GREEN}退出${RESET}"
            sleep 0.5
            break
            ;;
        * )
            clear
            echo -e "❌ 请输入1、2或q"
            echo -e ""
            ;;
    esac
done
}

while true; do
    echo -e "\033[31m使用功能可能导致系统不稳定、指纹无法使用等问题，结束游戏后建议关闭功能！\033[0m"
    echo -n "已阅读？[y/n] "
    read choice
    case "$choice" in
        y|Y)
            processor
            break
            ;;
        n|N|"")
            echo -e "${GREEN}已取消操作${NC}"
            sleep 1
            clear
            break
            ;;
        *)
            clear
            echo -e "${RED}无效输入，请输入 y(已阅读) 或 n(不接受)${NC}"
            sleep 1
            ;;
    esac
done


sleep 2
echo -e "1) 开启
2) 关闭
3) 返回"
;;

"关闭")
clear
mark1_xl() {
clear
# 定义要检查的目录
TARGET_DIR="/mnt/vendor/persist/data"

sleep 1

# 检查目录是否存在
if [ ! -d "$TARGET_DIR" ]; then
    echo -e "错误：持久化目录不存在"
    exit 1
fi

# 查找所有权限为0的项目
zero_perm_items=$(find "$TARGET_DIR" -type f -perm 0 2>/dev/null | wc -l)
zero_perm_items=$((zero_perm_items + $(find "$TARGET_DIR" -type d -perm 0 2>/dev/null | wc -l)))

# 也检查顶层目录
if [ -d "$TARGET_DIR" ]; then
    dir_perm=$(stat -c "%a" "$TARGET_DIR" 2>/dev/null)
    if [ "$dir_perm" = "0" ] || [ -z "$dir_perm" ]; then
        # 如果是0或无法获取，也计入
        zero_perm_items=$((zero_perm_items + 1))
    fi
fi

# 如果所有项目权限都不为0，则提示未开启并退出
if [ "$zero_perm_items" -eq 0 ]; then
    echo -e "🛡️功能未开启。"
    exit 0
fi

# 确保顶层目录有访问权限
chmod 700 "$TARGET_DIR" 2>/dev/null

# 使用递归chmod（如果系统支持）
if chmod -R 700 "$TARGET_DIR" 2>/dev/null; then
    sleep 0.5
    echo -e "完成"
else
    # 先处理目录，确保能访问
    find "$TARGET_DIR" -type d -exec chmod 700 {} \; 2>/dev/null
    # 再处理文件
    find "$TARGET_DIR" -type f -exec chmod 700 {} \; 2>/dev/null
fi

# 验证修复结果
echo -e "正在验证结果…"
remaining_zero_items=$(find "$TARGET_DIR" ! -perm 700 2>/dev/null | wc -l)

sleep 1
clear

if [ "$remaining_zero_items" -eq 0 ]; then
    clear
    echo -e "[✅完成]已关闭功能"
else
    clear
    echo -e "[⚠️部分完成] 已尽力修复权限"
    echo -e "仍有 $remaining_zero_items 个项目失败！"
fi
}

mark1_tj() {
clear
echo -e "功能在内测中，正式版本未更新！"
echo -e "预计2.1版本更新"
exit 0
}

# 询问处理器
while true; do
    echo -e "1.高通骁龙"
    echo -e "2.联发科天玑"
    echo -e "q.退出"
    echo -n "请选择您设备的处理器[1/2/q]: "
    read -r choice
    
    case "$choice" in
        [1]* )
            mark1_xl
            break
            ;;
        [2]* )
            mark1_tj
            break
            ;;
        [Qq]* )
            clear
            echo -e "${GREEN}退出${RESET}"
            sleep 0.5
            break
            ;;
        * )
            clear
            echo -e "❌ 请输入1、2或q"
            echo -e ""
            ;;
    esac
done

sleep 2
echo -e ""
echo -e "1) 开启
2) 关闭
3) 返回"
;;

"返回")
clear
echo -e " 1) 王者清理(游戏前)
 2) 和平清理(游戏前)
 3) CF手游清理(游戏前)
 4) 三角洲三服清理(游戏前)
 5) 暗区四服清理(游戏前)
 6) 瓦手游清理(游戏前)
 7) 使命手游清理(游戏前)
 8) 过设备标记(腾讯通用)
 9) 修改序列号
10) 重置防火墙
11) 返回"
break
;;

*) 
echo -e "\033[33m无效的选项\033[0m";;
esac
done
;;

"修改序列号")
clear
PS3='请选择一个操作: '
options=(
    "随机序列号                      "
    "自定义序列号"
    "恢复序列号"
    "返回"
)
select opt in "${options[@]}"
do
case $opt in
"随机序列号                      ")
clear
echo -e "\033[33m################################################\033[0m"
echo -e "\033[1;31m注意：\033[0m"
echo -e "\033[31m●部分机型执行后可能出现系统错误、手机功能失效等持久性问题！\033[0m"
echo -e "\033[31m●测试一加、小米、红米无持久性问题(问题可重启恢复)，其他机型自测。\033[0m"
echo -e "\033[31m●重启无法恢复的机型，可尝试执行恢复序列号功能\033[0m"
echo -e "\033[33m################################################\033[0m"
while true; do
    echo -n "是否继续？[y/n] "
    read choice
    case "$choice" in
        y|Y)
clear
# 定义 resetprop 路径列表
RESETPROP_PATHS=(
    "/system/bin/resetprop"
    "/system_ext/bin/resetprop"
    "/product/bin/resetprop"
    "/data/adb/ksu/bin/resetprop"
    "/data/adb/ap/bin/resetprop"
)

# 初始化 resetprop 路径变量
RESETPROP_BIN=""

# 查找 resetprop
for path in "${RESETPROP_PATHS[@]}"; do
    if [ -f "$path" ] && [ -x "$path" ]; then
        RESETPROP_BIN="$path"
        case "$path" in
            "/system/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别德尔塔/金丝雀"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            "/system_ext/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别阿尔法(旧版)"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            "/product/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别Magisk/阿尔法(新版)"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            "/data/adb/ksu/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别KernelSU/Wild KSU/SukiSU Ultra"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            "/data/adb/ap/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别APatch/FolkPatch"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            *)
                # 理论上不会进入这里
                echo -e "🚫 暂未适配你的设备"
                echo -e "请网盘下载查找sh并执行，然后截屏发给我。"
                echo -e "酷安SukiSU土豆"
                exit 1
                ;;
        esac
        break
    fi
done

# 检查是否找到 resetprop
if [ -z "$RESETPROP_BIN" ]; then
    echo -e "❌ 错误：未找到可执行的resetprop"
    echo -e "🚫 暂未适配你的设备。"
    echo -e "请网盘下载查找sh并执行，然后截屏发给我"
    echo -e "酷安SukiSU土豆"
    exit 1
fi

RESETPROP_PATH=$RESETPROP_BIN

# 获取当前序列号
CURRENT_ID=$("$RESETPROP_PATH" ro.serialno 2>/dev/null)

# 检测是否获取到了序列号
if [ -z "$CURRENT_ID" ]; then
    echo -e "❌错误：无法获取当前序列号！"
    exit 1
fi

snmod() {
# 基于当前ID的每一位字符类型生成新ID
LENGTH=${#CURRENT_ID}
NAME=""

# 定义字符集
DIGITS="0123456789"
LOWERCASE="abcdefghijklmnopqrstuvwxyz"
UPPERCASE="ABCDEFGHIJKLMNOPQRSTUVWXYZ"

# 逐位生成相同类型但不同的字符
i=0
while [ $i -lt $LENGTH ]; do
    current_char="${CURRENT_ID:$i:1}"
    
    # 根据当前字符类型选择相应的字符集
    case "$current_char" in
        [0-9])
            # 数字
            while true; do
                random_num=$(date +%N | cut -c1-3) 2>/dev/null || random_num=$(date +%s)
                pos=$(( random_num % 10 ))
                new_char=$(echo -e "$DIGITS" | cut -c$((pos+1)))
                # 确保新字符与当前字符不同
                if [ "$new_char" != "$current_char" ]; then
                    NAME="$NAME$new_char"
                    break
                fi
            done
            ;;
        [a-z])
            # 小写字母
            while true; do
                random_num=$(date +%N | cut -c1-3) 2>/dev/null || random_num=$(date +%s)
                pos=$(( random_num % 26 ))
                new_char=$(echo -e "$LOWERCASE" | cut -c$((pos+1)))
                if [ "$new_char" != "$current_char" ]; then
                    NAME="$NAME$new_char"
                    break
                fi
            done
            ;;
        [A-Z])
            # 大写字母
            while true; do
                random_num=$(date +%N | cut -c1-3) 2>/dev/null || random_num=$(date +%s)
                pos=$(( random_num % 26 ))
                new_char=$(echo -e "$UPPERCASE" | cut -c$((pos+1)))
                if [ "$new_char" != "$current_char" ]; then
                    NAME="$NAME$new_char"
                    break
                fi
            done
            ;;
        *)
            # 其他字符（保持原样）
            NAME="$NAME$current_char"
            ;;
    esac
    i=$((i + 1))
done

clear
echo -e "⏳ 正在设置新序列号..."
sleep 1
# 使用 resetprop 设置 ro.serialno
if [ -n "$FLAG" ]; then
    "$RESETPROP_PATH" $FLAG ro.serialno "$NAME"
else
    "$RESETPROP_PATH" ro.serialno "$NAME"
fi

sleep 0.5

# 验证设置是否成功
NEW_ID=$("$RESETPROP_PATH" ro.serialno 2>/dev/null)
if [ "$NEW_ID" = "$NAME" ]; then
    clear
    echo -e "------------------------------------------------"
    echo -e "✅ 已成功${MODE}设置序列号:${GREEN}$NAME${RESET}"
    
    if [ "$MODE" = "永久" ]; then
        echo -e "🔒 序列号已持久化，永久生效"
        echo -e "------------------------------------------------"
        echo -e ""
    else
        echo -e "🔓 序列号已临时设置，重启后将恢复原值"
        echo -e "------------------------------------------------"
        echo -e ""
    fi
else
    echo -e "❌ 设置序列号失败"
    exit 1
fi
}

service() {
# 检查地址
SERVICES=/data/adb/service.d

if [ -d "$SERVICES" ]; then
    clear
    echo -e "已找到写入地址"
    sleep 1
else
    clear
    mkdir "$SERVICES"
    chmod 755 "$SERVICES"
    echo -e "已找到写入地址"
    sleep 1
fi

# 基于当前ID的每一位字符类型生成新ID
LENGTH=${#CURRENT_ID}
NAME=""

# 定义字符集
DIGITS="0123456789"
LOWERCASE="abcdefghijklmnopqrstuvwxyz"
UPPERCASE="ABCDEFGHIJKLMNOPQRSTUVWXYZ"

# 逐位生成相同类型但不同的字符
i=0
while [ $i -lt $LENGTH ]; do
    current_char="${CURRENT_ID:$i:1}"
    
    # 根据当前字符类型选择相应的字符集
    case "$current_char" in
        [0-9])
            # 数字
            while true; do
                random_num=$(date +%N | cut -c1-3) 2>/dev/null || random_num=$(date +%s)
                pos=$(( random_num % 10 ))
                new_char=$(echo -e "$DIGITS" | cut -c$((pos+1)))
                # 确保新字符与当前字符不同
                if [ "$new_char" != "$current_char" ]; then
                    NAME="$NAME$new_char"
                    break
                fi
            done
            ;;
        [a-z])
            # 小写字母
            while true; do
                random_num=$(date +%N | cut -c1-3) 2>/dev/null || random_num=$(date +%s)
                pos=$(( random_num % 26 ))
                new_char=$(echo -e "$LOWERCASE" | cut -c$((pos+1)))
                if [ "$new_char" != "$current_char" ]; then
                    NAME="$NAME$new_char"
                    break
                fi
            done
            ;;
        [A-Z])
            # 大写字母
            while true; do
                random_num=$(date +%N | cut -c1-3) 2>/dev/null || random_num=$(date +%s)
                pos=$(( random_num % 26 ))
                new_char=$(echo -e "$UPPERCASE" | cut -c$((pos+1)))
                if [ "$new_char" != "$current_char" ]; then
                    NAME="$NAME$new_char"
                    break
                fi
            done
            ;;
        *)
            # 其他字符（保持原样）
            NAME="$NAME$current_char"
            ;;
    esac
    i=$((i + 1))
done

# 服务脚本方式
SERVICE_SCRIPT="/data/adb/service.d/sukisutd_serialno.sh"

# 静默删除文件
rm -f "$SERVICE_SCRIPT"
        
# 创建服务脚本
cat > "$SERVICE_SCRIPT" << EOF
#!/system/bin/sh
# 等待系统启动完成
while [ "\$(getprop sys.boot_completed)" != "1" ]; do
    sleep 1
done

# 设置序列号
resetprop ro.serialno "$NAME"
echo -e "[Serial Changer] Set serial to: $NAME"
EOF

chmod 777 "$SERVICE_SCRIPT"
        
# 立即生效
"$RESETPROP_PATH" ro.serialno "$NAME"

# 验证设置是否成功
NEW_ID=$("$RESETPROP_PATH" ro.serialno 2>/dev/null)
if [ "$NEW_ID" = "$NAME" ]; then
    echo -e "------------------------------------------------"
    echo -e "✅ 已成功${MODE}设置序列号:${GREEN}$NAME${RESET}"
    
    if [ "$MODE" = "永久" ]; then
        echo -e "🔒 序列号已持久化，永久生效"
        echo -e "------------------------------------------------"
        echo -e ""
    else
        echo -e "🔓 序列号已临时设置，重启后将恢复原值"
        echo -e "------------------------------------------------"
        echo -e ""
    fi
else
    echo -e "❌ 设置序列号失败"
    exit 1
fi
}

# 定义颜色代码
GREEN='\033[0;32m'
RESET='\033[0m' # 重置颜色

echo -e "当前序列号:${GREEN}$CURRENT_ID${RESET}"
echo -e ""

# 询问是否永久写入
while true; do
    echo -e "请选择写入方式："
    echo -e "1.永久写入（永久生效）"
    echo -e "2.临时写入（仅本次开机生效）"
    echo -e "q.退出"
    echo -n "请选择 [1/2/q]: "
    read -r choice
    
    case "$choice" in
        [1]* )
            MODE="永久"
            service
            break
            ;;
        [2]* )
            FLAG=""
            MODE="临时"
            snmod
            break
            ;;
        [Qq]* )
            clear
            echo -e "${GREEN}退出${RESET}"
            sleep 0.5
            break
            ;;
        * )
            clear
            echo -e "❌ 请输入1、2或q"
            echo -e ""
            ;;
    esac
done

sleep 2
break
;;
        n|N|"")
            clear
            echo -e "${GREEN}已取消${NC}"
            sleep 1
            clear
            break  # 跳出循环
            ;;
        *)
            echo -e "${RED}无效输入，请输入 y(重启) 或 n(不重启)${NC}"
            ;;
    esac
done

echo -e "1) 随机序列号
2) 自定义序列号
3) 恢复序列号
4) 返回"
;;

"自定义序列号")
clear
echo -e "\033[33m################################################\033[0m"
echo -e "\033[1;31m注意：\033[0m"
echo -e "\033[31m●部分机型执行后可能出现系统错误、手机功能失效等持久性问题！\033[0m"
echo -e "\033[31m●测试一加、小米、红米无持久性问题(问题可重启恢复)，其他机型自测。\033[0m"
echo -e "\033[31m●重启无法恢复的机型，可尝试执行恢复序列号功能\033[0m"
echo -e "\033[33m################################################\033[0m"
while true; do
    echo -n "是否继续？[y/n] "
    read choice
    case "$choice" in
        y|Y)
clear
# 定义 resetprop 路径列表
RESETPROP_PATHS=(
    "/system/bin/resetprop"
    "/system_ext/bin/resetprop"
    "/product/bin/resetprop"
    "/data/adb/ksu/bin/resetprop"
    "/data/adb/ap/bin/resetprop"
)

# 初始化 resetprop 路径变量
RESETPROP_BIN=""

# 查找 resetprop
for path in "${RESETPROP_PATHS[@]}"; do
    if [ -f "$path" ] && [ -x "$path" ]; then
        RESETPROP_BIN="$path"
        case "$path" in
            "/system/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别德尔塔/金丝雀"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            "/system_ext/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别阿尔法(旧版)"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            "/product/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别Magisk/阿尔法(新版)"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            "/data/adb/ksu/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别KernelSU/Wild KSU/SukiSU Ultra"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            "/data/adb/ap/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别APatch/FolkPatch"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            *)
                # 理论上不会进入这里
                echo -e "🚫 暂未适配你的设备"
                echo -e "请网盘下载查找sh并执行，然后截屏发给我。"
                echo -e "酷安SukiSU土豆"
                exit 1
                ;;
        esac
        break
    fi
done

# 检查是否找到 resetprop
if [ -z "$RESETPROP_BIN" ]; then
    echo -e "❌ 错误：未找到可执行的resetprop"
    echo -e "🚫 暂未适配你的设备。"
    echo -e "请网盘下载查找sh并执行，然后截屏发给我"
    echo -e "酷安SukiSU土豆"
    exit 1
fi

# 判断是否传入了路径
if [ $# -ge 1 ]; then
    RESETPROP_PATH="$1"
else
    RESETPROP_PATH="$RESETPROP_BIN"
fi

serialno_ls() {
"$RESETPROP_PATH" ro.serialno "$NAME"
}

serialno_yj() {
# 检查地址
SERVICES=/data/adb/service.d

if [ -d "$SERVICES" ]; then
    clear
    echo -e "已找到写入地址"
    sleep 1
else
    clear
    mkdir "$SERVICES"
    chmod 755 "$SERVICES"
    echo -e "已找到写入地址"
    sleep 1
fi

# 服务脚本方式
SERVICE_SCRIPT="/data/adb/service.d/sukisutd_serialno.sh"

# 静默删除文件
rm -f "$SERVICE_SCRIPT"
        
# 创建服务脚本
cat > "$SERVICE_SCRIPT" << EOF
#!/system/bin/sh
# 等待系统启动完成
while [ "\$(getprop sys.boot_completed)" != "1" ]; do
    sleep 1
done

# 设置序列号
resetprop ro.serialno "$NAME"
echo -e "[Serial Changer] Set serial to: $NAME"
EOF

chmod 777 "$SERVICE_SCRIPT"
        
# 立即生效
"$RESETPROP_PATH" ro.serialno "$NAME"
}

uxori() {
# 询问是否永久写入
while true; do
    echo -e "请选择写入方式："
    echo -e "1.永久写入（永久生效）"
    echo -e "2.临时写入（仅本次开机生效）"
    echo -n "请选择 [1-2]: "
    read choice
    
    case "$choice" in
        [1]* )
            MODE="永久"
            serialno_yj
            break
            ;;
        [2]* )
            FLAG=""
            MODE="临时"
            serialno_ls
            break
            ;;
        * )
            echo -e "❌ 请输入1、2或q"
            echo -e ""
            ;;
    esac
done
}

# 获取当前序列号
CURRENT_ID=$("$RESETPROP_PATH" ro.serialno 2>/dev/null)

# 显示标题和当前信息
echo -e "================================================"
echo -e "             序列号自定义工具"
echo -e "================================================"
echo -e "设备信息:"
echo -e "当前序列号$CURRENT_ID"
echo -e "当前${#CURRENT_ID}位数"

# 显示推荐信息
echo -e "------------------------------------------------"
echo -e "\033[1;31m必看说明：\033[0m"
echo -e "●推荐使用${#CURRENT_ID}位序列号，否则部分设备可能因不兼容导致系统错误。"
echo -e "●序列号通常包含字母和数字。"
echo -e "●请勿使用特殊字符或空格！"
echo -e "------------------------------------------------"
echo -e ""

# 自定义输入模式
while true; do
    echo -n "请输入新的序列号(输入q退出): "
    read NAME
    
    # 检查是否输入 q 退出
    if [ "$NAME" = "q" ] || [ "$NAME" = "Q" ]; then
        echo -e ""
        clear
        echo -e "退出"
        sleep 1
        break
    fi
    
    if [ -z "$NAME" ]; then
        echo -e "❌序列号不能为空，请重新输入"
        echo -e ""
        continue
    fi
    
    # 显示确认信息
    clear
    echo -e "当前序列号: $CURRENT_ID"
    echo -e "位数:${#CURRENT_ID}"
    echo -e ""
    echo -e "🆕新序列号: $NAME"
    echo -e "位数:${#NAME}"
    echo -e ""
    
    # 位数差异提示
    if [ ${#NAME} -ne ${#CURRENT_ID} ]; then
        echo -e "⚠️  注意: 位数与推荐不同！"
        echo -e ""
    fi
    
    echo -n "确认修改？(y/n): "
    read confirm
    
    if [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then
        clear
        uxori
        echo -e ""
        echo -e "⏳正在设置序列号..."
        sleep 1

        # 验证设置是否成功
        NEW_ID=$("$RESETPROP_PATH" ro.serialno 2>/dev/null)
        if [ "$NEW_ID" = "$NAME" ]; then
            clear
            echo -e "================================================"
            echo -e "            ✅序列号设置成功！"
        else
            clear
            echo -e "================================================"
            echo -e "❌序列号设置失败"
            echo -e "当前序列号仍为: $NEW_ID"
            echo -e "================================================"
            echo -e ""
            sleep 1
            break
        fi

        # 显示最终结果
        echo -e "================================================"
        echo -e " 修改详情:"
        echo -e "   • 写入方式: $MODE"
        echo -e "   • 原序列号: $CURRENT_ID"
        echo -e "   • 新序列号: $NEW_ID"
        echo -e "================================================"
        echo -e ""
        break
    else
        echo -e ""
        echo -e "是否重新输入？"
        echo -n "重新输入序列号？(y/n): "
        read retry
        if [ "$retry" = "y" ] || [ "$retry" = "Y" ]; then
            echo -e ""
            continue
        else
            echo -e ""
            echo -e "已取消修改"
            break
        fi
    fi
done

sleep 2
break
;;
        n|N|"")
            clear
            echo -e "${GREEN}已取消${NC}"
            sleep 1
            clear
            break  # 跳出循环
            ;;
        *)
            echo -e "${RED}无效输入，请输入 y(继续) 或 n(退出)${NC}"
            ;;
    esac
done

echo -e "1) 随机序列号
2) 自定义序列号
3) 恢复序列号
4) 返回"
;;

"恢复序列号")
clear
echo -e "提示："
echo -e "🔄恢复序列号。"
echo -e ""
PS3='请选择一个操作: '
options=(
"启用                        "
"返回")
select opt in "${options[@]}"
do
case $opt in
"启用                        ")
clear
# 定义 resetprop 路径列表
RESETPROP_PATHS=(
    "/system/bin/resetprop"
    "/system_ext/bin/resetprop"
    "/product/bin/resetprop"
    "/data/adb/ksu/bin/resetprop"
    "/data/adb/ap/bin/resetprop"
)

# 初始化 resetprop 路径变量
RESETPROP_BIN=""

# 查找 resetprop
for path in "${RESETPROP_PATHS[@]}"; do
    if [ -f "$path" ] && [ -x "$path" ]; then
        RESETPROP_BIN="$path"
        case "$path" in
            "/system/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别德尔塔/金丝雀"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            "/system_ext/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别阿尔法(旧版)"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            "/product/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别Magisk/阿尔法(新版)"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            "/data/adb/ksu/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别KernelSU/Wild KSU/SukiSU Ultra"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            "/data/adb/ap/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别APatch/FolkPatch"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                clear
                ;;
            *)
                # 理论上不会进入这里
                echo -e "🚫 暂未适配你的设备"
                echo -e "请网盘下载查找sh并执行，然后截屏发给我。"
                echo -e "酷安SukiSU土豆"
                exit 1
                ;;
        esac
        break
    fi
done

# 检查是否找到 resetprop
if [ -z "$RESETPROP_BIN" ]; then
    echo -e "❌ 错误：未找到可执行的resetprop"
    echo -e "🚫 暂未适配你的设备。"
    echo -e "请网盘下载查找sh并执行，然后截屏发给我"
    echo -e "酷安SukiSU土豆"
    exit 1
fi

DEFAULT_RESETPROP_PATH=$RESETPROP_BIN

serialno() {
# 获取当前序列号和原始序列号
CURRENT_SERIAL=$(getprop ro.serialno)
ORIGINAL_SERIAL=$(getprop ro.boot.serialno)

# 检查是否获取成功
if [ -z "$ORIGINAL_SERIAL" ]; then
    echo -e "❌ 错误：无法获取 ro.boot.serialno"
    echo -e "请尝试重启恢复序列号"
    exit 1
fi

sleep 0.5
echo -e "\033[32m当前序列号: $CURRENT_SERIAL\033[0m"
sleep 0.5
echo -e "\033[32m初始序列号: $ORIGINAL_SERIAL\033[0m"

# 比较序列号是否一致
if [ "$CURRENT_SERIAL" = "$ORIGINAL_SERIAL" ]; then
    echo -e "✅ 已是初始序列号，无需恢复。"
    exit 0
fi

# 修改 resetprop
$DEFAULT_RESETPROP_PATH ro.serialno "$ORIGINAL_SERIAL"

# 输出结果
echo -e "✅ 已$MODE方式恢复序列号"
}

restart() {
while true; do
    echo -n "是否立即重启？[y/n] "
    read choice
    case "$choice" in
        y|Y)
            echo -e "${YELLOW}正在重启设备...${NC}"
            reboot
            exit 0
            ;;
        n|N|"")
            echo -e "${GREEN}已取消重启${NC}"
            sleep 2
            clear
            break
            ;;
        *)
            echo -e "${RED}无效输入，请输入 y(重启) 或 n(不重启)${NC}"
            ;;
    esac
done
}

# 询问是否永久写入
while true; do
    echo -e "请选择恢复方式："
    echo -e "1.恢复永久写入"
    echo -e "2.恢复临时写入"
    echo -n "请选择 [1-2]: "
    read -r choice
    
    case "$choice" in
        [1]* )
            MODE="永久"
            clear
            rm -f /data/adb/service.d/sukisutd_serialno.sh
            serialno
            clear
            restart
            break
            ;;
        [2]* )
            FLAG=""
            MODE="临时"
            clear
            serialno
            break
            ;;
        * )
            echo -e "❌ 请输入1、2或q"
            echo -e ""
            ;;
    esac
done

sleep 3
echo -e ""
echo -e "提示："
echo -e "🔄恢复序列号。"
echo -e ""
echo -e "1) 启用
2) 返回"
;;

"返回")
clear
echo -e "1) 随机序列号
2) 自定义序列号
3) 恢复序列号
4) 返回"
break
;;

*) echo -e "\033[33m无效的选项\033[0m";;
esac
done
;;

"返回")
clear
echo -e " 1) 王者清理(游戏前)
 2) 和平清理(游戏前)
 3) CF手游清理(游戏前)
 4) 三角洲三服清理(游戏前)
 5) 暗区四服清理(游戏前)
 6) 瓦手游清理(游戏前)
 7) 使命手游清理(游戏前)
 8) 过设备标记(腾讯通用)
 9) 修改序列号
10) 重置防火墙
11) 返回"
break
;;

*) echo -e "\033[33m无效的选项\033[0m";;
esac
done
;;

"重置防火墙")
clear
echo -e "\033[33m################################################\033[0m"
echo -e "\033[33m提示：\033[0m"
echo -e "\033[33m用于解决使用脚本型端口或拦截导致的临时性网络配置异常。\033[0m"
echo -e "\033[33m################################################\033[0m"
echo -e ""
PS3='请选择一个操作: '
options=(
    "开启                         "
    "返回"
)
select opt in "${options[@]}"
do
case $opt in
"开启                         ")
clear
# 重置 iptables 规则
echo -e "正在重置防火墙…"

# 1. 清空所有规则
iptables -F           # 清空 filter 表
iptables -t nat -F    # 清空 nat 表
iptables -t mangle -F # 清空 mangle 表
iptables -t raw -F    # 清空 raw 表

# 2. 删除所有自定义链
iptables -X           # 删除 filter 表的自定义链
iptables -t nat -X    # 删除 nat 表的自定义链
iptables -t mangle -X # 删除 mangle 表的自定义链
iptables -t raw -X    # 删除 raw 表的自定义链

# 3. 恢复默认策略（允许所有流量）
iptables -P INPUT ACCEPT   # 允许所有入站流量
iptables -P OUTPUT ACCEPT  # 允许所有出站流量
iptables -P FORWARD ACCEPT # 允许所有转发流量

sleep 2
clear
echo -e "✅已重置为默认状态。"
sleep 2
clear
echo -e "1) 开启
2) 返回"
;;

"返回")
clear
echo -e " 1) 王者清理(游戏前)
 2) 和平清理(游戏前)
 3) CF手游清理(游戏前)
 4) 三角洲三服清理(游戏前)
 5) 暗区四服清理(游戏前)
 6) 瓦手游清理(游戏前)
 7) 使命手游清理(游戏前)
 8) 过设备标记(腾讯通用)
 9) 修改序列号
10) 重置防火墙
11) 返回"
break
;;

*) 
echo -e "\033[33m无效的选项\033[0m";;
esac
done
;;

"返回")
clear
echo -e "\033[1;32m主菜单\033[0m"
echo -e "1) Luna相关
2) 牛头相关
3) 春秋相关
4) Hunter相关
5) 设备属性恢复
6) 游戏相关
7) 其他功能
8) 退出"
break
;;

*) echo -e "\033[33m无效的选项\033[0m";;
esac
done
;;

"其他功能")
clear
PS3='请选择一个操作: '
options=(
    "解决隐藏应用列表Vold app data隔离导致的问题"
    "可疑进程杀死"
    "更改设备标识ID"
    "恢复实时网络"
    "修复SOTER Key"
    "关于烧录密钥"
    "SELinux模式更改"
    "返回"
)
select opt in "${options[@]}"
do
case $opt in
"解决隐藏应用列表Vold app data隔离导致的问题")
clear
echo -e "\033[33m################################################\033[0m"
echo -e "\033[33m提示:\033[0m"
echo -e "●解决隐藏应用列表Vold app data隔离导致的持久化问题，恢复VoldApp数据隔离、删除持久性属性残留。"
echo -e "●启用功能后自动生成备份。"
echo -e "●从备份恢复就是启用功能后，突然想恢复的使用。"
echo -e "●启用功能重启开机后，手机没出现问题就可以清理备份了。"
echo -e "\033[33m################################################\033[0m"
PS3='请选择一个操作: '
options=(
    "启用功能               "
    "从备份恢复"
    "清理备份"
    "返回"
)
select opt in "${options[@]}"
do
case $opt in
"启用功能               ")
clear
# 定义 resetprop 路径列表
RESETPROP_PATHS=(
    "/system/bin/resetprop"
    "/system_ext/bin/resetprop"
    "/product/bin/resetprop"
    "/data/adb/ksu/bin/resetprop"
    "/data/adb/ap/bin/resetprop"
)

# 初始化 resetprop 路径变量
RESETPROP_BIN=""

# 查找 resetprop
for path in "${RESETPROP_PATHS[@]}"; do
    if [ -f "$path" ] && [ -x "$path" ]; then
        RESETPROP_BIN="$path"
        case "$path" in
            "/system/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别德尔塔/金丝雀"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                ;;
            "/system_ext/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别阿尔法(旧版)"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                ;;
            "/product/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别Magisk/阿尔法(新版)"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                ;;
            "/data/adb/ksu/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别KernelSU/Wild KSU/SukiSU Ultra"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                ;;
            "/data/adb/ap/bin/resetprop")
                echo -e "正在遍历路径..."
                sleep 2
                echo -e "成功识别APatch/FolkPatch"
                sleep 1
                echo -e "准备开始..."
                sleep 1
                ;;
            *)
                # 理论上不会进入这里
                echo -e "🚫 暂未适配你的设备"
                echo -e "请网盘下载查找sh并执行，然后截屏发给我。"
                echo -e "酷安SukiSU土豆"
                exit 1
                ;;
        esac
        break
    fi
done

# 定义目标文件路径
TARGET_FILE="/data/property/persistent_properties"

# 检查文件是否存在
if [ ! -f "$TARGET_FILE" ]; then
    echo -e "🤔未找到持久化文件$TARGET_FILE"
    exit 1
fi

echo -e "正在临时关闭相关属性"
# 临时删除数据隔离prop属性的命令
$RESETPROP_BIN --delete persist.sys.vold_app_data_isolation_enabled
$RESETPROP_BIN --delete persist.zygote.app_data_isolation
sleep 1
# 从一个会临时生成持久性属性的目标文件中删除因使用隐藏应用列表导致出现的数据隔离的持久性属性
# 配合以上resetprop临时删除命令既可做到无风险地彻底清理prop持久性属性痕迹
# 检查是否存在目标属性
if grep -q -E 'persist\.sys\.vold_app_data_isolation_enabled|persist\.zygote\.app_data_isolation' "$TARGET_FILE"; then
    echo -e "正在删除持久化属性"
    sed -i '/persist\.sys\.vold_app_data_isolation_enabled/d; /persist\.zygote\.app_data_isolation/d' "$TARGET_FILE"
    sleep 1
    echo -e "属性删除完成"
else
    echo -e "🚫本设备没有此项问题，无需执行"
    exit 0
fi

sleep 1
echo -e "✅所有工作完成"
echo -e "已生成备份文件$TARGET_FILE.bak用于回溯此次修改！"
echo -e ""
while true; do
    echo -n "是否立即重启以完全恢复？[y/n] "
    read choice
    case "$choice" in
        y|Y)
            echo -e "${YELLOW}正在重启设备...${NC}"
            reboot
            exit 0
            ;;
        n|N|"")
            echo -e "${GREEN}已取消${NC}"
            break
            ;;
        *)
            echo -e "${RED}无效输入，请输入 y(继续) 或 n(退出)${NC}"
            ;;
    esac
done

exit 0
;;

"从备份恢复")
clear
# ------------------------
# 配置项（需与删除脚本一致）
# ------------------------
TARGET_FILE="/data/property/persistent_properties"  # 目标文件路径
BACKUP_FILE="$TARGET_FILE.bak"                      # 备份文件路径（删除脚本生成）
PROP1="persist.sys.vold_app_data_isolation_enabled"  # 需恢复的属性1
PROP2="persist.zygote.app_data_isolation"            # 需恢复的属性2

# ------------------------
# 检查备份文件是否存在
# ------------------------
if [ ! -f "$BACKUP_FILE" ]; then
    echo -e "备份文件 $BACKUP_FILE 未找到，无法恢复 🚫"
    echo -e "请确认已启用功能"
    exit 1
fi

# ------------------------
# 恢复持久化属性文件（核心步骤）
# ------------------------
echo -e "正在从备份恢复持久化配置..."
sleep 1
# 1. 覆盖恢复原始文件
cp -f "$BACKUP_FILE" "$TARGET_FILE" || {
    echo -e "错误：恢复备份文件失败，可能权限不足 ⚠️"
    exit 1
}

# 2. 验证属性是否存在（确保恢复成功）
if ! grep -qE "^($PROP1|$PROP2)=" "$TARGET_FILE"; then
    echo -e "错误：持久化文件恢复失败，属性行未找到 ⚠️"
    exit 1
else
    echo -e "✅持久化文件恢复成功"
fi
# ------------------------
# 恢复运行时属性（从备份中提取原始值）
# ------------------------
echo -e "正在恢复内存中的运行时属性..."
sleep 1
# 从备份文件中提取属性值（格式：属性=值）
PROP1_VALUE=$(grep "^$PROP1=" "$BACKUP_FILE" | cut -d'=' -f2)
PROP2_VALUE=$(grep "^$PROP2=" "$BACKUP_FILE" | cut -d'=' -f2)

# 若值存在则恢复（避免空值错误）
[ -n "$PROP1_VALUE" ] && setprop "$PROP1" "$PROP1_VALUE"
[ -n "$PROP2_VALUE" ] && setprop "$PROP2" "$PROP2_VALUE"

echo -e "已恢复属性值："
echo -e "  $PROP1=$PROP1_VALUE"
echo -e "  $PROP2=$PROP2_VALUE"

echo -e "✅已清理备份文件"
rm -f "$BACKUP_FILE"

# ------------------------
# 最终操作：重启设备（完成恢复）
# ------------------------
while true; do
    echo -n "是否立即重启以完全恢复？[y/n] "
    read choice
    case "$choice" in
        y|Y)
            echo -e "${YELLOW}正在重启设备...${NC}"
            reboot
            exit 0
            ;;
        n|N|"")
            echo -e "${GREEN}已取消重启${NC}"
            sleep 2
            clear
            break
            ;;
        *)
            echo -e "${RED}无效输入，请输入 y(重启) 或 n(不重启)${NC}"
            ;;
    esac
done

exit 0
;;

"清理备份")
clear
TARGET_FILE="/data/property/persistent_properties"  # 目标文件路径
BACKUP_FILE="$TARGET_FILE.bak"                      # 备份文件路径（删除脚本生成）

# 检查备份文件是否存在
if [ -f "$BACKUP_FILE" ]; then
    # 备份文件存在，继续执行后续代码
    echo -e "已找到备份文件"
    rm -f "$BACKUP_FILE"
    sleep 1
    echo -e "✅已清理备份文件"
    sleep 3
else
    sleep 1
    echo -e "错误：备份文件 $BACKUP_FILE 不存在"
    echo -e "可能未启用功能或已手动删除"
    exit 1
fi

clear
echo -e "\033[33m################################################\033[0m"
echo -e "\033[33m提示:\033[0m"
echo -e "●解决隐藏应用列表Vold app data隔离导致的持久化问题，恢复VoldApp数据隔离、删除持久性属性残留。"
echo -e "●启用功能后自动生成备份。"
echo -e "●回溯启用就是使用＂启用功能＂后，突然又后悔了的使用。"
echo -e "●启用功能重启开机后，手机没出现问题就可以清理备份了。"
echo -e "\033[33m################################################\033[0m"
echo -e "1) 启用功能
2) 回溯启用
3) 清理备份
4) 返回"
;;

"返回")
clear
echo -e "1) 解决隐藏应用列表Vold app data隔离导致的问题
2) 可疑进程杀死
3) 更改设备标识ID
4) 恢复实时网络
5) 修复SOTER Key
6) 关于烧录密钥
7) SELinux模式更改
8) 返回"
break
;;

*) 
echo -e "\033[33m无效的选项\033[0m";;
esac
done
;;

"可疑进程杀死")
clear

# 根据SETTING的值执行不同逻辑
if [ "$SETTING" = "扩展包环境" ]; then
clear
echo -e "正在获取所有进程..."
echo -e "找到进程总数: $(ps -A | wc -l)"
sleep 2
clear

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 退出标志
exit_script=false

# 查找包含.sh的进程
find_sh_processes() {
    processes=()
    pids=()
    count=0
    
    # 使用临时文件替代进程替换
    ps -ef | grep -E '[b]ash|\.sh' | grep -v "grep" > /tmp/ps_output.txt
    
    # 读取临时文件
    while IFS= read -r line; do
        # 提取PID和命令行
        pid=$(echo -e "$line" | awk '{print $2}')
        cmd=$(echo -e "$line" | awk '{$1=$2=""; print $0}' | sed 's/^[ \t]*//')
        
        # 检查是否包含.sh或者是bash/sh进程
        if echo -e "$cmd" | grep -q '\.sh' || echo -e "$line" | grep -q '/bin/\(bash\|sh\)' || echo -e "$cmd" | grep -q 'bash.*\.sh'; then
            count=$((count+1))
            pids+=("$pid")
            processes+=("$line")
            
            # 提取脚本路径
            script_path=$(echo -e "$cmd" | grep -o -E '[^ ]+\.sh' | head -1)
            if [ -z "$script_path" ]; then
                script_path=$(echo -e "$cmd" | grep -o -E 'bash.*[^ ]+\.sh' | sed 's/^bash[[:space:]]*//')
            fi
            
            # 显示进程信息
            printf "[%2d] %6s %-50s\n" "$count" "$pid" "${script_path:-$cmd}"
        fi
    done < /tmp/ps_output.txt
    
    # 清理临时文件
    rm -f /tmp/ps_output.txt
    
    if [ "$count" -eq 0 ]; then
        echo -e "未发现可疑进程！"
        return 1
    fi
    
    # 保存进程信息供后续使用
    printf "%s\n" "${pids[@]}" > /tmp/sh_process_pids.txt
    printf "%s\n" "${processes[@]}" > /tmp/sh_process_info.txt
    return 0
}

# 杀死指定进程
kill_process() {
    local pid=$1
    if kill -0 "$pid" 2>/dev/null; then
        if kill -9 "$pid"; then
            echo -e "${GREEN}成功杀死进程 ${YELLOW}$pid${NC}"
        else
            echo -e "${RED}无法杀死进程 ${YELLOW}$pid${NC}"
        fi
    else
        echo -e "${YELLOW}进程 ${YELLOW}$pid${NC} 已不存在"
    fi
}

# 杀死多个进程
kill_multiple_processes() {
    if [ ! -f /tmp/sh_process_pids.txt ]; then
        clear
        echo -e "未找到进程！"
        sleep 3
        return
    fi
    
    echo -e "请输入要杀死的进程序号（支持多选，用 / 号分隔，如1/3/5）: "
    read -r input
    
    # 处理输入，支持 / 号分割
    cleaned_input=$(echo -e "$input" | tr -d ' ' | tr '/' ' ')
    
    # 检查输入是否有效
    if [ -z "$cleaned_input" ]; then
        clear
        echo -e "输入为空!"
        sleep 3
        return
    fi
    
    # 验证输入的数字是否有效
    valid_input=""
    total_processes=$(wc -l < /tmp/sh_process_pids.txt)
    
    for num in $cleaned_input; do
        # 使用grep检查是否为数字
        if echo -e "$num" | grep -q '^[0-9]\+$'; then
            # 检查序号是否在有效范围内
            if [ "$num" -ge 1 ] && [ "$num" -le "$total_processes" ]; then
                valid_input="$valid_input $num"
            else
                clear
                echo -e "序号 $num 超出范围 (1-$total_processes)!"
                sleep 1
            fi
        else
            clear
            echo -e "无效的输入: $num"
            sleep 1
        fi
    done
    
    # 去除开头的空格
    valid_input=$(echo -e "$valid_input" | sed 's/^ //')
    
    # 检查是否有有效输入（使用字符串长度判断）
    if [ -z "$valid_input" ]; then
        clear
        echo -e "没有有效的序号输入!"
        sleep 3
        return
    fi
    
    # 显示将要杀死的进程
    echo -e "将要杀死的进程:"
    killed_count=0
    for num in $valid_input; do
        pid=$(sed -n "${num}p" /tmp/sh_process_pids.txt 2>/dev/null)
        process_info=$(sed -n "${num}p" /tmp/sh_process_info.txt 2>/dev/null)
        if [ -n "$pid" ]; then
            echo -e "[$num] PID: $pid - ${process_info:0:80}..."
            killed_count=$((killed_count + 1))
        fi
    done
    
    # 统计实际有效的进程数量
    actual_count=0
    for num in $valid_input; do
        pid=$(sed -n "${num}p" /tmp/sh_process_pids.txt 2>/dev/null)
        if [ -n "$pid" ]; then
            actual_count=$((actual_count + 1))
        fi
    done
    
    if [ $actual_count -eq 0 ]; then
        clear
        echo -e "没有找到有效的进程!"
        sleep 3
        return
    fi
    
    # 确认操作
    echo -e "确认要杀死以上 $actual_count 个进程吗? [y/n] "
    read -r confirm
    
    if echo -e "$confirm" | grep -qi '^y'; then
        echo -e ""
        killed_count=0
        for num in $valid_input; do
            pid=$(sed -n "${num}p" /tmp/sh_process_pids.txt 2>/dev/null)
            if [ -n "$pid" ]; then
                kill_process "$pid"
                killed_count=$((killed_count + 1))
            fi
        done
        echo -e "总共杀死了 $killed_count 个进程"
    else
        echo -e "已取消操作"
    fi
}

clears() {
rm -rf /tmp/*
sleep 2
clear
echo -e "${GREEN}已清理临时文件。${NC}"
echo -e "1) 解决隐藏应用列表Vold app data隔离导致的问题
2) 可疑进程杀死
3) 更改设备标识ID
4) 恢复实时网络
5) 修复SOTER Key
6) 关于烧录密钥
7) SELinux模式更改
8) 返回"
}

# 主菜单
main_menu() {
    while true; do
        clear
        echo -e "${GREEN}================================================"
        echo -e "          查找可疑sh进程工具"
        echo -e "================================================"
        echo -e "序号   pid  路径(命令行)"
        find_sh_processes
        echo -e "${GREEN}================================================"
        echo -e "${YELLOW}提示："
        echo -e "●路径${RED}/data/user/0/bin.mt.plus/files/term/tmp/envdump-xxxx.sh${YELLOW}是MT的进程。${NC}"
        echo -e "${YELLOW}●自身进程已通过加密方式隐藏。"
        echo -e "●退出时请勿强行退出，否则无法清理临时文件！${NC}"
        echo -e ""
        echo -e "1. 刷新进程"
        echo -e "2. 杀死指定进程（支持多选）"
        echo -e "3. 杀死所有找到的进程"
        echo -e "4. 退出"
        echo -e "${NC}请选择操作: "
        
        read -r choice
        case $choice in
            1)
                clear
                echo -e "\n${GREEN}正在刷新进程...${NC}"
                clear
                main_menu
                ;;
            2)
                kill_multiple_processes
                rm -rf /tmp/*
                break
                ;;
            3)
                if [ ! -f /tmp/sh_process_pids.txt ]; then
                    echo -e "${YELLOW}未找到进程！${NC}"
                    sleep 1
                    return 1
                fi
            
                echo -e "${RED}确认要杀死所有找到的进程吗? [y/n] ${NC}"
                read -r confirm
            
                if echo -e "$confirm" | grep -qE '^[yY]'; then
                    killed_count=0
                    while read -r pid; do
                        kill_process "$pid"
                        killed_count=$((killed_count + 1))
                    done < /tmp/sh_process_pids.txt
                    echo -e "\n总共杀死了 $killed_count 个进程"
                else
                    echo -e "已取消操作"
                fi
                
                rm -rf /tmp/*
                break
                ;;
            4)
                clear
                echo -e "${GREEN}退出脚本...${NC}"
                sleep 0.5
                rm -rf /tmp/*
                break
                ;;
            *)
                echo -e "${RED}无效的选择!${NC}"
                clear
                ;;
        esac
        sleep 3
        rm -rf /tmp/*
        break
    done
}

# 启动主菜单
main_menu
echo -e "${GREEN}已清理临时文件。${NC}"

elif [ "$SETTING" = "系统环境" ]; then
    echo -e "------------------------------------------------"
    echo -e "提示："
    echo -e "本功能需用到扩展包环境，否则无法正常使用！"
    echo -e "\033[32m当前：$SETTING\033[0m"
    echo -e "------------------------------------------------"

    while true; do
        echo -n "1.退出脚本切换
2.我不知道什么是扩展包环境
3.返回
请选择[1-3] ："
        read choice
        case "$choice" in
            1 )
                exit 0
                ;;
            2 )
                clear
                echo -e "请去网盘看切换扩展包环境教程。"
                exit 0
                ;;
            3 )
                break
                ;;
            *)
                echo -e "\033[33m无效输入，请输入1-3区间内的数字！\033[0m"
                ;;
        esac
    done
else
    echo -e "未知环境状态，退出脚本。"
    exit 1
fi

sleep 2
clear
echo -e "1) 解决隐藏应用列表Vold app data隔离导致的问题
2) 可疑进程杀死
3) 更改设备标识ID
4) 恢复实时网络
5) 修复SOTER Key
6) 关于烧录密钥
7) SELinux模式更改
8) 返回"
;;

"更改设备标识ID")
clear
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 显示当前标识符
show_current_ids() {
clear
PS3='请选择一个操作: '
options=(
    "查看设备id                      "
    "查看软件id"
    "回到主页"
)
select opt in "${options[@]}"
do
case $opt in
"查看设备id                      ")
clear
echo -e "------------------------------------------------"
echo -e "Android ID："
content query --uri content://settings/secure --where "name='android_id'" | grep -o "value=[^,]*" | cut -d= -f2
echo -e "------------------------------------------------"
echo -e ""
echo -e "1) 查看设备id
2) 查看软件id
3) 回到主页"
;;

"查看软件id")
clear
PS3='请选择一个操作: '
options=(
    "王者荣耀                             "
    "和平精英"
    "暗区突围"
    "三角洲行动"
    "无畏契约"
    "自定义应用"
    "返回"
)
select opt in "${options[@]}"
do
case $opt in
"王者荣耀                             ")
clear
PACKAGE_NAME="com.tencent.tmgp.sgame"
SSAID_FILE="/data/system/users/0/settings_ssaid.xml"

echo -e "================================================"
echo -e "应用名: 王者荣耀"
echo -e "包名: $PACKAGE_NAME"
echo -e "================================================"

# 检查文件是否存在
if [ ! -f "$SSAID_FILE" ]; then
    echo -e "[❌错误] ID文件不存在！"
    echo -e "请截图与作者反馈。"
    exit 1
fi

# 提取当前ID
CURRENT_ID=$(strings "$SSAID_FILE" | grep -A1 "$PACKAGE_NAME" | grep -Eo '[0-9a-f]{16}' | head -1)

if [ -n "$CURRENT_ID" ]; then
    echo -e "[✅成功]"
    echo -e ""
    echo -e " - 软件ID: $CURRENT_ID"
    echo -e " - 长度: ${#CURRENT_ID} 字符"
else
    echo -e "[❌错误] "
    echo -e "可能原因:"
    echo -e "  1. 应用未安装"
    echo -e "  2. 应用未使用"
fi
echo -e "------------------------------------------------"
echo -e ""
echo -e "1) 王者荣耀
2) 和平精英
3) 暗区突围
4) 三角洲行动
5) 无畏契约
6) 自定义应用
7) 返回"
;;

"和平精英")
clear
PACKAGE_NAME="com.tencent.tmgp.pubgmhd"
SSAID_FILE="/data/system/users/0/settings_ssaid.xml"

echo -e "================================================"
echo -e "应用名: 和平精英"
echo -e "包名: $PACKAGE_NAME"
echo -e "================================================"

# 检查文件是否存在
if [ ! -f "$SSAID_FILE" ]; then
    echo -e "[❌错误] ID文件不存在！"
    echo -e "请截图与作者反馈。"
    exit 1
fi

# 提取当前ID
CURRENT_ID=$(strings "$SSAID_FILE" | grep -A1 "$PACKAGE_NAME" | grep -Eo '[0-9a-f]{16}' | head -1)

if [ -n "$CURRENT_ID" ]; then
    echo -e "[✅成功]"
    echo -e ""
    echo -e " - 软件ID: $CURRENT_ID"
    echo -e " - 长度: ${#CURRENT_ID} 字符"
else
    echo -e "[❌错误] "
    echo -e "可能原因:"
    echo -e "  1. 应用未安装"
    echo -e "  2. 应用未使用"
fi
echo -e "------------------------------------------------"
echo -e ""
echo -e "1) 王者荣耀
2) 和平精英
3) 暗区突围
4) 三角洲行动
5) 无畏契约
6) 自定义应用
7) 返回"
;;

"暗区突围")
clear
PACKAGE_NAME="com.tencent.mf.uam"
SSAID_FILE="/data/system/users/0/settings_ssaid.xml"

echo -e "================================================"
echo -e "应用名: 暗区突围"
echo -e "包名: $PACKAGE_NAME"
echo -e "================================================"

# 检查文件是否存在
if [ ! -f "$SSAID_FILE" ]; then
    echo -e "[❌错误] ID文件不存在！"
    echo -e "请截图与作者反馈。"
    exit 1
fi

# 提取当前ID
CURRENT_ID=$(strings "$SSAID_FILE" | grep -A1 "$PACKAGE_NAME" | grep -Eo '[0-9a-f]{16}' | head -1)

if [ -n "$CURRENT_ID" ]; then
    echo -e "[✅成功]"
    echo -e ""
    echo -e " - 软件ID: $CURRENT_ID"
    echo -e " - 长度: ${#CURRENT_ID} 字符"
else
    echo -e "[❌错误] "
    echo -e "可能原因:"
    echo -e "  1. 应用未安装"
    echo -e "  2. 应用未使用"
fi
echo -e "------------------------------------------------"
echo -e ""
echo -e "1) 王者荣耀
2) 和平精英
3) 暗区突围
4) 三角洲行动
5) 无畏契约
6) 自定义应用
7) 返回"
;;

"三角洲行动")
clear
PACKAGE_NAME="com.tencent.tmgp.dfm"
SSAID_FILE="/data/system/users/0/settings_ssaid.xml"

echo -e "================================================"
echo -e "应用名: 三角洲行动"
echo -e "包名: $PACKAGE_NAME"
echo -e "================================================"

# 检查文件是否存在
if [ ! -f "$SSAID_FILE" ]; then
    echo -e "[❌错误] ID文件不存在！"
    echo -e "请截图与作者反馈。"
    exit 1
fi

# 提取当前ID
CURRENT_ID=$(strings "$SSAID_FILE" | grep -A1 "$PACKAGE_NAME" | grep -Eo '[0-9a-f]{16}' | head -1)

if [ -n "$CURRENT_ID" ]; then
    echo -e "[✅成功]"
    echo -e ""
    echo -e " - 软件ID: $CURRENT_ID"
    echo -e " - 长度: ${#CURRENT_ID} 字符"
else
    echo -e "[❌错误] "
    echo -e "可能原因:"
    echo -e "  1. 应用未安装"
    echo -e "  2. 应用未使用"
fi
echo -e "------------------------------------------------"
echo -e ""
echo -e "1) 王者荣耀
2) 和平精英
3) 暗区突围
4) 三角洲行动
5) 无畏契约
6) 自定义应用
7) 返回"
;;

"无畏契约")
clear
PACKAGE_NAME="com.tencent.tmgp.codev"
SSAID_FILE="/data/system/users/0/settings_ssaid.xml"

echo -e "================================================"
echo -e "应用名: 无畏契约"
echo -e "包名: $PACKAGE_NAME"
echo -e "================================================"

# 检查文件是否存在
if [ ! -f "$SSAID_FILE" ]; then
    echo -e "[❌错误] ID文件不存在！"
    echo -e "请截图与作者反馈。"
    exit 1
fi

# 提取当前ID
CURRENT_ID=$(strings "$SSAID_FILE" | grep -A1 "$PACKAGE_NAME" | grep -Eo '[0-9a-f]{16}' | head -1)

if [ -n "$CURRENT_ID" ]; then
    echo -e "[✅成功]"
    echo -e ""
    echo -e " - 软件ID: $CURRENT_ID"
    echo -e " - 长度: ${#CURRENT_ID} 字符"
else
    echo -e "[❌错误] "
    echo -e "可能原因:"
    echo -e "  1. 应用未安装"
    echo -e "  2. 应用未使用"
fi
echo -e "------------------------------------------------"
echo -e ""
echo -e "1) 王者荣耀
2) 和平精英
3) 暗区突围
4) 三角洲行动
5) 无畏契约
6) 自定义应用
7) 返回"
;;

"自定义应用")
clear
SSAID_FILE="/data/system/users/0/settings_ssaid.xml"

echo -e "=================应用SSAID查看================="

# 检查文件是否存在
if [ ! -f "$SSAID_FILE" ]; then
    echo -e "[❌错误] ID文件不存在！"
    echo -e "请截图与作者反馈。"
    exit 1
fi

# 获取用户输入的包名
echo -e "\033[33m提示：\033[0m"
echo -e "\033[33m请输入要查询的应用包名(例如: com.xxx.xxx)\033[0m"
echo -e "\033[33m输入 q 退出\033[0m"
echo -e "------------------------------------------------"

while true; do
    echo -n "请输入包名: "
    read -r PACKAGE_NAME
    
    # 检查退出条件
    if [ "$PACKAGE_NAME" = "q" ]; then
        clear
        echo -e "[*] 退出"
        sleep 2
        clear
        break
    fi
    
    # 验证包名格式
    if [ -z "$PACKAGE_NAME" ]; then
        echo -e "[⚠️] 包名不能为空，请重新输入"
        continue
    fi
    
    if ! echo -e "$PACKAGE_NAME" | grep -qE '^[a-zA-Z][a-zA-Z0-9_]*(\.[a-zA-Z][a-zA-Z0-9_]*)+$'; then
        echo -e "[⚠️] 包名格式不正确，通常为 com.xxx.xxx 格式"
        echo -e "是否继续查询？(y/n)"
        read -r confirm
        if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then
            continue
        fi
    fi
    
    clear
    echo -e "正在查询$PACKAGE_NAME"
    sleep 1.2
    echo -e "------------------------------------------------"
    
    # 提取当前ID
    CURRENT_ID=$(strings "$SSAID_FILE" | grep -A1 "$PACKAGE_NAME" | grep -Eo '[0-9a-f]{16}' | head -1)
    
    if [ -n "$CURRENT_ID" ]; then
        echo -e "[✅成功]"
        echo -e " - 软件ID: $CURRENT_ID"
        echo -e " - 长度: ${#CURRENT_ID} 字符"
    else
        echo -e "[❌未找到] 应用 $PACKAGE_NAME 的ID"
        echo -e "可能的原因:"
        echo -e "  1. 包名错误"
        echo -e "  2. 应用未安装"
        echo -e "  3. 应用未使用"
    fi
     
    echo -e "------------------------------------------------"
    echo -e "可以继续输入包名查询其他应用，或输入 q 退出"
done

echo -e "1) 王者荣耀
2) 和平精英
3) 暗区突围
4) 三角洲行动
5) 无畏契约
6) 自定义应用
7) 返回"
;;

"返回")
clear
echo -e "1) 查看设备id
2) 查看软件id
3) 回到主页"
break
;;

*) 
echo -e "\033[33m无效的选项\033[0m";;
esac
done
;;

"回到主页")
clear
break
;;

*) 
echo -e "\033[33m无效的选项\033[0m";;
esac
done
}

# 修改标识符函数
modify_ids() {
clear
# 获取当前Android ID
CURRENT_ID=$(content query --uri content://settings/secure --where "name='android_id'" | grep -o "value=[^,]*" | cut -d= -f2)
echo -e "当前Android ID: $CURRENT_ID"
sleep 0.5

# 如果没有当前ID，使用默认长度16
if [ -z "$CURRENT_ID" ]; then
    echo -e "未找到当前设备ID，请截图或复制反馈！"
    MATRIX="0123456789qwertyuiopasdfghjklzxcvbnm"
    LENGTH="16"
    while [ "${n:=1}" -le "$LENGTH" ]
    do
        PASS="$PASS${MATRIX:$(($RANDOM%${#MATRIX})):1}"
        let n+=1
    done
else
    # 基于当前ID的每一位字符类型生成新ID
    LENGTH=${#CURRENT_ID}
    PASS=""
    
    # 定义字符集
    DIGITS="0123456789"
    LOWERCASE="abcdefghijklmnopqrstuvwxyz"
    UPPERCASE="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    
    # 最大重试次数
    MAX_RETRY=50
    count=0
    
    while [ $count -lt $MAX_RETRY ]; do
        PASS=""
        i=0
        # 逐位生成相同类型但不同的字符
        while [ $i -lt $LENGTH ]; do
            current_char=$(echo -e "$CURRENT_ID" | cut -c$((i+1)))
        
            # 根据当前字符类型选择相应的字符集
            case "$current_char" in
                [0-9])
                    # 数字
                    while true; do
                        # 使用时间戳生成随机数
                        random_val=$(date +%N | cut -c1-3) 2>/dev/null || random_val=$(date +%s)
                        pos=$(( random_val % 10 ))
                        new_char=$(echo -e "$DIGITS" | cut -c$((pos+1)))
                        # 确保新字符与当前字符不同
                        if [ "$new_char" != "$current_char" ]; then
                            PASS="$PASS$new_char"
                            break
                        fi
                    done
                    ;;
                [a-z])
                    # 小写字母
                    while true; do
                        random_val=$(date +%N | cut -c1-3) 2>/dev/null || random_val=$(date +%s)
                        pos=$(( random_val % 26 ))
                        new_char=$(echo -e "$LOWERCASE" | cut -c$((pos+1)))
                        if [ "$new_char" != "$current_char" ]; then
                            PASS="$PASS$new_char"
                            break
                        fi
                    done
                    ;;
                [A-Z])
                    # 大写字母
                    while true; do
                        random_val=$(date +%N | cut -c1-3) 2>/dev/null || random_val=$(date +%s)
                        pos=$(( random_val % 26 ))
                        new_char=$(echo -e "$UPPERCASE" | cut -c$((pos+1)))
                        if [ "$new_char" != "$current_char" ]; then
                            PASS="$PASS$new_char"
                            break
                        fi
                    done
                    ;;
                *)
                    # 其他字符（保持原样或使用默认字符集）
                    new_char="$current_char"
                    PASS="$PASS$new_char"
                    ;;
            esac
            i=$((i + 1))
        done

        
        # 检查整个新ID是否与当前ID不同
        if [ "$PASS" != "$CURRENT_ID" ]; then
            sleep 0.5
            echo -e "已生成随机新ID"
            break
        else
            count=$((count + 1))
            if [ $count -eq $MAX_RETRY ]; then
                echo -e "警告：无法生成不同的ID，使用强制不同生成"
                # 强制改变最后一位
                last_char="${PASS: -1}"
                
                # 使用case语句替代正则表达式匹配
                case "$last_char" in
                    [0-9])
                        # 如果是数字，循环直到找到不同的数字
                        for digit in 0 1 2 3 4 5 6 7 8 9; do
                            if [ "$digit" != "$last_char" ]; then
                                PASS="${PASS%?}$digit"
                                break
                            fi
                        done
                        ;;
                    [a-z])
                        # 如果是小写字母
                        for letter in a b c d e f g h i j k l m n o p q r s t u v w x y z; do
                            if [ "$letter" != "$last_char" ]; then
                                PASS="${PASS%?}$letter"
                                break
                            fi
                        done
                        ;;
                    [A-Z])
                        # 如果是大写字母
                        for letter in A B C D E F G H I J K L M N O P Q R S T U V W X Y Z; do
                            if [ "$letter" != "$last_char" ]; then
                                PASS="${PASS%?}$letter"
                                break
                            fi
                        done
                        ;;
                    *)
                        # 其他字符，使用默认替换
                        if [ "$last_char" = "0" ]; then
                            PASS="${PASS%?}1"
                        else
                            PASS="${PASS%?}0"
                        fi
                        ;;
                esac
                break
            fi
        fi
    done
fi

echo -e "生成的新ID: $PASS"
sleep 0.5
echo -e "正在写入ID…"

# 写入新ID
# 方法1: 先杀进程再修改
pkill -f com.android.providers.settings 2>/dev/null
sleep 1

# 方法2: 使用content插入
content delete --uri content://settings/secure --where "name='android_id'" 2>/dev/null
content insert --uri content://settings/secure --bind name:s:android_id --bind value:s:"$PASS"

if [ $? -eq 0 ]; then
    # 给系统时间应用更改
    sleep 3
    clear
echo -e "------------------------------------------------"
    echo -e "✅ID写入成功"
else
    echo -e "错误: ID修改失败"
    exit 1
fi

# 验证新ID
NEW_ID=$(content query --uri content://settings/secure --where "name='android_id'" | grep -o "value=[^,]*" | cut -d= -f2)
if [ "$NEW_ID" = "$PASS" ]; then
    sleep 0.5
    echo -e "✅验证成功: 新ID已生效"
    echo -e "当前ID:$NEW_ID"
    echo -e "------------------------------------------------"
elif [ -z "$NEW_ID" ]; then
    sleep 0.5
    echo -e "错误: ID修改失败 - 读取新ID为空"
    echo -e "------------------------------------------------"
    exit 1
elif [ "$NEW_ID" = "$CURRENT_ID" ]; then
    sleep 0.5
    echo -e "错误: ID修改失败 - ID未发生变化"
    echo -e "------------------------------------------------"
    exit 1
else
    sleep 0.5
    echo -e "错误: ID修改失败 - 期望: $PASS, 实际: $NEW_ID"
    echo -e "------------------------------------------------"
    exit 1
fi
}

#更改软件ID
app_ids() {
clear
echo -e "\033[33m################################################\033[0m"
echo -e "\033[33m●更改应用唯一标识ID。\033[0m"
echo -e "\033[33m●选择对应游戏更改ID，会清理游戏数据！\033[0m"
echo -e "\033[33m●支持自定义包名更改ID，暂不支持系统应用。\033[0m"
echo -e "\033[33m●包名获取：MT提取安装包界面，点击对应软件就会出现包名，再点击这个包名可自动复制。\033[0m"
echo -e "\033[33m################################################\033[0m"
echo -e ""
PS3='请选择一个操作: '
options=(
    "王者荣耀                             "
    "和平精英"
    "暗区突围"
    "三角洲行动"
    "自定义应用"
    "返回"
)
select opt in "${options[@]}"
do
case $opt in
"王者荣耀                             ")
clear
PACKAGE_NAME="com.tencent.tmgp.sgame"
SSAID_FILE="/data/system/users/0/settings_ssaid.xml"

echo -e "\033[31m提示：
执行后会清除应用数据！\033[0m"
echo -e "是否继续？(y/n)
请输入:"
read -r confirm

if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then
    echo -e "[⚠️操作已取消]"
    exit 0
fi


# 提取当前ID
CURRENT_ID=$(strings "$SSAID_FILE" | grep -A1 "$PACKAGE_NAME" | grep -Eo '[0-9a-f]{16}' | head -1)

if [ -z "$CURRENT_ID" ]; then
    echo -e "[!] 无法找到当前的ID"
    echo -e "\033[41m⚠️软件未安装！\033[0m"
    exit 1
fi

# 生成新ID
NEW_ID=$(cat /dev/urandom | tr -dc 'a-f0-9' | fold -w 16 | head -n 1)
echo -e "[+] 新的ID: $NEW_ID"

# 备份原文件
cp "$SSAID_FILE" "${SSAID_FILE}.bak"

# 替换ID
echo -e "[+] 正在修改ID中..."
sed -i "s|$CURRENT_ID|$NEW_ID|g" "$SSAID_FILE"
sleep 0.5

# 验证修改
VERIFY_ID=$(strings "$SSAID_FILE" | grep -A1 "$PACKAGE_NAME" | grep -Eo '[0-9a-f]{16}' | head -1)

if [ "$VERIFY_ID" = "$NEW_ID" ]; then
    echo -e "[+] 修改成功！"
else
    echo -e "❌ 修改失败！"
    exit 1
fi

# 清除应用数据
echo -e "[+] 正在清除应用数据..."
pm clear "$PACKAGE_NAME"

echo -e "✅ 操作完成！"
sleep 1
echo -e "建议重启防止系统自动恢复。"
sleep 3
clear
echo -e "1) 王者荣耀
2) 和平精英
3) 暗区突围
4) 三角洲行动
5) 自定义应用
6) 返回"
;;

"和平精英")
clear
PACKAGE_NAME="com.tencent.tmgp.pubgmhd"
SSAID_FILE="/data/system/users/0/settings_ssaid.xml"

echo -e "\033[31m提示：
执行后会清除应用数据！\033[0m"
echo -e "是否继续？(y/n)
请输入:"
read -r confirm

if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then
    echo -e "[⚠️操作已取消]"
    exit 0
fi


# 提取当前ID
CURRENT_ID=$(strings "$SSAID_FILE" | grep -A1 "$PACKAGE_NAME" | grep -Eo '[0-9a-f]{16}' | head -1)

if [ -z "$CURRENT_ID" ]; then
    echo -e "[!] 无法找到当前的ID"
    echo -e "\033[41m⚠️软件未安装！\033[0m"
    exit 1
fi

# 生成新ID
NEW_ID=$(cat /dev/urandom | tr -dc 'a-f0-9' | fold -w 16 | head -n 1)
echo -e "[+] 新的ID: $NEW_ID"

# 备份原文件
cp "$SSAID_FILE" "${SSAID_FILE}.bak"

# 替换ID
echo -e "[+] 正在修改ID中..."
sed -i "s|$CURRENT_ID|$NEW_ID|g" "$SSAID_FILE"
sleep 0.5

# 验证修改
VERIFY_ID=$(strings "$SSAID_FILE" | grep -A1 "$PACKAGE_NAME" | grep -Eo '[0-9a-f]{16}' | head -1)

if [ "$VERIFY_ID" = "$NEW_ID" ]; then
    echo -e "[+] 修改成功！"
else
    echo -e "❌ 修改失败！"
    exit 1
fi

# 清除应用数据
echo -e "[+] 正在清除应用数据..."
pm clear "$PACKAGE_NAME"

echo -e "✅ 操作完成！"
sleep 1
echo -e "建议重启防止系统自动恢复。"
sleep 3
clear
echo -e "1) 王者荣耀
2) 和平精英
3) 暗区突围
4) 三角洲行动
5) 自定义应用
6) 返回"
;;

"暗区突围")
clear
PACKAGE_NAME="com.tencent.mf.uam"
SSAID_FILE="/data/system/users/0/settings_ssaid.xml"

echo -e "\033[31m提示：
执行后会清除应用数据！\033[0m"
echo -e "是否继续？(y/n)
请输入:"
read -r confirm

if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then
    echo -e "[⚠️操作已取消]"
    exit 0
fi


# 提取当前ID
CURRENT_ID=$(strings "$SSAID_FILE" | grep -A1 "$PACKAGE_NAME" | grep -Eo '[0-9a-f]{16}' | head -1)

if [ -z "$CURRENT_ID" ]; then
    echo -e "[!] 无法找到当前的ID"
    echo -e "\033[41m⚠️软件未安装！\033[0m"
    exit 1
fi

# 生成新ID
NEW_ID=$(cat /dev/urandom | tr -dc 'a-f0-9' | fold -w 16 | head -n 1)
echo -e "[+] 新的ID: $NEW_ID"

# 备份原文件
cp "$SSAID_FILE" "${SSAID_FILE}.bak"

# 替换ID
echo -e "[+] 正在修改ID中..."
sed -i "s|$CURRENT_ID|$NEW_ID|g" "$SSAID_FILE"
sleep 0.5

# 验证修改
VERIFY_ID=$(strings "$SSAID_FILE" | grep -A1 "$PACKAGE_NAME" | grep -Eo '[0-9a-f]{16}' | head -1)

if [ "$VERIFY_ID" = "$NEW_ID" ]; then
    echo -e "[+] 修改成功！"
else
    echo -e "❌ 修改失败！"
    exit 1
fi

# 清除应用数据
echo -e "[+] 正在清除应用数据..."
pm clear "$PACKAGE_NAME"

echo -e "✅ 操作完成！"
sleep 1
echo -e "建议重启防止系统自动恢复。"
sleep 3
clear
echo -e "1) 王者荣耀
2) 和平精英
3) 暗区突围
4) 三角洲行动
5) 自定义应用
6) 返回"
;;

"三角洲行动")
clear
PACKAGE_NAME="com.tencent.tmgp.dfm"
SSAID_FILE="/data/system/users/0/settings_ssaid.xml"

echo -e "\033[31m提示：
执行后会清除应用数据！\033[0m"
echo -e "是否继续？(y/n)
请输入:"
read -r confirm

if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then
    echo -e "[⚠️操作已取消]"
    exit 0
fi


# 提取当前ID
CURRENT_ID=$(strings "$SSAID_FILE" | grep -A1 "$PACKAGE_NAME" | grep -Eo '[0-9a-f]{16}' | head -1)

if [ -z "$CURRENT_ID" ]; then
    echo -e "[!] 无法找到当前的ID"
    echo -e "\033[41m⚠️软件未安装！\033[0m"
    exit 1
fi

# 生成新ID
NEW_ID=$(cat /dev/urandom | tr -dc 'a-f0-9' | fold -w 16 | head -n 1)
echo -e "[+] 新的ID: $NEW_ID"

# 备份原文件
cp "$SSAID_FILE" "${SSAID_FILE}.bak"

# 替换ID
echo -e "[+] 正在修改ID中..."
sed -i "s|$CURRENT_ID|$NEW_ID|g" "$SSAID_FILE"
sleep 0.5

# 验证修改
VERIFY_ID=$(strings "$SSAID_FILE" | grep -A1 "$PACKAGE_NAME" | grep -Eo '[0-9a-f]{16}' | head -1)

if [ "$VERIFY_ID" = "$NEW_ID" ]; then
    echo -e "[+] 修改成功！"
else
    echo -e "❌ 修改失败！"
    exit 1
fi

# 清除应用数据
echo -e "[+] 正在清除应用数据..."
pm clear "$PACKAGE_NAME"

echo -e "✅ 操作完成！"
sleep 1
echo -e "建议重启防止系统自动恢复。"
sleep 3
clear
echo -e "1) 王者荣耀
2) 和平精英
3) 暗区突围
4) 三角洲行动
5) 自定义应用
6) 返回"
;;

"自定义应用")
clear
SSAID_FILE="/data/system/users/0/settings_ssaid.xml"

# 输入的包名
echo -e "请输入包名（例如：com.xxx.xxx）:"
read -r PACKAGE_NAME

if [ -z "$PACKAGE_NAME" ]; then
    echo -e "[!] 包名不能为空"
    exit 1
fi

echo -e "\033[31m提示：
执行后会清除应用数据！\033[0m"
echo -e "是否继续？(y/n)
请输入:"
read -r confirm

if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then
    echo -e "[⚠️操作已取消]"
    exit 0
fi

echo -e "[*] 处理 $PACKAGE_NAME 的ID修改"

# 提取当前ID
CURRENT_ID=$(strings "$SSAID_FILE" | grep -A1 "$PACKAGE_NAME" | grep -Eo '[0-9a-f]{16}' | head -1)

if [ -z "$CURRENT_ID" ]; then
    echo -e "[!] 无法找到当前的ID"
    echo -e "\033[41m⚠️软件未安装或包名错误！\033[0m"
    exit 1
fi

echo -e "[+] 当前ID: $CURRENT_ID"

# 生成新ID
NEW_ID=$(cat /dev/urandom | tr -dc 'a-f0-9' | fold -w 16 | head -n 1)
echo -e "[+] 新的ID: $NEW_ID"

# 备份原文件
cp "$SSAID_FILE" "${SSAID_FILE}.bak"

# 替换ID
echo -e "[+] 正在修改ID中..."
sed -i "s|$CURRENT_ID|$NEW_ID|g" "$SSAID_FILE"
sleep 0.5

# 验证修改
VERIFY_ID=$(strings "$SSAID_FILE" | grep -A1 "$PACKAGE_NAME" | grep -Eo '[0-9a-f]{16}' | head -1)

if [ "$VERIFY_ID" = "$NEW_ID" ]; then
    echo -e "[+] 修改成功！"
else
    echo -e "❌ 修改失败！"
    exit 1
fi

# 清除应用数据
echo -e "[+] 正在清除应用数据..."
pm clear "$PACKAGE_NAME"

echo -e "✅ 操作完成！"
sleep 1
echo -e "建议重启防止系统自动恢复。"
sleep 3
clear
echo -e "1) 王者荣耀
2) 和平精英
3) 暗区突围
4) 三角洲行动
5) 自定义应用
6) 返回"
;;

"返回")
clear
break
;;

*) 
echo -e "\033[33m无效的选项\033[0m";;
esac
done
}

# 重启
restart_changes() {
clear
while true; do
    echo -n "是否立即重启？[y/n] "
    read choice
    case "$choice" in
        y|Y)
            echo -e "${YELLOW}正在重启设备...${NC}"
            reboot
            exit 0
            ;;
        n|N|"")
            echo -e "${GREEN}已取消重启${NC}"
            sleep 2
            clear
            break
            ;;
        *)
            echo -e "${RED}无效输入，请输入 y(重启) 或 n(不重启)${NC}"
            ;;
    esac
done
}

# 主菜单
main_menu() {   
    while true; do
        echo -e "\033[33m提示：\033[0m"
        echo -e "●请修改设备ID+软件ID以达到完美修改。"
        echo -e "●所有修改项重启生效！"
        echo -e ""
        echo -e ""
        echo -e "1. 显示ID"
        echo -e "2. 随机设备ID"
        echo -e "3. 随机软件ID"
        echo -e "4. 重启设备"
        echo -e "5. 退出工具箱"
        echo -n "请输入选择 (1-5): "
        
        read choice
        case $choice in
            1)
                show_current_ids
                ;;
            2)
                modify_ids
                ;;
            3)
                app_ids
                ;;
            4)
                restart_changes
                ;;      
            5)
                break
                ;;
            *)
                echo -e "无效选择"
                ;;
        esac
    done
}

# 脚本开始
echo -e "${BLUE}"
echo -e "================================================"
echo -e "           Android设备标识符修改工具"
echo -e "                  @SukiSU土豆"
echo -e "================================================"
echo -e "${NC}"
main_menu

clear
echo -e "1) 解决隐藏应用列表Vold app data隔离导致的问题
2) 可疑进程杀死
3) 更改设备标识ID
4) 恢复实时网络
5) 修复SOTER Key
6) 关于烧录密钥
7) SELinux模式更改
8) 返回"
;;

"恢复实时网络")
clear
echo -e "\033[33m################################################\033[0m"
echo -e "\033[33m提示：\033[0m"
echo -e "\033[33m用于解决某些内核驱动因bug导致的实时网络不准确问题。但要注意需要短暂进入重启界面，此操作不会掉驱动！\033[0m"
echo -e "\033[33m################################################\033[0m"
echo -e ""
PS3='请选择一个操作: '
options=(
    "开启                             "
    "返回"
)
select opt in "${options[@]}"
do
case $opt in
"开启                             ")
clear

ifconfig_wlan() {
# 重置网络接口
echo -e "正在重置网络接口..."
ip rule flush
ip route flush cache
ifconfig wlan0 down && ifconfig wlan0 up 2>/dev/null
ifconfig rmnet0 down && ifconfig rmnet0 up 2>/dev/null
sleep 0.5

# 2. 清除网络缓存
echo -e "正在清除网络缓存..."
ndc resolver flushif wlan0
ndc resolver flushif rmnet0
ip neigh flush all
sleep 0.5

# 3. 重置流量统计
echo -e "正在重置流量统计..."
iptables -Z -t mangle
iptables -Z -t filter
sleep 0.5

# 4. 恢复默认DNS
echo -e "正在恢复默认DNS..."
ndc resolver setdefaultif wlan0
ndc resolver setdefaultif rmnet0
sleep 0.5

# 5. 重启网络服务（部分设备有效）
echo -e "正在重启网络服务"
setprop ctl.restart netd
setprop ctl.restart wifi

echo -e "网络配置已重置完成！"
}

while true; do
    echo -n "此操作会短暂进入重启界面，是否继续？[y/n] "
    read choice
    case "$choice" in
        y|Y)
            echo -e "${YELLOW}准备开始…${NC}"
            ifconfig_wlan
            break
            ;;
        n|N|"")
            echo -e "${GREEN}已取消操作${NC}"
            sleep 3
            clear
            break
            ;;
        *)
            clear
            echo -e "${RED}无效输入，请输入 y(继续) 或 n(取消)${NC}"
            ;;
    esac
done

clear
echo -e "\033[33m################################################\033[0m"
echo -e "\033[33m提示：\033[0m"
echo -e "\033[33m用于解决某些内核驱动因bug导致的实时网络不准确问题。但要注意需要短暂进入重启界面，此操作不会掉驱动！\033[0m"
echo -e "\033[33m################################################\033[0m"
echo -e ""
echo -e "1) 开启
2) 返回"
;;

"返回")
clear
echo -e "1) 解决隐藏应用列表Vold app data隔离导致的问题
2) 可疑进程杀死
3) 更改设备标识ID
4) 恢复实时网络
5) 修复SOTER Key
6) 关于烧录密钥
7) SELinux模式更改
8) 返回"
break
;;

*) 
echo -e "\033[33m无效的选项\033[0m";;
esac
done
;;

"修复SOTER Key")
clear
echo -e "\033[33m################################################\033[0m"
echo -e "\033[1;31m注意：\033[0m"
echo -e "\033[31m●此功能可能会导致部分手机指纹失效！\033[0m"
echo -e "\033[31m●有故障的设备多为一加，但作者的ace3pro没这问题。\033[0m"
echo -e "\033[31m●修复后诺指纹无法使用，可尝试修复指纹失效功能。\033[0m"
echo -e "\033[31m●其他机型自测。\033[0m"
echo -e "\033[33m################################################\033[0m"
echo -e ""
PS3='请选择一个操作: '
options=(
    "开始修复SOTER Key               "
    "修复指纹失效"
    "返回"
)
select opt in "${options[@]}"
do
case $opt in
"开始修复SOTER Key               ")
clear

# 检查目标应用是否存在
soter_ls() {
    echo -e "开始修复SOTER Key"
    stop vendor.soter
    sleep 2
    pm clear com.tencent.soter.soterserver
    start vendor.soter
    sleep 2
    getprop init.svc.vendor.soter
    clear
    echo -e "✅ 修复完成！"
    echo -e "当前为$MODE修复。"
    echo -e "请拨号输入*#899# 然后点手动测试查看SOTER Key项，
若失败则多执行几次。"
    sleep 2
    echo -e ""
    echo -e ""
}

soter_yj() {
SERVICES=/data/adb/service.d

if [ -d "$SERVICES" ]; then
    clear
    echo -e "已找到写入地址"
    sleep 1
else
    clear
    mkdir "$SERVICES"
    chmod 777 "$SERVICES"
    echo -e "已找到写入地址"
    sleep 1
fi

# 服务脚本方式
SERVICE_SCRIPT="/data/adb/service.d/sukisutd_soter.sh"

# 静默删除文件
rm -f "$SERVICE_SCRIPT"
        
# 创建服务脚本
cat > "$SERVICE_SCRIPT" << EOF
#!/system/bin/sh

# 等待系统启动完成
while [ "$(getprop sys.boot_completed)" != "1" ]; do
    sleep 2
done

# 执行5次修复
pm clear com.tencent.soter.soterserver
sleep 3
pm clear com.tencent.soter.soterserver
sleep 3
pm clear com.tencent.soter.soterserver
sleep 3
pm clear com.tencent.soter.soterserver
sleep 3
pm clear com.tencent.soter.soterserver
sleep 3
EOF

chmod 777 "$SERVICE_SCRIPT"
        
# 立即生效
stop vendor.soter
sleep 2
pm clear com.tencent.soter.soterserver
start vendor.soter
sleep 2
getprop init.svc.vendor.soter
clear
echo -e "✅ 修复完成！"
echo -e "当前为$MODE修复。"
echo -e "请拨号输入*#899# 然后点手动测试查看SOTER Key项，
若失败则多执行几次。"
echo -e "重启后若没生效，请刷新界面几次即可。"
}


if pm list packages com.tencent.soter.soterserver | grep -q "com.tencent.soter.soterserver"; then
    echo -e "已找到执行目标"
else
    echo -e "❌ 未发现执行目标！"
    exit 1
fi

soter_ls
echo -e ""
echo -e "1) 开始修复SOTER Key
2) 修复指纹失效
3) 返回"
;;

"修复指纹失效")
clear
# 定义目录
TARGET_DIR="/mnt/vendor/persist/data"

echo -e "正在操作..."
chmod 771 /mnt/vendor/persist

# 确保顶层目录有访问权限
chmod 700 "$TARGET_DIR" 2>/dev/null

# 使用递归chmod（如果系统支持）
if chmod -R 700 "$TARGET_DIR" 2>/dev/null; then
    sleep 0.5
    echo -e "完成"
else
    # 先处理目录，确保能访问
    find "$TARGET_DIR" -type d -exec chmod 700 {} \; 2>/dev/null
    # 再处理文件
    find "$TARGET_DIR" -type f -exec chmod 700 {} \; 2>/dev/null
fi

while true; do
    echo -n "是否立即重启以完全恢复？[y/n] "
    read choice
    case "$choice" in
        y|Y)
            echo -e "${YELLOW}正在重启设备...${NC}"
            reboot
            exit 0
            ;;
        n|N|"")
            echo -e "${GREEN}已取消重启${NC}"
            sleep 2
            clear
            break
            ;;
        *)
            echo -e "${RED}无效输入，请输入 y(重启) 或 n(不重启)${NC}"
            ;;
    esac
done

echo -e "\033[33m请重启后完全恢复!\033[0m"
echo -e ""
echo -e "1) 开始修复SOTER Key
2) 修复指纹失效
3) 返回"
;;

"返回")
clear
echo -e "1) 解决隐藏应用列表Vold app data隔离导致的问题
2) 可疑进程杀死
3) 更改设备标识ID
4) 恢复实时网络
5) 修复SOTER Key
6) 关于烧录密钥
7) SELinux模式更改
8) 返回"
break
;;

*) 
echo -e "\033[33m无效的选项\033[0m";;
esac
done
;;

"关于烧录密钥")
clear
PS3='请选择一个操作: '
options=(
    "选择密钥烧录"
    "尝试修复密钥烧录失败问题"
    "返回"
)
select opt in "${options[@]}"
do
case $opt in
"选择密钥烧录")
clear
echo -e "------------------------------------------------"
echo -e "               安全密钥烧录工具"
echo -e "------------------------------------------------"

# 1. 获取用户输入的密钥文件路径
echo -n "请输入密钥文件路径："
read KEY_PATH

# 2. 验证输入文件是否存在
if [ ! -f "$KEY_PATH" ]; then
    echo -e "❌ 错误：文件不存在！请检查路径后重试。"
    exit 1
fi

# 3. 定义目标路径
TARGET_DIR="/data/local/tmp"
TARGET_FILE="$TARGET_DIR/attestation"

# 4. 复制文件到目标目录并重命名
cp "$KEY_PATH" "$TARGET_FILE"
if [ $? -ne 0 ]; then
    echo -e "❌ 文件复制失败！请检查源文件权限或目标目录空间。"
    exit 1
fi

# 5. 设置文件权限为 644
echo -e "🔒 正在设置文件权限..."
chmod 644 "$TARGET_FILE"
if [ $? -ne 0 ]; then
    echo -e "❌ 权限设置失败！"
    rm -f "$TARGET_FILE"  # 清理临时文件
    exit 1
fi

echo -e "✅ 文件已准备就绪！"
sleep 1

# 6. 执行烧录指令
echo -e "🔥 正在执行烧录指令..."
sleep 1
LD_LIBRARY_PATH=/vendor/lib64/hw /vendor/bin/KmInstallKeybox "$TARGET_FILE" attestation true
BURN_RESULT=$?

# 7. 根据烧录结果处理
if [ $BURN_RESULT -eq 0 ]; then
    echo -e "🎉 烧录成功！"
else
    echo -e "❌ 烧录失败！错误代码: $BURN_RESULT"
    echo -e "💡 建议：检查密钥文件是否有效、与设备平台(高通/联发科)是否匹配。"
    echo -e "诺当前已刷入了有效的密钥，可能在密钥失效前无法再次刷入。"
fi

rm -f "$TARGET_FILE"

echo -e "------------------------------------------------"
echo -e "操作完成。"
exit 0
;;

"尝试修复密钥烧录失败问题")
clear
echo -e "\033[33m################################################\033[0m"
echo -e "\033[33m提示：\033[0m"
echo -e "\033[33m●用于解决烧录密钥提示InstallKeybox Failed!和无法获得谷歌远程密钥的问题。\033[0m"
echo -e "\033[33m●但需要注意如果烧录的密钥是无效的、内容格式不正确的，可能也无法烧录！\033[0m"
echo -e "\033[33m●未刷入Unlock CN GMS或类似模块谷歌是无法下发密钥的哦。\033[0m"
echo -e "\033[33m●诺设备本来就无法获得谷歌远程密钥，就也无法用此功能获得远程密钥！\033[0m"
echo -e "\033[33m################################################\033[0m"
echo -e ""
PS3='请选择一个操作: '
options=(
    "开启                         "
    "返回"
)
select opt in "${options[@]}"
do
case $opt in
"开启                         ")
clear
# 定义要检查的目录
TARGET_DIR="/mnt/vendor/persist/data"
TARGET_DIRS="/vendor/bin/KmInstallKeybox"

sleep 1

# 检查目录是否存在
if [ ! -d "$TARGET_DIR" ]; then
    echo -e "错误：持久化目录不存在"
    exit 1
fi

echo -e "正在处理…"
chmod 700 "$TARGET_DIR" 2>/dev/null
chmod 755 "$TARGET_DIRS" 2>/dev/null

# 修改目录内所有子目录和文件的权限为700
if [ -d "$TARGET_DIR" ]; then
    find "$TARGET_DIR" -exec chmod 700 {} + 2>/dev/null
fi

sleep 1.5
clear
echo -e "[✅完成]建议再重启一次手机。"
echo -e ""
echo -e "1) 开启
2) 返回"
;;

"返回")
clear
echo -e "1) 选择密钥烧录
2) 尝试修复密钥烧录失败问题
3) 返回"
break
;;

*) 
echo -e "\033[33m无效的选项\033[0m";;
esac
done
;;

"返回")
clear
echo -e "1) 解决隐藏应用列表Vold app data隔离导致的问题
2) 可疑进程杀死
3) 更改设备标识ID
4) 恢复实时网络
5) 修复SOTER Key
6) 关于烧录密钥
7) SELinux模式更改
8) 返回"
break
;;

*) 
echo -e "\033[33m无效的选项\033[0m";;
esac
done
;;

"SELinux模式更改")
clear
# 获取当前SELinux状态
selinux_status=$(getenforce)

# 根据状态设置变量
if [[ "$selinux_status" == "Enforcing" ]]; then
    SELINUX="严格"
    STATE="初始状态"
elif [[ "$selinux_status" == "Permissive" ]]; then
    SELINUX="宽容"
    STATE="非初始状态"
elif [[ "$selinux_status" == "Disabled" ]]; then
    SELINUX="禁用"
    STATE="非初始状态"
else
    SELINUX="未知"
    STATE="非初始状态"
fi

# 输出定义的变量
echo -e "当前:$SELINUX模式($STATE)"
echo -e ""
PS3='请选择一个操作: '
options=(
    "设置为严格模式(Enforcing)"
    "设置为宽容模式(Permissive)"
    "卸载永久写入"
    "返回"
)
select opt in "${options[@]}"
do
case $opt in
"设置为严格模式(Enforcing)")
clear
selinux1_ls() {
clear
# 获取当前SELinux状态
CURRENT_STATUS=$(getenforce)

# 检查是否已经是宽容模式
if [ "$CURRENT_STATUS" = "Enforcing" ]; then
    echo -e "🛡️SELinux已经是严格模式。"
    exit 0
fi

# 如果不是宽容模式，则进行修改
echo -e "正在将SELinux修改为严格模式..."
setenforce 1
sleep 2

# 验证修改结果
clear
echo -e "------------------------------------------------"
echo -e "✅完成修改！"
echo -e "  • 当前: $(getenforce)"
echo -e "  • 修改模式:$MODE"
echo -e "------------------------------------------------"
}


selinux1_yj() {
clear
# 检查并创建目录
SERVICES=/data/adb/service.d

if [ -d "$SERVICES" ]; then
    echo -e "已找到写入地址"
    sleep 1
else
    echo -e "已找到写入地址"
    mkdir -p "$SERVICES"
    chmod 755 "$SERVICES"
    sleep 1
fi

# 服务脚本路径
SERVICE_SCRIPT="/data/adb/service.d/sukisutd_selinux.sh"

# 删除旧版本
rm -f "$SERVICE_SCRIPT"

# 创建服务脚本
cat > "$SERVICE_SCRIPT" << 'EOF'
#!/system/bin/sh
# 每次开机自动设置SELinux为严格模式

# 等待系统启动完成
while [ "$(getprop sys.boot_completed)" != "1" ]; do
    sleep 1
done

# 给系统一点时间完全启动
sleep 2

# 当前状态
CURRENT_MODE=$(getenforce 2>/dev/null)

# 如果是宽容模式，就设置为严格模式
if [ "$CURRENT_MODE" = "Permissive" ]; then
    # 主要执行命令
    setenforce 1
fi
EOF

# 设置权限
chmod 755 "$SERVICE_SCRIPT"

# 立即生效
setenforce 1

# 验证修改结果
clear
echo -e "------------------------------------------------"
echo -e "✅完成修改！"
echo -e "  • 当前: $(getenforce)"
echo -e "  • 修改模式:$MODE"
echo -e "------------------------------------------------"
}

# 询问是否永久写入
while true; do
    echo -e "请选择写入方式："
    echo -e "1.永久写入(永久生效)"
    echo -e "2.临时写入(推荐，仅本次开机有效)"
    echo -e "q.退出"
    echo -n "请选择 [1/2/q]: "
    read -r choice
    
    case "$choice" in
        [1]* )
            MODE="永久"
            selinux1_yj
            break
            ;;
        [2]* )
            FLAG=""
            MODE="临时"
            selinux1_ls
            break
            ;;
        [Qq]* )
            clear
            break
            ;;
        * )
            clear
            echo -e "❌ 请输入1、2或q"
            echo -e ""
            ;;
    esac
done

echo -e ""
echo -e "1) 设置为严格模式(Enforcing)
2) 设置为宽容模式(Permissive)
3) 卸载永久写入
4) 返回"
;;

"设置为宽容模式(Permissive)")
clear
selinux0_ls() {
clear
# 获取当前SELinux状态
CURRENT_STATUS=$(getenforce)

# 检查是否已经是宽容模式
if [ "$CURRENT_STATUS" = "Permissive" ]; then
    echo -e "🛡️SELinux已经是宽容模式。"
    exit 0
fi

# 如果不是宽容模式，则进行修改
echo -e "正在将SELinux修改为宽容模式..."
setenforce 0
sleep 2

# 验证修改结果
clear
echo -e "------------------------------------------------"
echo -e "✅完成修改！"
echo -e "  • 当前: $(getenforce)"
echo -e "  • 修改模式:$MODE"
echo -e "------------------------------------------------"
}


selinux0_yj() {
clear
# 检查并创建目录
SERVICES=/data/adb/service.d

if [ -d "$SERVICES" ]; then
    echo -e "已找到写入地址"
    sleep 1
else
    echo -e "已找到写入地址"
    mkdir -p "$SERVICES"
    chmod 755 "$SERVICES"
    sleep 1
fi

# 服务脚本路径
SERVICE_SCRIPT="/data/adb/service.d/sukisutd_selinux.sh"

# 删除旧版本
rm -f "$SERVICE_SCRIPT"

# 创建服务脚本
cat > "$SERVICE_SCRIPT" << 'EOF'
#!/system/bin/sh
# 每次开机自动设置SELinux为宽容模式

# 等待系统启动完成
while [ "$(getprop sys.boot_completed)" != "1" ]; do
    sleep 1
done

# 给系统一点时间完全启动
sleep 2

# 当前状态
CURRENT_MODE=$(getenforce 2>/dev/null)

# 如果是严格模式，就设置为宽容模式
if [ "$CURRENT_MODE" = "Enforcing" ]; then
    # 主要执行命令
    setenforce 0
fi
EOF

# 设置权限
chmod 755 "$SERVICE_SCRIPT"

# 立即生效
setenforce 0

# 验证修改结果
clear
echo -e "------------------------------------------------"
echo -e "✅完成修改！"
echo -e "  • 当前: $(getenforce)"
echo -e "  • 修改模式:$MODE"
echo -e "------------------------------------------------"
}

# 询问是否永久写入
while true; do
    echo -e "请选择写入方式："
    echo -e "1.永久写入(永久生效)"
    echo -e "2.临时写入(推荐，仅本次开机有效)"
    echo -e "q.退出"
    echo -n "请选择 [1/2/q]: "
    read -r choice
    
    case "$choice" in
        [1]* )
            MODE="永久"
            selinux0_yj
            break
            ;;
        [2]* )
            FLAG=""
            MODE="临时"
            selinux0_ls
            break
            ;;
        [Qq]* )
            clear
            break
            ;;
        * )
            clear
            echo -e "❌ 请输入1、2或q"
            echo -e ""
            ;;
    esac
done

echo -e ""
echo -e "1) 设置为严格模式(Enforcing)
2) 设置为宽容模式(Permissive)
3) 卸载永久写入
4) 返回"
;;

"卸载永久写入")
clear
# 服务脚本路径
SERVICE_SCRIPT="/data/adb/service.d/sukisutd_selinux.sh"

echo -e "正在遍历写入地址..."
sleep 1

if [ -f "$SERVICE_SCRIPT" ]; then
    echo -e "找到写入"
    sleep 1
    echo -e "正在卸载..."
    rm -f "$SERVICE_SCRIPT"
    sleep 1
    clear
    echo -e "✅完成"
else
    echo -e "❌找不到写入！"
    echo -e "  • 请确认已通过本脚本永久写入"
    exit 1
fi

echo -e ""
echo -e "1) 设置为严格模式(Enforcing)
2) 设置为宽容模式(Permissive)
3) 卸载永久写入
4) 返回"
;;

"返回")
clear
echo -e "1) 解决隐藏应用列表Vold app data隔离导致的问题
2) 可疑进程杀死
3) 更改设备标识ID
4) 恢复实时网络
5) 修复SOTER Key
6) 关于烧录密钥
7) SELinux模式更改
8) 返回"
break
;;

*) 
echo -e "\033[33m无效的选项\033[0m";;
esac
done
;;

"返回")
clear
echo -e "\033[1;32m主菜单\033[0m"
echo -e "[1] Luna相关
[2] 牛头相关
[3] 春秋相关
[4] Hunter相关
[5] 设备属性恢复
[6] 游戏相关
[7] 其他功能
[8] 退出"

;;

*) 
echo -e "\033[33m无效的选项\033[0m";;
esac
done
;;

"退出")
break
;;

*) 
echo -e "\033[33m无效的选项\033[0m";;
esac
done
}