我正在设法从文字词典中破解出类似XKCD的密码(更正电池敲击)。基本上将字典文件中的X字数连在一起。现在,老实说,似乎没有一种简单的方法。
在XKCD漫画之后,有很多像这样的工具,我可以自己编一个字典文件,但是我觉得应该有一个更好的方法。我的具体用法是MD5哈希的开膛手约翰。
在JtR中似乎没有连接整个单词的方法,只修改现有的单词。底部参考这里
在JtR的未来版本中,可能会添加多个单词的“密码”破解模式,或对word列表模式的增强。
这是2008年,但我仍然没有看到任何类似的变化。我可以使用该文档中描述的技巧,但是如果您需要做两个以上的单词短语,或者您的字典长度很长,它就会变得非常难看。
我的第二个想法是使用Crunch在单词中使用管道,例如.crunch 0 0 -p word1 word2 | john --pipe mypasswd*
,我可以修改它,并使用-q wordlist.txt,而crunch将使用该文本文件中的单词。这里的问题是,没有办法(我已经发现)限制一个密码所用的字数。例如,如果您的字典包含1000个单词,则每个密码短语都是所有1000个单词的连接。再一次,如果你的字典有很长的长度,它就会变得很难看。
编辑:请注意,对于建议更改上面的crunch命令以指定最小长度和最大长度的人。但是,这不适用于-p或-q选项,但仍必须指定数字(因此为0占位符)。参考文献下的-p标志
它忽略了最小长度和最大长度,但是仍然必须指定两个数字。
这就使得我的要求是写到stdout,而不是一个文件,因为这样的文件将是这样的大小,并允许您指定加入的单词数(2个单词短语,3个单词等)。最好,这样的工具还可以让您指定分隔字符(correct.horse.battery.staple正确的\、马、\、电池、键),以防其他字符甚至空格被允许。
希望这是正确的堆栈交换,有人让我知道,如果有另一个我应该尝试。
对于正在寻找类似东西的其他人来说,这里有一个python代码片段,它或多或少地做了我想做的事情。
# iterable=['test','correct','horse','battery','staple']
## Change the file specified here to your dictionary file
iterable = [i.strip().split() for i in open("wordList.txt").readlines()]
def permutations(iterable, r=None, s=''):
pool = tuple(iterable)
n = len(pool)
r = n if r is None else r
if r > n:
#return
r = n # Lets assume users want all permutations
indices = range(n)
cycles = range(n, n-r, -1)
temp = tuple(pool[i] for i in indices[:r])
for item in temp: # iterate through the current tuple and turn it into a string, to get rid of brackets and such
print s.join([str(i[0]) for i in temp])
while n:
for i in reversed(range(r)):
cycles[i] -= 1
if cycles[i] == 0:
indices[i:] = indices[i+1:] + indices[i:i+1]
cycles[i] = n - i
else:
j = cycles[i]
indices[i], indices[-j] = indices[-j], indices[i]
temp = tuple(pool[i] for i in indices[:r])
for item in temp:
print s.join([str(i[0]) for i in temp])
break
else:
return
# The first value relates to our variable (dictionary file) at the top
# The second value is the number of words we want to combine, a 2 would indicate 2
## word combinations, such as correct.horse, 3 would be correct.horse.staple
# The third value is the seperater, such as . in the example above, to create words
## that run together enter nothing, or ''
permutations(iterable, 2, '.')
若要将此与JtR一起使用,请使用python xkcd.py | john --pipe mypasswd*
代码是从python迭代工具提取的,所以它应该返回.
R-长度元组,所有可能的顺序,没有重复的元素
我想要所有这些,而且它不会将数组存储在内存中(长列表会很快耗尽),也不会写入磁盘(如果需要,可以重定向输出)。
现在,我遇到了长时间运行的错误(IOError:Errno 32坏了的管道)和JtR。代码很草率等等,所以不,这不是一个完美的现实世界的解决方案。然而,正如已经指出的那样,由于可能性的数量,这在现实世界中可能是不实际的,即使没有错误。有时候我只是想知道一些事情是否有可能!
如果有谁知道C,并想直接将类似的东西添加到JtR或Crunch中,那将是令人惊奇的,我有一种感觉,如果它被编写到为这种任务设计的程序中,我会加快速度,使它变得更加可靠。
发布于 2014-09-10 18:48:06
我用BASH做了这个解决方案。其实挺有趣的..。您必须已经有一个输出文件。由于您正在编写脚本,添加touch output.txt
命令应该不会太难。
shuf -n5 /usr/share/dict/words | tr -d '\n' >> output.txt; sed -i -e '$a\' output.txt
所以它所做的就是
tr
(翻译字符)删除新行,并将输出追加到输出文件中。这也可以是插入分隔字符的步骤。将脚本写入一个循环中,您将得到一个由5个单词组成的排列文件连接在一起。如果您真的希望所有输出都输出到stdout,则可以修改它。
在单一密码尝试中使用JtR:
shuf -n5 /usr/share/dict/words | tr -d '\n' | john --pipe mypasswd*
shuf -n5 /usr/share/dict/words;
生成输入行到标准输出的随机排列。
tr -d '\n' >> output.txt
从标准输入中翻译、压缩和/或删除字符,写入标准输出。
我们使用它删除SHUF生成的换行符,并将结果连接到一个输出文件中。
发布于 2014-09-10 20:43:13
只有一个暗示听了这个答案工具(S)的存在。你的发言:
“但是如果你需要做两个单词以上的词组,……就会变得很难看”和
再说一遍,如果你的字典有任何长度,它就会变得很难看
让我想一想,您是否估计了破解的时间,如果该工具存在,即使它的执行速度类似于GPU上的密码破解。
(摘自我的密码分析工具)。假设密码是:
干涸攻击显性电线
并假设一本长度适中、有7776个单词的类Diceware词典:
当在CPU上而不是GPU(s)上进行恢复时,可能需要50*(GPU的数值)更长的时间。在我看来,CPU方法是不可行的。
https://security.stackexchange.com/questions/67147
复制相似问题