#!/system/bin/sh

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

CUR_DIR=$(pwd)
MODULE_DIR="$CUR_DIR/modules-v4"
SAVE_PATH="/data/adb/cia/v1u/qudong.txt"
ORIG_STR="usa_drv_orig"

# --- 修改后的驱动清理逻辑 ---
if [ -f "$SAVE_PATH" ]; then
    LAST_NAME=$(cat "$SAVE_PATH")
    if [ ! -z "$LAST_NAME" ] && lsmod | grep -qw "$LAST_NAME"; then
        echo -e "${YELLOW}[!] 发现存留驱动: ${PURPLE}$LAST_NAME${NC}"
        
        while true; do
            echo -n -e "${YELLOW}[?] 请按 [回车] 卸载并继续，或输入 [q] 退出: ${NC}"
            read confirm
            
            if [ -z "$confirm" ]; then
                # 用户直接按了回车
                rmmod_msg=$(rmmod "$LAST_NAME" 2>&1)
                if [ $? -eq 0 ]; then
                    echo -e "${GREEN}[+] 卸载成功${NC}"
                    break
                else
                    echo -e "${RED}[-] 卸载失败: $rmmod_msg${NC}"
                    exit 1
                fi
            elif [ "$confirm" = "q" ] || [ "$confirm" = "Q" ]; then
                echo -e "${YELLOW}已取消操作，退出。${NC}"
                exit 0
            else
                echo -e "${RED}[!] 输入无效，只能按回车或输入 q${NC}"
            fi
        done
    fi
fi
# ----------------------------

echo -e "\n${BLUE}--- 请选择驱动文件 (输入 q 退出) ---${NC}"
i=1
unset files
# 这里的处理方式兼容一些精简版的 shell
for file in "$MODULE_DIR"/*.ko; do
    if [ -f "$file" ]; then
        files[$i]="$file"
        echo -e "  ${GREEN}$i)${NC} $(basename "$file")"
        i=$((i+1))
    fi
done

if [ $i -eq 1 ]; then
    echo -e "${RED}[!] 错误: $MODULE_DIR 内无驱动文件${NC}"
    exit 1
fi

echo -e "${BLUE}--------------------------------------${NC}"
echo -n -e "${CYAN}输入编号: ${NC}"
read choice

if [ "$choice" = "q" ] || [ "$choice" = "Q" ]; then
    echo -e "${YELLOW}已取消操作，退出。${NC}"
    exit 0
fi

# 获取选择的文件路径
# 注意：标准 sh 不支持数组，如果环境是 mksh(Android) 或 bash 则没问题
SELECTED_KO="${files[$choice]}"
if [ -z "$SELECTED_KO" ]; then
    echo -e "${RED}[!] 选择无效${NC}"
    exit 1
fi

# 随机化处理
RANDOM_STR=$(tr -dc 'a-zA-Z' < /dev/urandom | head -c 12)
TEMP_KO_NAME="temp_${RANDOM_STR}.ko"
TEMP_KO_PATH="$CUR_DIR/$TEMP_KO_NAME"

# 修改驱动内的特征字符串
sed "s/$ORIG_STR/$RANDOM_STR/g" "$SELECTED_KO" > "$TEMP_KO_PATH"
chmod 644 "$TEMP_KO_PATH"

# 挂载驱动
mkdir -p "$(dirname "$SAVE_PATH")" 2>/dev/null
load_error=$(insmod "$TEMP_KO_PATH" 2>&1)

if [ $? -eq 0 ]; then
    echo -e "${GREEN}>>> [成功] 驱动已挂载: ${PURPLE}$RANDOM_STR${NC}"
    echo "$RANDOM_STR" > "$SAVE_PATH"
else
    echo -e "${RED}>>> [失败] 原因: $load_error${NC}"
    # 尝试查看内核日志辅助排查
    dmesg | tail -n 5 | grep $RANDOM_STR
fi

# 清理临时文件
[ -f "$TEMP_KO_PATH" ] && rm -f "$TEMP_KO_PATH"
