2015-11-07 4 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, Как регулярное выражение соответствует элементам, которые почти не имеют ничего общего? Можете ли вы привести пример такого регулярного выражения? –

Смежные вопросы