自动化批量解压缩加密文件脚本


1. 软件功能介绍

  1. 支持压缩格式:zip、rar、gzip、bzip(挖个坑,后续计划加入7z)
  2. 运行过程:自动读取目录下所有支持的压缩格式进行自动解压缩
  3. 从文件文本读取密码,自动遍历密码解压缩
  4. 自动部署安装解压缩所需要的软件和环境

2.运行结果展示

  • 当前目录的压缩文件

    image.png

  • 脚本执行结果

    image.png
    $\color{#FF3030}解压出来的文件保存在对应类型的文件夹下$

  • rar > rar_result
  • zip > zip_result
  • bzip > bzip_result
  • gzip > gzip_result

3. 实现代码

#!/bin/bash

#初始化变量
RID=0           #ROOT账户ID
pwd=$PWD        #保存当前路径
key_db=$1       #初始化秘钥文件
E_ERROR=65      #错误退出码
Num=1

#检测运行账号
if [ $UDI -ne "$RID" ];then
    echo "请使用root账号运行" && exit E_ERROR
fi

#传参检测
if [ $# -ne 1 ]
then 
    echo -e "Usage:$0 password_file "
    exit E_ERROR
fi

#清屏
clear   

#打印脚本介绍信息
cat <<EOF
    ######################################################################
    # ================================================================== #
    # 《 Welcome to the automated decryption and decompression script 》 #
    # ================================================================== #
    # 1.Author:Cosann                                                    #
    # 2.Create Time:20220804                                             #
    # 3.Function:uncompress.sh                                           #
    # 3.Version:1.0                                                      #
    # 4.Description:自动化批量解压缩加密文件(从文本读取密码)           #
    #                                                                    #
    ######################################################################
EOF

#打印软件安转提示信息
echo -e "\n开始检查该脚本运行需要的解压缩环境依赖>>>\n"
echo "-------------------------------------"

#环境部署及安装相关解压软件
#zip软件检测
if [ `rpm -qa | grep -E "^zip.*" &> /dev/null;echo $?` -ne 0  ];then
    echo "zip解压环境正在部署中,请稍等..."
    yum install -y zip 2&>1 /dev/null || ( echo ">bzip2安装失败,请尝试手动安装" && exit E_ERROR ) && echo -e ">zip解压环境已部署!"
else
    echo -e ">zip解压环境已部署!"
fi

#unzip软件检测
if [ `rpm -qa | grep -E "^unzip.*" &> /dev/null;echo $?` -ne 0  ];then
    echo "unzip解压环境正在部署中,请稍等..."
    yum install -y unzip 2&>1 /dev/null || ( echo ">unzip安装失败,请尝试手动安装" && exit E_ERROR ) && echo -e ">unzip解压环境已部署!"
else
    echo -e ">unzip解压环境已部署!"
fi

#rar软件检测
rar &> /dev/null 
if ! [ $? -eq 0  ];then
    #Linux版本判断,安装rar-linux
    echo "rar解压环境正在部署中,请稍等...(提示:根据网络情况,一般最快需要等待1分钟~)"
    #检测OS版本
    os=`uname -p | awk -F "_" '{print $2}'`

    #安装对应版本的rar
    if [ $os -eq "64" ]
    then
        cd /tmp/
        wget --no-check-certificate https://www.rarlab.com/rar/rarlinux-x64-612.tar.gz &> /dev/null
        tar -zxf rarlinux-x64-612.tar.gz &> /dev/null
        cd rar &> /dev/null
        ( cp -v rar unrar /usr/local/bin/ &> /dev/null && echo -e ">rar解压环境已部署!" ) || ( cd $pwd && echo ">rar安装失败,请尝试手动安装" && exit E_ERROR )
        #切回原始路径
        cd $pwd

    elif [ $os -eq "32" ]
    then
        cd /tmp/
        wget --no-check-certificate https://www.rarlab.com/rar/rarlinux-x32-612.tar.gz  &> /dev/null
        tar -zxf rarlinux-x32-612.tar.gz &> /dev/null
        cd rar &> /dev/null
        ( cp -v rar unrar /usr/local/bin/ &> /dev/null && echo -e ">rar解压环境已部署!" ) || ( cd $pwd && echo ">rar安装失败,请尝试手动安装" && exit E_ERROR )
        #切回原始路径
        cd $pwd
    fi
else
    echo -e ">rar解压环境已部署!"
fi

#bzip安装
bzip2 -h  &> /dev/null
if ! [ $? -eq 0 ];then
    echo "bzip解压环境正在部署中,请稍等..."
    yum -y install bzip2 2&>1 /dev/null  || ( echo ">bzip2安装失败,请尝试手动安装" && exit E_ERROR ) && echo -e ">bzip解压环境已部署!"
else
    echo -e ">bzip解压环境已部署!"
fi
echo -e "-------------------------------------\n"
echo -e "开始解压加密文件>>>"

#ZIP压缩文件处理块
for i in `find . -name "*.zip"`
do 
    I="${i#./}"
    echo "==============================="
    echo -e "\033[1;32m>>>开始解压缩[$I]文件>>>\033[0m"
    echo -e "-------------------------------"
    cat $key_db | while read key 
    do
    echo -e "尝试解压缩密码:$key"
    unzip -q -o -P $key $i -d ./zip_result/ && echo -e "\033[41m已成功解压$PWD/$I压缩文件,解压缩文件存放在rar_result目录下!!! \033[0m" && break
    done
done

#RAR压缩文件处理块
for i in `find . -name "*.rar"`
do 
    I="${i#./}"
    echo "============================="
    echo -e "\033[1;32m>>>开始解压缩[$I]文件>>>\033[0m"
    echo -e "-----------------------------"
    cat $key_db | while read key 
    do
    echo -e "尝试解压缩密码:$key"
    expect<<-EOF >>result_txt
    spawn unrar  x -r -o+ -p $i ./rar_result/ 
    expect "Enter password*"
    send "$key\r" 
    expect "Reenter password*"
    send "$key\r"
    expect eof
EOF
    cat result_txt | awk 'END{print $NF}' | grep -q OK 
    if [ $? -eq "0" ]
    then
        #删除expect交互结果记录文件
        rm -rf result_txt
        echo -e "\033[41m已成功解压$PWD/$I压缩文件,解压缩文件存放在$PWD/rar_result目录下!!! \033[0m" && break
    fi
    #删除expect交互结果记录文件
    rm -rf result_txt
    done 
done

#GZIP压缩文件处理块
for i in `find . -name "*.tar.gz"`
do 
    I="${i#./}"
    echo "============================="
    echo -e "\033[1;32m>>>开始解压缩[$I]文件>>>\033[0m"
    echo -e "-----------------------------"
    #创建解压缩目录
    if [ ! -d ./gzip_result/ ]
    then
        echo -e "开始创建用于保存解压缩文件的目录"
        mkdir ./gzip_result && echo "gzip_result目录创建成功"
    fi

    while read key
    do
        echo -e "尝试解压缩密码:$key"
        ( openssl des3 -d -k $key -salt -in $i 2>/dev/null | tar xzf - -C ./gzip_result/ 2>/dev/null &&  echo -e "\033[41m已成功解压$PWD/$I压缩文件,解压缩文件存放在$PWD/rar_result目录下!!! \033[0m") && break 
    done < $key_db
done

#BZIP压缩文件处理块
for i in `find . -name "*.tar.bz2"`
do 
    I="${i#./}"
    echo "============================="
    echo -e "\033[1;32m>>>开始解压缩[$I]文件>>>\033[0m"
    echo -e "-----------------------------"
    #创建解压缩目录
    if [ ! -d ./bzip_result/ ]
    then
        echo -e "开始创建用于保存解压缩文件的目录"
        mkdir ./bzip_result/ && echo -e "bzip_result目录创建成功"
    fi

    #密码暴力尝试
    while read key
    do
        echo -e "尝试解压缩密码:$key"
        ( openssl des3 -d -k $key -salt -in $i 2>/dev/null | tar xjf - -C ./bzip_result/ 2>/dev/null &&  echo -e "\033[41m已成功解压$PWD/$I压缩文件,解压缩文件存放在$PWD/rar_result目录下!!! \033[0m" ) && break 
    done < $key_db
done

echo -e "\n脚本执行完毕,感谢使用~" && exit 0

4. 运行前准备

  • 1. 需要两个文件,含有以上代码脚本文件,密码字典文件

    例:以上shell脚本保存为uncompress.sh的脚本文件,创建一个密码字典文件为passwd.txt

  • 密码文件格式
    image.png
  • 2. 赋予脚本执行权

    image.png

  • 3. 将脚本文件和密码放在同一目录下(建议,使用绝对路径也可以)

    image.png

5. 脚本使用案例

  • 5.1 运行脚本

    image.png

  • 5.2 脚本自动部署环境

    image.png

  • 5.3 开始自动解密解压缩

    image.png

  • 5.4 脚本执行完毕

    image.png

  • 5.5 查看解压缩出来的文件

    image.png


    以上就是一个简单的自动解压缩脚本,欢迎交流学习~