在 Mac OS X 中测试 John the Ripper 作为 RAR 密码恢复解决方案,但 xargs 给出了错误:
john --incremental:all --stdout | xargs -I jtr unrar e -pjtr -inul test2.rar | grep 100%
xargs: unterminated quote
但是当我向 xargs 添加“-0”来处理引号时,我收到另一个 xargs 错误:
john --incremental:all --stdout | xargs -0 -I jtr unrar e -pjtr -inul test2.rar | grep 100%
xargs: insufficient space for argument
我认为这是因为 '-0' 阻止 xargs 使用换行符作为分隔符,从而产生了空格问题?
关于如何让 xargs 正常运行,您有什么想法吗?有没有办法解决引号问题,同时保持换行符不变?
答案1
我可能会做这样的事情:
john --incremental:all -stdout | while read pass;do
rar x -p"${pass}" test2.rar
if [ "$?" -eq 0 ];then
exit 0
fi
done
随意替换 rar 选项等。这样,命令只会运行到成功解压文件为止,您不必 grep 查找某些内容。$?
是一个 shell 变量,包含上次运行命令的返回代码,如果运行成功,则等于 0。因此,如果您将其与 0 匹配,则说明上一个命令“有效”。
编辑1:在密码周围添加了“,如-p"${pass}"
。
答案2
我不知道还有什么方法(除了-0
模式)可以让 xargs 忽略其输入中的引号,但可以很容易地使用 tr 将换行符转换为空值,然后使用-0
模式:
john --incremental:all --stdout | tr“\n”“\0”| xargs -0 -I jtr unrar e -pjtr -inul test2.rar | grep 100%