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

本来一开始是打算用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】压缩包密码暴破脚本 综合内容 第1张

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

 【shell】压缩包密码暴破脚本 综合内容 第2张

 【shell】压缩包密码暴破脚本 综合内容 第3张

与Windows版[容]本的效果

 【shell】压缩包密码暴破脚本 综合内容 第4张

整体来说,由于系统[保]的差异明显,以及b[护]atch、shel[小]l的实现各有差异,[谦]殊途同归了,算是。[娱]可以粗糙理解为类似[乐]《富士山下》、《爱[网]情转移》粤语歌与普[内]通话的两种唱法。

附源码: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.txtfi# 保存密码本为基本路径格式# 无法输出用户名 // ,储存变量结果后,再输出 /Users/ 正常。username=$USERpasswd_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=0unrar_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 /dev/null 2>&1        # 检查解压缩命令的退出码        if [ $? -eq 0 ]; then            # 如果退出码为 0,说明密码正确,输出提示信息并退出循环            echo -e "n密码是: $password n"            # flag            found_passwd_tag_num=1            break        fi    done 

【本页内容来源于互联网或网友投稿,可用性与真实性请自行辨别】

美团圈圈

保存图片 使用微信扫码即可成为美团圈圈达人