2015-11-07 79 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,一个正则表达式如何匹配几乎没有任何共同点的项目?你能提供一个这样的正则表达式的例子吗? –