2010-11-02 74 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. 查找數字與字母的圖案 - 具有非常混合數字和字母的部分(尤其是那些沒有在它們之間的分隔符)的文件名是可能的隨機的。

沒有方法做到萬無一失,但如果你把這些啓發式的許多共同制定的總體得分,你也許可以得到一個「足夠好」的近似。