【发布时间】:2015-12-09 20:36:28
【问题描述】:
我正在做一个任务,我有一个 passwd 文件,我要在其中找到所有密码。他们中的大多数对开膛手杰克和一些调整都很容易,但额外的功劳需要我找到一个由 rand 在 perl 5.10.0 中生成并用 crypt 加密的 8 字节字母数字密码。 我想出了三种方法来解决这个问题:
- 蛮力:在我的机器上进行 62^8 次计算 = 300 周。我可以 租一台机器功率是我机器功率 300 倍的服务器,在 1 周内完成。 不知何故,这感觉像是在浪费资源/电力 额外学分。
Break Crypt:不确定这个,但是我生成了一个 我发现的其他密码中的字符集,减少了增量 蛮力到 5 天,但我认为只有这样才有效 密码仅包含以前的字符中存在的字符(17 纯文本),所以也许如果我幸运的话! (极不可能)
Break rand:如果我能找到用于生成 密码。然后我可以生成字典来提供给 Jack。为了 从给我的文件中获取种子但是我必须 了解 perl 是如何创建种子的(如果有可能的话 5.10.0)。
根据我对早期 Perl 版本的研究,只有系统时间被用作种子。我制作了一个脚本,在给我的 passwd 文件上使用m_time(从纪元开始的时间)(+-10 可以肯定,尽管我确定文件在一秒钟内生成)作为生成字典的种子,在这种格式,因为我不知道rand() 我的密码实际上是从什么调用开始的:
abcdefgh
bcdefghi
cdefhijk
我把字典喂给了杰克。当然这不起作用,因为在 Perl 5.004 之后 Perl 使用其他东西(我的问题的重点)来生成种子。
所以,我的问题是,是否有人知道在哪里可以找到 Perl 用于生成种子的源代码和/或 rand/srand 的源代码。我一直在寻找看起来像这样的东西,但对于 5.10.0 版:
What are the weaknesses of Perl's srand() default seed, post version 5.004?
我尝试在 /lib/perl 目录中使用 grep,但我迷失在所有 #define 结构文件中。
如果您认为我对任务和/或有关此事的任何建议完全偏离轨道,请随时告诉我。
【问题讨论】: