#!/bin/bash

# 百度APK加固交互式脚本（免费版）
# 使用方法：./baidu.sh

# 检查是否在baidu目录内运行
if [[ $(basename "$PWD") != "baidu" ]]; then
    echo -e "${RED}错误: 此脚本必须在名为'baidu'的目录内运行${NC}"
    echo "请将脚本和工具放在baidu目录中，然后在该目录下运行"
    exit 1
fi

# 设置默认参数
URL="https://apkprotect.baidu.com"
TYPE="free"
TIMEOUT=300
TOOL_NAME="apkprotect"
TOOL_PATH="./$TOOL_NAME"
APKSIGNER_PATH="./apksigner.jar"
CONFIG_FILE="./baidu_protect_config"
LOG_FILE="./baidu_protect.log"

# 内置Akey和Skey（默认作者的密钥，额度为100个，用完需要更换密钥）
AKEY="ZS0ownZHE3A47pvU"
SKEY="tr123vVZK4M-wYKvgtoqRSHGVtwR0Pra"

# 内置默认签名信息（默认签名信息，可以自定义）
KEYSTORE_PATH="./debug.keystore" #签名文件路径
KEYSTORE_PASSWORD="android" #密钥库密码
KEY_ALIAS="androiddebugkey" #别名
KEY_PASSWORD="android" #别名密码

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

# 检查工具是否存在
check_tool() {
    if [ ! -f "$TOOL_PATH" ]; then
        echo -e "${RED}错误: 加固工具 $TOOL_NAME 不存在${NC}"
        echo "请将百度加固工具放置在同一目录下并命名为: $TOOL_NAME"
        return 1
    fi
    
    if [ ! -x "$TOOL_PATH" ]; then
        chmod +x "$TOOL_PATH"
    fi
    return 0
}

# 检查apksigner是否存在
check_apksigner() {
    if [ ! -f "$APKSIGNER_PATH" ]; then
        echo -e "${YELLOW}警告: apksigner.jar 不存在，将跳过签名步骤${NC}"
        return 1
    fi
    return 0
}

# 加载配置
load_config() {
    if [ -f "$CONFIG_FILE" ]; then
        source "$CONFIG_FILE"
        echo -e "${GREEN}已加载保存的配置${NC}"
    else
        echo -e "${YELLOW}没有找到保存的配置，将使用内置默认值${NC}"
        echo -e "${GREEN}已使用内置的Akey和Skey${NC}"
        echo -e "${GREEN}已使用内置的默认签名信息${NC}"
    fi
}

# 保存配置
save_config() {
    echo "AKEY=\"$AKEY\"" > "$CONFIG_FILE"
    echo "SKEY=\"$SKEY\"" >> "$CONFIG_FILE"
    echo "URL=\"$URL\"" >> "$CONFIG_FILE"
    echo "TIMEOUT=\"$TIMEOUT\"" >> "$CONFIG_FILE"
    echo "KEYSTORE_PATH=\"$KEYSTORE_PATH\"" >> "$CONFIG_FILE"
    echo "KEYSTORE_PASSWORD=\"$KEYSTORE_PASSWORD\"" >> "$CONFIG_FILE"
    echo "KEY_ALIAS=\"$KEY_ALIAS\"" >> "$CONFIG_FILE"
    echo "KEY_PASSWORD=\"$KEY_PASSWORD\"" >> "$CONFIG_FILE"
    echo -e "${GREEN}配置已保存${NC}"
}

# 显示获取密钥的引导
show_key_guide() {
    clear
    echo -e "${BLUE}=========================================${NC}"
    echo -e "${BLUE}        Access Key 和 Security Key 获取指南 ${NC}"
    echo -e "${BLUE}=========================================${NC}"
    echo -e ""
    echo -e "${YELLOW}获取步骤:${NC}"
    echo -e "1. 访问百度应用加固平台: ${CYAN}https://apkprotect.baidu.com${NC}"
    echo -e "2. 注册并登录您的账号"
    echo -e "3. 进入「加固配置」或「账户设置」页面"
    echo -e "4. 找到「Access Key」和「Security Key」选项"
    echo -e "5. 如果没有现成的密钥，可以申请生成新的密钥对"
    echo -e "6. 复制Access Key和Security Key到本工具中"
    echo -e ""
    echo -e "${YELLOW}注意事项:${NC}"
    echo -e "- 请妥善保管您的密钥，不要泄露给他人"
    echo -e "- 不同账户的密钥不同，请使用您自己的密钥"
    echo -e "- 如果密钥泄露，可以在平台重新生成"
    echo -e ""
    echo -e "按任意键返回主菜单..."
    read -n 1 -s
}

# 显示签名设置指南
show_signing_guide() {
    clear
    echo -e "${BLUE}=========================================${NC}"
    echo -e "${BLUE}             APK签名设置指南            ${NC}"
    echo -e "${BLUE}=========================================${NC}"
    echo -e ""
    echo -e "${YELLOW}准备步骤:${NC}"
    echo -e "1. 确保同级目录下有 apksigner.jar 文件"
    echo -e "2. 准备您的签名密钥库文件(.keystore或.jks)"
    echo -e "3. 知道您的密钥库密码、密钥别名和密钥密码"
    echo -e ""
    echo -e "${YELLOW}签名信息说明:${NC}"
    echo -e "- 密钥库路径: 密钥库文件的完整路径"
    echo -e "- 密钥库密码: 打开密钥库所需的密码"
    echo -e "- 密钥别名: 密钥在密钥库中的标识名称"
    echo -e "- 密钥密码: 使用特定密钥所需的密码"
    echo -e ""
    echo -e "${YELLOW}注意事项:${NC}"
    echo -e "- 签名信息会保存在配置文件中，请确保安全"
    echo -e "- 如果忘记签名信息，将无法为APK文件签名"
    echo -e "- 加固后的APK必须签名才能安装到设备上"
    echo -e ""
    echo -e "按任意键返回主菜单..."
    read -n 1 -s
}

# 显示主菜单
show_menu() {
    clear
    echo -e "${BLUE}=========================================${NC}"
    echo -e "${BLUE}         百度APK加固工具 (免费版)       ${NC}"
    echo -e "${BLUE}=========================================${NC}"
    echo -e "当前配置:"
    echo -e "Access Key: ${GREEN}${AKEY}${NC} ${YELLOW}(已内置)${NC}"
    echo -e "Security Key: ${GREEN}${SKEY}${NC} ${YELLOW}(已内置)${NC}"
    echo -e "服务器地址: ${YELLOW}$URL${NC}"
    echo -e "超时时间: ${YELLOW}$TIMEOUT${NC} 秒"
    echo -e "密钥库路径: ${GREEN}${KEYSTORE_PATH}${NC} ${YELLOW}(已内置)${NC}"
    echo -e "密钥库密码: ${GREEN}${KEYSTORE_PASSWORD}${NC} ${YELLOW}(已内置)${NC}"
    echo -e "密钥别名: ${GREEN}${KEY_ALIAS}${NC} ${YELLOW}(已内置)${NC}"
    echo -e "密钥密码: ${GREEN}${KEY_PASSWORD}${NC} ${YELLOW}(已内置)${NC}"
    echo -e "${BLUE}=========================================${NC}"
    echo -e "请选择操作:"
    echo -e "1. 设置Access Key和Security Key (已内置，无需设置)"
    echo -e "2. 如何获取Access Key和Security Key"
    echo -e "3. 设置服务器地址 (当前: $URL)"
    echo -e "4. 设置超时时间 (当前: $TIMEOUT秒)"
    echo -e "5. 设置APK签名信息 (已内置，无需设置)"
    echo -e "6. APK签名设置指南"
    echo -e "7. 执行APK加固"
    echo -e "8. 保存当前配置"
    echo -e "9. 显示帮助信息"
    echo -e "0. 退出"
    echo -e "${BLUE}=========================================${NC}"
    echo -n "请输入选项 [0-9]: "
}

# 设置密钥
set_keys() {
    echo -e "${YELLOW}已内置Akey和Skey，无需设置${NC}"
    echo -e "当前Access Key: ${GREEN}$AKEY${NC}"
    echo -e "当前Security Key: ${GREEN}$SKEY${NC}"
    echo -n "是否要修改? [y/N]: "
    read -r confirm
    if [[ "$confirm" =~ ^[Yy]$ ]]; then
        echo -n "请输入Access Key: "
        read -r AKEY
        echo -n "请输入Security Key: "
        read -r -s SKEY
        echo
        echo -e "${GREEN}密钥已更新${NC}"
    else
        echo -e "${YELLOW}已保留内置密钥${NC}"
    fi
    sleep 1
}

# 设置服务器地址
set_url() {
    echo -n "请输入服务器地址 (默认: $URL): "
    read -r new_url
    if [ -n "$new_url" ]; then
        URL="$new_url"
        echo -e "${GREEN}服务器地址已更新为: $URL${NC}"
    else
        echo -e "${YELLOW}使用默认服务器地址: $URL${NC}"
    fi
    sleep 1
}

# 设置超时时间
set_timeout() {
    echo -n "请输入超时时间(秒) (默认: $TIMEOUT): "
    read -r new_timeout
    if [ -n "$new_timeout" ] && [[ "$new_timeout" =~ ^[0-9]+$ ]]; then
        TIMEOUT="$new_timeout"
        echo -e "${GREEN}超时时间已更新为: $TIMEOUT秒${NC}"
    else
        echo -e "${YELLOW}使用默认超时时间: $TIMEOUT秒${NC}"
    fi
    sleep 1
}

# 设置签名信息
set_signing_info() {
    echo -e "${YELLOW}已内置默认签名信息，无需设置${NC}"
    echo -e "当前密钥库路径: ${GREEN}$KEYSTORE_PATH${NC}"
    echo -e "当前密钥库密码: ${GREEN}$KEYSTORE_PASSWORD${NC}"
    echo -e "当前密钥别名: ${GREEN}$KEY_ALIAS${NC}"
    echo -e "当前密钥密码: ${GREEN}$KEY_PASSWORD${NC}"
    echo -n "是否要修改? [y/N]: "
    read -r confirm
    if [[ "$confirm" =~ ^[Yy]$ ]]; then
        echo -n "请输入密钥库路径: "
        read -r KEYSTORE_PATH
        echo -n "请输入密钥库密码: "
        read -r -s KEYSTORE_PASSWORD
        echo
        echo -n "请输入密钥别名: "
        read -r KEY_ALIAS
        echo -n "请输入密钥密码: "
        read -r -s KEY_PASSWORD
        echo
        echo -e "${GREEN}签名信息已更新${NC}"
    else
        echo -e "${YELLOW}已保留内置签名信息${NC}"
    fi
    sleep 1
}

# 验证参数
validate_params() {
    if [ -z "$AKEY" ] || [ -z "$SKEY" ]; then
        echo -e "${RED}错误: Access Key和Security Key不能为空${NC}"
        return 1
    fi
    return 0
}

# 查找当前目录下的APK文件
find_apk_files() {
    local apk_files=()
    while IFS= read -r -d $'\0' file; do
        apk_files+=("$file")
    done < <(find . -maxdepth 1 -name "*.apk" -print0)
    
    echo "${apk_files[@]}"
}

# 选择输入APK文件
select_input_file() {
    echo -e "${YELLOW}正在查找当前目录下的APK文件...${NC}"
    
    # 查找APK文件
    local apk_files=()
    while IFS= read -r -d $'\0' file; do
        apk_files+=("$file")
    done < <(find . -maxdepth 1 -name "*.apk" -print0 2>/dev/null)
    
    if [ ${#apk_files[@]} -eq 0 ]; then
        echo -e "${YELLOW}当前目录下未找到APK文件${NC}"
        echo -n "请输入要加固的APK文件路径: "
        read -r INPUT_FILE
    else
        echo -e "${GREEN}找到以下APK文件:${NC}"
        for i in "${!apk_files[@]}"; do
            echo -e "${GREEN}$((i+1)).${NC} ${apk_files[$i]}"
        done
        echo -e "${GREEN}$(( ${#apk_files[@]} + 1 )).${NC} 手动输入APK文件路径"
        
        while true; do
            echo -n "请选择文件 [1-$(( ${#apk_files[@]} + 1 ))]: "
            read -r choice
            
            if [[ "$choice" =~ ^[0-9]+$ ]] && [ "$choice" -ge 1 ] && [ "$choice" -le $(( ${#apk_files[@]} + 1 )) ]; then
                if [ "$choice" -le ${#apk_files[@]} ]; then
                    INPUT_FILE="${apk_files[$((choice-1))]}"
                    echo -e "${GREEN}已选择: $INPUT_FILE${NC}"
                    break
                else
                    echo -n "请输入要加固的APK文件路径: "
                    read -r INPUT_FILE
                    break
                fi
            else
                echo -e "${RED}无效选择，请重新输入${NC}"
            fi
        done
    fi
    
    if [ ! -f "$INPUT_FILE" ]; then
        echo -e "${RED}错误: 文件不存在: $INPUT_FILE${NC}"
        return 1
    fi
    
    # 检查文件扩展名
    if [[ "$INPUT_FILE" != *.apk ]]; then
        echo -e "${RED}错误: 文件不是APK格式: $INPUT_FILE${NC}"
        return 1
    fi
    
    return 0
}

# 选择输出文件
select_output_file() {
    # 创建out目录（如果不存在）
    mkdir -p "./out"
    
    # 获取输入文件名（不含路径和扩展名）
    local input_filename=$(basename "$INPUT_FILE")
    input_filename="${input_filename%.*}"
    
    # 生成默认输出文件名（不带时间戳，使用原文件名加加固标识）
    DEFAULT_OUTPUT_FILE="./out/${input_filename}_protected.apk"
    
    # 检查文件是否已存在，如果存在则添加序号
    local counter=1
    local final_output="$DEFAULT_OUTPUT_FILE"
    while [ -f "$final_output" ]; do
        final_output="./out/${input_filename}_protected_${counter}.apk"
        ((counter++))
    done
    
    echo -n "请输入输出APK文件路径 (默认: $final_output): "
    read -r OUTPUT_FILE
    if [ -z "$OUTPUT_FILE" ]; then
        OUTPUT_FILE="$final_output"
    fi
    
    # 确保输出文件有.apk扩展名
    if [[ "$OUTPUT_FILE" != *.apk ]]; then
        OUTPUT_FILE="${OUTPUT_FILE}.apk"
        echo -e "${YELLOW}已添加.apk扩展名: $OUTPUT_FILE${NC}"
    fi
    
    # 确保输出目录存在
    local output_dir=$(dirname "$OUTPUT_FILE")
    mkdir -p "$output_dir"
    
    return 0
}

# 显示进度动画
show_progress() {
    local pid=$1
    local delay=0.5
    local spinstr='|/-\'
    while [ "$(ps a | awk '{print $1}' | grep $pid)" ]; do
        local temp=${spinstr#?}
        printf " [%c]  " "$spinstr"
        local spinstr=$temp${spinstr%"$temp"}
        sleep $delay
        printf "\b\b\b\b\b\b"
    done
    printf "    \b\b\b\b"
}

# 从日志中提取任务ID
extract_task_id() {
    if [ -f "$LOG_FILE" ]; then
        # 尝试从日志中提取任务ID
        local task_id=$(grep -o "taskId:[0-9a-zA-Z]\+" "$LOG_FILE" | head -1 | cut -d: -f2)
        if [ -n "$task_id" ]; then
            echo "$task_id"
            return 0
        fi
    fi
    return 1
}

# 重命名输出文件以包含任务ID
rename_output_with_taskid() {
    local task_id="$1"
    local original_output="$2"
    
    if [ -z "$task_id" ] || [ ! -f "$original_output" ]; then
        return 1
    fi
    
    # 获取文件目录和文件名
    local output_dir=$(dirname "$original_output")
    local filename=$(basename "$original_output")
    local extension="${filename##*.}"
    local name="${filename%.*}"
    
    # 新文件名（包含任务ID）
    local new_filename="${name}_${task_id}.${extension}"
    local new_output_path="${output_dir}/${new_filename}"
    
    # 重命名文件
    mv "$original_output" "$new_output_path"
    
    if [ $? -eq 0 ]; then
        echo "$new_output_path"
        return 0
    else
        return 1
    fi
}

# 使用apksigner对APK进行签名
sign_apk() {
    local unsigned_apk="$1"
    local signed_apk="${unsigned_apk%.apk}_signed.apk"
    
    echo -e "${BLUE}开始对APK进行签名...${NC}"
    
    # 检查签名信息是否完整
    if [ -z "$KEYSTORE_PATH" ] || [ -z "$KEYSTORE_PASSWORD" ] || [ -z "$KEY_ALIAS" ] || [ -z "$KEY_PASSWORD" ]; then
        echo -e "${YELLOW}签名信息不完整，跳过签名步骤${NC}"
        return 1
    fi
    
    # 检查密钥库文件是否存在
    if [ ! -f "$KEYSTORE_PATH" ]; then
        echo -e "${YELLOW}密钥库文件不存在: $KEYSTORE_PATH，跳过签名步骤${NC}"
        return 1
    fi
    
    # 执行签名命令
    java -jar "$APKSIGNER_PATH" sign \
        --ks "$KEYSTORE_PATH" \
        --ks-pass "pass:$KEYSTORE_PASSWORD" \
        --ks-key-alias "$KEY_ALIAS" \
        --key-pass "pass:$KEY_PASSWORD" \
        --out "$signed_apk" \
        "$unsigned_apk"
    
    if [ $? -eq 0 ]; then
        echo -e "${GREEN}签名成功! 已签名文件: $signed_apk${NC}"
        return 0
    else
        echo -e "${RED}签名失败!${NC}"
        return 1
    fi
}

# 执行APK加固
protect_apk() {
    echo -e "${BLUE}开始加固APK文件...${NC}"
    
    if ! validate_params; then
        sleep 2
        return 1
    fi
    
    if ! select_input_file; then
        sleep 2
        return 1
    fi
    
    if ! select_output_file; then
        sleep 2
        return 1
    fi
    
    echo -e "${YELLOW}加固参数:${NC}"
    echo -e "输入文件: ${GREEN}$INPUT_FILE${NC}"
    echo -e "输出文件: ${GREEN}$OUTPUT_FILE${NC}"
    echo -e "加固类型: ${GREEN}$TYPE${NC}"
    echo -e "超时时间: ${GREEN}$TIMEOUT${NC}秒"
    
    echo -n "是否开始加固? [Y/n]: "
    read -r confirm
    if [[ "$confirm" =~ ^[Nn]$ ]]; then
        echo -e "${YELLOW}已取消加固操作${NC}"
        sleep 1
        return 0
    fi
    
    # 执行加固命令（隐藏命令输出，显示自定义提示）
    echo -e "${BLUE}[1/4] 正在准备加固环境...${NC}"
    sleep 1
    
    # 在后台执行加固命令，重定向输出到日志文件
    "$TOOL_PATH" -url "$URL" -akey "$AKEY" -skey "$SKEY" -i "$INPUT_FILE" -o "$OUTPUT_FILE" -type "$TYPE" -t "$TIMEOUT" > "$LOG_FILE" 2>&1 &
    local pid=$!
    
    # 显示进度动画
    show_progress $pid &
    local progress_pid=$!
    
    # 等待一段时间后显示步骤3
    sleep 3
    echo -e "${BLUE}[2/4] 正在上传APK文件到服务器...${NC}"
    
    # 再等待一段时间后显示步骤3
    sleep 3
    echo -e "${BLUE}[3/4] 服务器正在加固处理中...${NC}"
    
    # 等待命令完成
    wait $pid
    local exit_code=$?
    
    # 停止进度动画
    kill $progress_pid 2>/dev/null
    wait $progress_pid 2>/dev/null
    
    # 检查执行结果
    if [ $exit_code -eq 0 ]; then
        echo -e "${BLUE}[4/4] 加固完成!${NC}"
        
        # 尝试提取任务ID
        local task_id=$(extract_task_id)
        if [ -n "$task_id" ]; then
            echo -e "${GREEN}任务ID: $task_id${NC}"
            
            # 重命名输出文件以包含任务ID
            local new_output=$(rename_output_with_taskid "$task_id" "$OUTPUT_FILE")
            if [ $? -eq 0 ]; then
                echo -e "${GREEN}加固成功! 输出文件已重命名为: $new_output${NC}"
                OUTPUT_FILE="$new_output" # 更新OUTPUT_FILE为重命名后的文件
            else
                echo -e "${GREEN}加固成功! 输出文件: $OUTPUT_FILE${NC}"
                echo -e "${YELLOW}警告: 无法重命名文件包含任务ID${NC}"
            fi
        else
            echo -e "${GREEN}加固成功! 输出文件: $OUTPUT_FILE${NC}"
            echo -e "${YELLOW}警告: 无法从日志中提取任务ID${NC}"
        fi
        
        # 检查apksigner是否存在并尝试签名
        if check_apksigner; then
            echo -n "是否对加固后的APK进行签名? [Y/n]: "
            read -r sign_confirm
            if [[ ! "$sign_confirm" =~ ^[Nn]$ ]]; then
                sign_apk "$OUTPUT_FILE"
            else
                echo -e "${YELLOW}已跳过签名步骤${NC}"
            fi
        fi
    else
        echo -e "${RED}加固失败，错误码: $exit_code${NC}"
        echo -e "${YELLOW}请参考以下错误码说明:${NC}"
        case $exit_code in
            1) echo "客户端错误,如参数错误、输入文件不存在";;
            2) echo "超出当日加固限额";;
            3) echo "超出可加固包名数";;
            4) echo "试用期帐号已过期";;
            5) echo "客户端签名失败";;
            6) echo "客户端输入文件不存在或没权限";;
            7) echo "客户端上传文件失败";;
            8) echo "用户不存在或被禁用";;
            9) echo "厂商不存在或被禁用";;
            10) echo "服务端验证签名失败";;
            11) echo "服务端解析待加固文件失败";;
            12) echo "服务端读文件失败";;
            13) echo "服务端创建加固任务失败";;
            14) echo "服务端读取输入文件失败";;
            15) echo "文件不可用";;
            16) echo "加固失败";;
            17) echo "APP没有签名或签名错误";;
            18) echo "上传文件已加固（不能重复加固）";;
            20) echo "下载失败";;
            *) echo "未知错误";;
        esac
        
        # 显示日志最后几行
        echo -e "${YELLOW}详细错误信息:${NC}"
        tail -5 "$LOG_FILE"
    fi
    
    echo -n "按任意键继续..."
    read -n 1 -s
    return $exit_code
}

# 显示帮助信息
show_help() {
    clear
    echo -e "${BLUE}=========================================${NC}"
    echo -e "${BLUE}               帮助信息                 ${NC}"
    echo -e "${BLUE}=========================================${NC}"
    echo -e "此脚本用于百度APK加固(免费版)"
    echo -e ""
    echo -e "${YELLOW}使用步骤:${NC}"
    echo -e "1. 脚本已内置Akey/Skey和签名信息，无需设置"
    echo -e "2. 可以选择设置服务器地址和超时时间"
    echo -e "3. 选择执行APK加固"
    echo -e "4. 输入要加固的APK文件路径和输出路径"
    echo -e "5. 确认并开始加固"
    echo -e "6. 加固完成后可选择是否进行签名"
    echo -e ""
    echo -e "${YELLOW}注意事项:${NC}"
    echo -e "- 确保百度加固工具apkprotect在同一目录下"
    echo -e "- 确保apksigner.jar在同一目录下（用于签名）"
    echo -e "- 确保debug.keystore在同一目录下（用于默认签名）"
    echo -e "- 免费版加固有一定的限制，如每日加固数量限制"
    echo -e "- 加固过程可能需要几分钟，请耐心等待"
    echo -e ""
    echo -e "${YELLOW}错误处理:${NC}"
    echo -e "- 详细的错误日志保存在: $LOG_FILE"
    echo -e ""
    echo -e "按任意键返回主菜单..."
    read -n 1 -s
}

# 主循环
main() {
    # 检查是否在baidu目录内运行
    if [[ $(basename "$PWD") != "baidu" ]]; then
        echo -e "${RED}错误: 此脚本必须在名为'baidu'的目录内运行${NC}"
        echo "请将脚本和工具放在baidu目录中，然后在该目录下运行"
        echo -n "按任意键退出..."
        read -n 1 -s
        exit 1
    fi
    
    # 检查加固工具
    if ! check_tool; then
        echo -n "按任意键退出..."
        read -n 1 -s
        exit 1
    fi
    
    # 加载配置
    load_config
    
    while true; do
        show_menu
        read -r option
        case $option in
            1) set_keys;;
            2) show_key_guide;;
            3) set_url;;
            4) set_timeout;;
            5) set_signing_info;;
            6) show_signing_guide;;
            7) protect_apk;;
            8) save_config;;
            9) show_help;;
            0) 
                echo -e "${GREEN}感谢使用百度APK加固工具，再见!${NC}"
                exit 0
                ;;
            *) 
                echo -e "${RED}无效选项，请重新选择${NC}"
                sleep 1
                ;;
        esac
    done
}

# 启动主函数
main