我们有一堆CRC32哈希值,如果知道它们的输入,将非常不错。其中一些足够短,以至于可以强行实施。其他不是。所使用的CRC32算法等于Python中的CRC32算法binascii
(其实现在https://rosettacode.org/wiki/CRC-32#Python上阐明)。
我已阅读以下页面:
...在我看来,某处隐藏着某些东西,可以减少扭转这些事情的效果,而这些事情我是无法解决的。
我认为我们可以做得比完全强力更好的主要原因是,我们对哈希输入了解两点:
[A-Za-z_0-9]
(仅字母,数字和下划线)。此外,我们知道数字很稀少,而且A-Z
似乎从未与混在一起a-z
,因此我们常常可以[a-z_]
在90%的情况下逃脱现实。
由于以上链接讨论了如何向输入中添加任意4个字符,并使散列保持不变,因此我想到的一个想法是对最后4个字符进行暴力破解(其中大多数无效,因为它们不在受限字符集中) ,过滤出明显不正确的内容(由于使用了非法的3个字母的英语连击等等),并提出了可能有效的最后4个字符的“简短”列表。然后我们重复直到整个事情都减少了,这应该比纯蛮力要快。但是我找不到逻辑上的飞跃来找出方法。
如果我朝错误的方向解决这个问题,那也很好。
the majority of these are snake_case English words/phrases (e.g. "weight" or "turn_around")
- 这些可以通过使用字典(例如来自这个问题)和实用程序来暴力破解。假设英语单词总数达到1M
,尝试(1M)^2
CRC32 看起来可行并且相当快。
给定一个包含所有字典单词的文本文件,可以使用例如工具来枚举所有单词word_word
并与哈希值进行比较,指令如下:CRC
Hashcat
hashcat64.bin -m 11500 -a 1 -j '$_' hashes.txt dictionary.txt dictionary.txt
Run Code Online (Sandbox Code Playgroud)
并针对字典中的每个单词进行测试:
hashcat64.bin -m 11500 -a 0 hashes.txt dictionary.txt
Run Code Online (Sandbox Code Playgroud)
对于超过 2 个单词的短语,每个短语长度将是一个单独的情况,例如Hashcat
没有选项排列 3 个或更多字典(参考)。对于 3 个单词的短语,您需要首先生成一个包含 2 个单词组合的文件(例如,如此处,但采用 的形式{}_{}
)。然后将其与一字词典结合:hashcat64.bin -m 11500 -a 1 -j '$_' hashes.txt two_words_dictionary.txt dictionary.txt
。接下来,4个单词的短语可以被暴力强制为:hashcat64.bin -m 11500 -a 1 -j '$_' hashes.txt two_words_dictionary.txt two_words_dictionary.txt
等。(另一个选择是将组合通过管道传输到Hashcat
as combine_scrip ... | hashcat64.bin -m 11500 -a 0 hashes.txt
,但asCRC32
检查起来非常快,管道将成为这里的瓶颈,使用字典文件比管道传输要快得多)
当然,n 个单词的排列会以指数方式增加复杂性n
(具有巨大的基数)。但由于字典仅限于某些子集而不是所有英语单词,因此这取决于字典的大小,暴力破解的实际深度有多深。
归档时间: |
|
查看次数: |
134 次 |
最近记录: |