#!/data/data/com.termux/files/usr/bin/bash
# 高强度加密脚本（输出文件名规则：原文件名.sh → 原文件名.sh.sh）
# 修复语法错误 + 自定义输出文件名格式

# 颜色定义
GREEN="\033[32m"
YELLOW="\033[33m"
BLUE="\033[34m"
RED="\033[31m"
RESET="\033[0m"

# 生成随机密钥（16位十六进制）
generate_key() {
    head -c 16 /dev/urandom | xxd -ps -c 16
}

# XOR加密函数
xor_encrypt() {
    local data="$1"
    local key="$2"
    local key_len=${#key}
    local result=""
    local i=0

    key=$(echo "$key" | xxd -ps -r)  # 密钥转为字符

    while IFS= read -r -n1 char; do
        local key_char="${key:i%key_len:1}"
        local xor_val=$(( $(printf "%d" "'$char") ^ $(printf "%d" "'$key_char") ))
        result+=$(printf "%02x" "$xor_val")
        i=$((i+1))
    done <<< "$data"

    echo "$result"
}

# 主流程：输入文件路径
echo -e "${BLUE}===== 高强度SH脚本加密工具（修复版） ====="
echo -e "请输入要加密的 .sh 脚本文件路径（例：~/test.sh 或 /sdcard/script.sh）"
read -p "文件路径: " INPUT_FILE

# 检查文件是否存在
if [ ! -f "$INPUT_FILE" ]; then
    echo -e "${RED}错误：文件 '$INPUT_FILE' 不存在！${RESET}"
    exit 1
fi

# 定义输出文件（核心修改：原文件名.sh → 原文件名.sh.sh）
FILENAME=$(basename "$INPUT_FILE")  # 保留原文件名（含.sh）
DIRNAME=$(dirname "$INPUT_FILE")
OUTPUT_FILE="${DIRNAME}/${FILENAME}.sh"  # 在原文件名后直接加.sh

# 读取原内容并加密
ORIGINAL_CONTENT=$(cat "$INPUT_FILE")
BASE64_DATA=$(echo "$ORIGINAL_CONTENT" | base64 -w0)
RANDOM_KEY=$(generate_key)
XOR_DATA=$(xor_encrypt "$BASE64_DATA" "$RANDOM_KEY")
FINAL_DATA=$(echo "$XOR_DATA" | xxd -ps -c 256)
RANDOM_STR=$(head -c 8 /dev/urandom | xxd -ps -c 8)

# 生成加密后脚本
{
    echo "#!/bin/sh"
    echo "# 高强度加密脚本（修复版）"
    echo "KEY='$RANDOM_KEY'"
    echo "DATA='$FINAL_DATA'"
    echo "RAND='$RANDOM_STR'"
    echo ""
    echo 'decode() {'
    echo '    local clean_data=$(echo "$DATA" | tr -d "$RAND")'
    echo '    local xor_data=$(echo "$clean_data" | xxd -ps -r)'
    echo '    local key=$(echo "$KEY" | xxd -ps -r)'
    echo '    local key_len=${#key}'
    echo '    local result=""'
    echo '    local i=0'
    echo '    while IFS= read -r -n2 char; do'
    echo '        if [ -n "$char" ]; then'
    echo '            local byte=$(printf "%d" 0x$char)'
    echo '            local key_char="${key:i%key_len:1}"'
    echo '            local dec_byte=$(( byte ^ $(printf "%d" "'"'\$key_char"'") ))'
    echo '            result+=$(printf "%c" "$dec_byte")'
    echo '            i=$((i+1))'
    echo '        fi'
    echo '    done <<< "$xor_data"'
    echo '    echo "$result" | base64 -d | sh'
    echo '}'
    echo ""
    echo 'decode'
} > "$OUTPUT_FILE"

# 赋予执行权限
chmod +x "$OUTPUT_FILE"

# 输出结果
echo -e "\n${GREEN}加密成功！${RESET}"
echo -e "原文件：${YELLOW}$INPUT_FILE${RESET}"
echo -e "加密后文件：${BLUE}$OUTPUT_FILE${RESET}"
echo -e "测试执行：${YELLOW}./$(basename "$OUTPUT_FILE")${RESET}（需进入文件所在目录）"
echo -e "${BLUE}===== 操作完成 =====${RESET}"
