• 【shell】压缩包密码暴破脚本

    3,240次阅读
    没有评论

    共计 2234 个字符,预计需要花费 6 分钟才能阅读完成。

    本来一开始是打算用 python 的,但一想 python 写保存路径,到最后还是放弃了,因为 python 的目录写法,终究逃不掉 Windows c:/xxx/、Mac  ~/xxxx/,这就造成了平台上的不适配,那我还不如索性写两份体验体验。

    谈谈这次遇到的小问题,主要问题其实在注释上已经说明了,不过还是单拿出了,方便观看与讨论:

    • 发现 brew install p7zip > /dev/null 2>&1 运行效率较低,也算是个无心之举。跑代码测试的时候,我发现这种写法,明显感觉比 if 慢好多,所以就 pass 掉了。
    • 在 Mac 上,7z 并不支持验证 rar 压缩包密码;Mac 下面的 rar,也不支持 zip 的密码验证。这个是 p7zip 与 rar(两者都是 brew 安装)的实验结论。
    • 密码暴破没成功,没有输出 echo,主要是自己逻辑上出现了问题:break 之后又执行了常规的输出,定位代码处# echo "$?",需要外部使用变量来固化状态值,再做判断(类似批处理的延迟变量)。

    细节方面就是:dos2unix,关于 LF 格式和 CRLF 格式的 TXT 文件了,统一处理,问题不大。

    代码本地测试效果

    【shell】压缩包密码暴破脚本

    在线测试效果图,顺带还发现了个有趣的现象:特权提升的 $username,由自己的本地用户名,变成了“root”

    【shell】压缩包密码暴破脚本

    【shell】压缩包密码暴破脚本

    与 Windows 版本的效果

    【shell】压缩包密码暴破脚本

    整体来说,由于系统的差异明显,以及 batch、shell 的实现各有差异,殊途同归了,算是。可以粗糙理解为类似《富士山下》、《爱情转移》粤语歌与普通话的两种唱法。

    附源码:https://github.com/hoochanlon/ihs-simple/blob/main/d-shell/7z_rar_sensei.sh

    # 实验
    ## brew install p7zip > /dev/null 2>&1 运行效率较低,大概有 2~3 秒不等,if 算了
    ## 在 Mac 上,7z 并不支持验证 rar 压缩包密码;Mac 下面的 rar,也不支持 zip 的密码验证。## 网上 txt 为 CRLF 的问题,dos2unix 搞定。## 密码没找到,没输出,排查问题如下:### $0 用于存储上一个命令的退出状态。当一个命令成功执行时,它的退出状态为 0,否则为非零值。### 直接不在外层初始化 flag,容易算数异常,推测是作用域问题。# 缺什么就安装什么
    [! -e $(which rar) ] && brew install rar
    [! -e $(which 7z) ] && brew install p7zip
    [! -e $(which dos2unix) ] && brew install dos2unix
    
    # 不存在就下载密码本
    if [! -f ~/Downloads/rarpasswd.txt]; then
        curl -o ~/Downloads/rarpasswd.txt https://ghproxy.com/https://raw.githubusercontent.com/hoochanlon/ihs-simple/main/d-txt/rarpasswd.txt
    fi
    
    # 保存密码本为基本路径格式
    # 无法输出用户名 //,储存变量结果后,再输出 /Users/< 用户名 > 正常。username=$USER
    passwd_txt="/Users/$username/Downloads/rarpasswd.txt"
    # CRLF 文本换成 LF 文本
    dos2unix $passwd_txt >/dev/null 2>&1
    
    # has_passwd_rar="/Users/chanlonhoo/Desktop/BlackFell.zip"
    echo -e "n"
    read -p "将压缩包文件拖入到终端:" has_passwd_rar
    
    # 打上 flag,保存 break 状态码,固化存储。found_passwd_tag_num=0
    
    unrar_passwd_find() {
        # 遍历密码文件中的每一行密码
        while read password; do
            # 尝试使用当前密码解压缩压缩包
            unrar t -p$password "$has_passwd_rar" >/dev/null 2>&1
    
            # 检查解压缩命令的退出码
            if [$? -eq 0]; then
                # 如果退出码为 0,说明密码正确,输出提示信息并退出循环
                echo -e "n 密码是: $password n"
                # flag
                found_passwd_tag_num=1
                break
            fi
        done <$passwd_txt
        # echo "$?"
    
        if [$found_passwd_tag_num -ne 1]; then
            echo -e "n 没找到正确的密码。n"
        fi
    
    }
    
    7z_passwd_find() {
        # 遍历密码文件中的每一行密码
        while read password; do
            # 尝试使用当前密码解压缩压缩包
            7z t -p$password "$has_passwd_rar" >/dev/null 2>&1
    
            # 检查解压缩命令的退出码
            if [$? -eq 0]; then
                # 如果退出码为 0,说明密码正确,输出提示信息并退出循环
                echo -e "n 密码是: $password n"
                # flag
                found_passwd_tag_num=1
                break
            fi
        done <"$passwd_txt"
    
        if [$found_passwd_tag_num -ne 1]; then
            echo -e "n 没找到正确的密码。n"
        fi
    
    }
    
    # 判断文件名后缀是否包含 rar
    if [[${has_passwd_rar##*.} == "rar" ]]; then
        unrar_passwd_find
    else
        7z_passwd_find
    fi

    正文完
     0
    suyan
    版权声明:本站原创文章,由 suyan 2023-04-20发表,共计2234字。
    转载说明:转载本网站任何内容,请按照转载方式正确书写本站原文地址。本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
    评论(没有评论)
    验证码