2015-11-07 80 views
0

確定文件路徑是否包含隱藏擴展名的最佳方式是什麼?例如,當惡意軟件試圖隱藏.exe如「LegitimateFile.pdf.exe」時。在文件路徑中查找隱藏的擴展

這是我到目前爲止嘗試過的,但有幾個問題。首先,擴展名不一定總是3個字符,例如.js。另一個問題是某些合法文件將被命名爲「GoodInstaller.V2.5.exe」,因此也會產生問題。

Dim HiddenExtension As Boolean = False 
Dim firstExtension As String = System.IO.Path.GetFileNameWithoutExtension(ProcessPath) 
Dim secondExtension As String = Path.GetExtension(firstExtension) 
If secondExtension.StartsWith(".") And secondExtension.Length = 4 And secondExtension Like ".*" Then HiddenExtension = True 
+0

請說明你想找到什麼。我不太確定您稱爲「隱藏擴展名」的「LegitimateFile.pdf.exe」的哪一部分。 –

+0

.exe是真正的擴展名,但是如果Windows文件夾選項「隱藏已知文件類型的擴展名」被選中,將會隱藏,因此它將顯示爲擴展名爲.pdf。 – Dan

回答

1

您可以創建的所有可執行般的擴展名的列表(如.EXE,.BAT,..)和所有喜歡文檔擴展名的列表(例如.DOC,.PDF,...)然後您可以依靠這些列表來確定文件是否危險。下面是一個代碼示例:

Function IsDangerous(filename As String) As Boolean 

    Dim first_extension = Path.GetExtension(filename) 

    If first_extension = String.Empty Or Not IsExecutableExtension(first_extension) Then Return False 

    Dim filename_without_first_extension As String = Path.GetFileNameWithoutExtension(filename) 

    Dim second_extension As String = Path.GetExtension(filename_without_first_extension) 

    If second_extension = String.Empty Or Not IsDocumentExtension(second_extension) Then Return False 

    Return True 

End Function 

Function IsExecutableExtension(extension As String) As Boolean 
    Dim executable_extensions = New String() {".exe", ".bat"} 'We need to add more items to this array 
    Return executable_extensions.Contains(extension) 
End Function 

Function IsDocumentExtension(extension As String) As Boolean 
    Dim document_extensions = New String() {".pdf", ".doc", ".xls"} 'We need to add more items to this array 
    Return document_extensions.Contains(extension) 
End Function 

並且你使用這樣的:

Dim dangerous = IsDangerous("test.pdf.exe") 
+0

謝謝!是的,這將起作用,但我希望不必列出所有可能的擴展名,因爲有這麼多的可能性。但那可能是唯一的方法。 – Dan

+0

我想你應該爲這類問題使用正則表達式。提到所有可能的文件擴展名不是一個好方法。 – Han

+0

@ Handoko.Chen,一個正則表達式如何匹配幾乎沒有任何共同點的項目?你能提供一個這樣的正則表達式的例子嗎? –