2010-11-02 84 views
2

任何人都可以想到一种算法,可以检测随机文件名?例如,一个人可以知道文件名“SKJJSMIJ.EXE”看起来像是随机生成的,而文件名是“winsetup.exe”或“Photoshop.exe”,但程序如何确定?谢谢!检测随机文件名的算法?

+2

你为什么这样做?试图检测作为Windows进程“hjdd.exe”运行的病毒的 – Shoban 2010-11-02 06:06:29

+2

?如果你是,那么通过它的文件名判断一个文件是一个坏主意。 – zengr 2010-11-02 06:11:45

+0

这可能是一个非常有道理的原因 - 例如审计组织文件命名标准的政策? – Russell 2010-11-02 06:46:31

回答

1

在你给的例子中,“非随机的”文件名都包含英文单词,而“随机”的文件名不。我认为,对于“随机性”的一个很好的开始启发式,你似乎定义它将是检查文件名的子串(当然在扩展之前),以查看它们是否与合适大小的字典中的单词相匹配。

1

嘛,当然,这将取决于目标语言,但是,对于英语,我想不出任何把我的头顶部具有两个J字符连胜,也没有任何有连续三个字符。

您可能还会寻找在键盘的一个部分有优势字符的分组,如ewrwqrbvnvxbnx

或者,检查辅音元音比既为单词的单词和截面。

这可能是一个好的开始,但没有办法是万无一失的。

5

那么如果SKJJSMIIJ来自society of knights juggling juniors, skunks, mascots, idiots, introverts and jockeys?那么它将是一个合法的文件名。还要考虑一个名称,如Eyjafjallajökull.jpg。这看起来像一个随机文件名,但实际上是冰岛火山的名字。你可以制定一个算法来检测不可发音的文件名,但是会带来很多误报。

+0

其实,至少在我回答中提到的各种评估集合中,'Eyjafjallajökull'可能不会'看起来像一个随机文件名。除此之外,非base64字符和“Xxxxx”大小写方案不可能是随机文件名中的元素。 – Amber 2010-11-02 06:31:13

2

如果你真的进入这个深度,有几个不同的项目,你可以尝试:

  1. 查找字典单词。如果一个文件名包含长度大于等于4的字典单词,那么它可能不是随机的。

  2. 查找辅音/元音模式 - 如果一个文件有很多(3+)辅音一排,它更可能是随机的。另一方面,如果连续存在几乎不超过2个辅音/元音,则不太可能是随机的。

  3. 看看大写。如果有大量的大写字母(如XxXXxxxXxXX),那么这是一个随机的机会。另一方面,如果它遵循一个非常整齐的大写模式(如XxxxxXxxxxXxxxXxxxx或类似的),它是不太可能是随机的。

  4. 看不太性格配对。将文件名分解为相邻字母对(因此"abcd.txt"变为['ab', 'bc', cd']),并将每个对的出现频率与正常文件名的预先计算出的一组值进行比较。这与检查字典单词类似,但不需要全面的字典(也可以在专有名词等方面进行培训)。

  5. 查找数字与字母的图案 - 具有非常混合数字和字母的部分(尤其是那些没有在它们之间的分隔符)的文件名是可能的随机的。

没有方法做到万无一失,但如果你把这些启发式的许多共同制定的总体得分,你也许可以得到一个“足够好”的近似。