我正在使用brute force attack
针对受密码保护的C++
文件试用rar
。我已经能够生成所有可能的“密码”。我只是不确定如何使用我的程序中生成的每个组合自动尝试提取存档。我正在Windows
,我正在尝试使用WinRar
。
答案 0 :(得分:3)
可以轻而易举地做一些事情:
int main (int argc, char** argv)
{
for (;;) {
/* do something */
cout << clever_password << "\0";
}
}
...然后在shell中,只需:
your-clever-password-guesser | \
sed -e 's,'\'','\''"'\''"'\'',g' | \
xargs -0 -n1 -r -t -I {} -- unrar e 'p{}' some-file.rar
打破这一点:
'\0'
字符打印每个密码猜测。这允许密码(可能)包含空格和制表符之类的东西,否则可能会在shell中“搞乱”。sed
保护您免受撇号'
的攻击。每个'
必须编码为'\''
(反斜杠's)或'"'"'
(引用 - 引用 - 引用)的序列,以安全地通过外壳。 s///g
模式将每个'
替换为'"'"'
,但它本身传递给sed
的撇号将写为'\''
。 (我混合了转义'
的样式,以便我更容易区分sed
的撇号转义和sed
添加到密码流中的撇号转义。)相反,可以在C ++程序中打印时更改字符串。xargs
运行unrar
,其中包含以下选项:
\0
(-0
)-n1
)-r
) - 例如如果您的程序根本没有打印出任何可能的密码。-t
) - 这可让您监控屏幕上飞过的猜测{}
(-I {}
)--
unrar e
...){}
中的'p{}'
;这里'
可以防止密码中的空格和内容如果您想尝试并行运行多个unrar
个实例,您还可以将-P4
插入xargs
调用(例如... -I {} -P4 --
...)以运行4一次一个实例;调整此值,直到您的机器过载以获得任何好处。 (由于这可能是光盘I / O绑定,您可能需要确保在启动它之前将RAR文件复制到/tmp
或/run
之类的RAM文件系统中,如果它是合理的大小,那么你不是在等待光盘I / O那么多,但操作系统可能会在几十轮之后缓存文件,因此在长期运行中可能实际上没有多大帮助。)
这是一种蛮力的方式,但不需要像使用fork/exec/wait
启动unrar
进程或使用{{1启用库(这可能会使启动可执行文件的速度显着提高数百或数千次)
<强> PS 强>
之后我意识到,您可能正在寻找与实际rar
计划的互动。以上内容对此没有任何帮助;但它可以让您重复运行命令行WinRAR™
。
此外,如果您使用的是Windows系统,则需要安装一些标准的shell实用程序 - 兼容POSIX的Bourne shell,如BASH,unrar
和sed
- 可能意味着需要像Cygwin这样的东西。但是,我对Windows系统没有任何实际经验,无法就如何做到这一点给出好的建议。
答案 1 :(得分:1)
Winrar有api,虽然它只支持解压缩。这就像从api的一个函数调用一样简单,试图解压缩文件。点击链接: http://www.rarlab.com/rar_add.htm
祝你好运!