#!/bin/bash

# APK签名破解工具 - Linux/MacOS执行脚本
# 修改：只在当前目录执行

# 统一颜色定义
RED='\033[0;31m'      # 错误/危险
GREEN='\033[0;32m'    # 成功/正常
YELLOW='\033[1;33m'   # 警告/提示
BLUE='\033[1;34m'     # 信息/标题
CYAN='\033[0;36m'     # 步骤/过程
PURPLE='\033[1;35m'   # 选项/输入
NC='\033[0m'          # 重置颜色

# 设置工具目录为当前目录
TOOL_DIR=$(pwd)

# 创建必要的目录结构
mkdir -p "待处理" "已处理"

# 检查必要的文件
required_files=("nkstool.jar" "config.txt" "test.keystore")
for file in "${required_files[@]}"; do
    if [ ! -f "$file" ]; then
        echo -e "${RED}错误：缺少必要文件 '$file'${NC}"
        exit 1
    fi
done

# 获取待处理的APK文件列表
apk_files=("待处理"/*.apk)
if [ ${#apk_files[@]} -eq 0 ]; then
    echo -e "${YELLOW}提示：待处理目录中没有找到APK文件${NC}"
    echo -e "${CYAN}请将需要处理的APK文件放入 './待处理' 目录${NC}"
    exit 0
fi

echo -e "${BLUE}========================================"
echo -e "  APK签名校验破解工具 - Linux/MacOS版"
echo -e "========================================"
echo -e "工作目录: $TOOL_DIR"
echo -e "找到 ${#apk_files[@]} 个待处理APK文件"
echo -e "签名配置: $(grep 'sign.file' config.txt | cut -d'=' -f2)"
echo -e "========================================${NC}"

# 处理每个APK文件
success_count=0
for apk_path in "${apk_files[@]}"; do
    # 提取文件名（不含路径）
    src_apk=$(basename "$apk_path")
    # 提取基本名称（不含扩展名）
    base_name="${src_apk%.*}"
    
    # 使用安全的输出文件名
    out_apk="${base_name}_cracked.apk"
    # 原始APK在已处理目录中的新名称
    orig_apk_name="${base_name}_original.apk"
    
    # 更新配置文件中的文件名
    sed -i.bak "s|apk.signed=.*|apk.signed=$src_apk|; s|apk.src=.*|apk.src=$src_apk|; s|apk.out=.*|apk.out=$out_apk|" config.txt
    
    echo -e "${CYAN}========================================"
    echo -e "正在处理: $src_apk"
    echo -e "输出文件: $out_apk"
    echo -e "========================================${NC}"
    
    # 复制待处理APK到当前目录
    cp -f "$apk_path" "./$src_apk"
    
    # 设置UTF-8编码环境并执行签名破解
    LC_ALL=en_US.UTF-8 java -Dfile.encoding=UTF-8 -jar nkstool.jar
    
    # 检查处理结果
    if [ -f "$out_apk" ]; then
        # 移动输出文件到已处理目录并重命名
        mv -f "$out_apk" "已处理/${out_apk}"
        
        # 移动原始文件到已处理目录并重命名为原包
        mv -f "$apk_path" "已处理/${orig_apk_name}"
        
        # 删除当前目录的临时文件
        rm -f "./$src_apk"
        
        echo -e "${GREEN}处理成功！${NC}"
        ((success_count++))
    else
        echo -e "${RED}处理失败：$src_apk${NC}"
        echo -e "${YELLOW}可能原因："
        echo -e "1. 文件名包含特殊字符或中文"
        echo -e "2. APK文件结构不兼容"
        echo -e "3. 签名工具配置问题${NC}"
        
        # 清理临时文件
        rm -f "./$src_apk"
    fi
    
    # 恢复原始配置文件
    mv -f config.txt.bak config.txt
    
    # 删除临时生成的备份文件
    rm -f config.txt.bak
done

# 最终结果汇总
echo -e "${BLUE}========================================"
echo -e "处理完成！"
echo -e "成功处理: $success_count 个文件"
echo -e "失败处理: $((${#apk_files[@]} - success_count)) 个文件"
echo -e "处理结果保存在: ./已处理/"
echo -e "========================================${NC}"

# 列出已处理目录
if [ $success_count -gt 0 ]; then
    echo -e "\n${CYAN}已处理目录内容:${NC}"
    ls -lh "./已处理/"
fi

# 失败文件处理建议
if [ $success_count -lt ${#apk_files[@]} ]; then
    echo -e "\n${RED}失败文件处理建议："
    echo -e "1. 检查APK文件名是否包含特殊字符或中文"
    echo -e "2. 尝试重命名为纯英文名称（如：myapp.apk）"
    echo -e "3. 确保APK文件未损坏且是有效的Android应用"
    echo -e "4. 检查config.txt中的签名配置是否正确${NC}"
fi

echo -e "\n${GREEN}所有处理完成的文件已保存在: ./已处理/${NC}"