Я делаю шестнадцатеричный сканер для файлов, и у меня есть база данных с шестнадцатеричными строками вирусов.
У меня есть база данных в виде XML и сканер в VB.NET.
Цель: выполнить простой антивирус (без сканера MD5).
Что ж, я хочу перечислить несколько файлов в списке, просмотреть его и просканировать шестигранный забор, сканируя каждый из них, совпадающиеперешел на listbox2.
Imports System.IO
Imports System.Text
Public Class HexEngine
Dim ArrayHold() As Byte
Dim Index As Integer = 0
Dim Str As New StringBuilder
Dim tStr As String = ""
Dim tempStr As String = ""
Dim IndexEnd As Integer = 0
Dim InputString As String = ""
Dim a As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
listv.Items.Clear()
For abc = 0 To ListBox1.Items.Count - 1
Scan(ListBox1.Items(a).ToString)
Next abc
End Sub
Private Sub Scan(ByVal dir As String)
Dim myStreamReader As StreamReader = Nothing
myStreamReader = File.OpenText(dir)
InputString = myStreamReader.ReadToEnd()
ArrayHold = Encoding.Default.GetBytes(InputString)
Do
IndexEnd = Index + 9
For x As Integer = Index To IndexEnd
If x > UBound(ArrayHold) Then
tempStr = tempStr
Else
tStr = UCase(Convert.ToString(ArrayHold(x), 16))
If tStr.Length < 2 Then tStr = "0" & tStr
Str.Append(tStr)
tempStr = tempStr & Chr(ArrayHold(x))
End If
Next
Index = Index + 10
Loop While IndexEnd < UBound(ArrayHold)
For Each signature As XElement In xml.Root.Elements
If InStr(1, Str.ToString, signature.<hex>.Value, vbTextCompare) Then
listv.Items.Add(signature.<name>.Value)
If listv.Items.Count > 0 Then
Label1.Text = "Virus"
Else
Label1.Text = "No Virus"
End If
End If
Next
End Sub
Dim xml = <?xml version="1.0"?>
<signatures>
<signature>
<name>Eicar-Test-Signatur (AntiVir)</name>
<hex>58354f2150254041505b345c505a58353428505e2937434329377d2445494341522d5354414e4441</hex>
</signature>
<signature>
<name>Hybris.Gen (AntiVir)</name>
<hex>f649e7cc1e00d37e7f3bc85fff3486ac6de91433aa3a39ef1b114d37b534b8323f6ff67132638a3fe2f2afb4aaf9b7e3b4669bb3cab028298aab533c5d73546cdd396fd58c2c7734c50bca68eb709b889a086fb3db5f8ae533a4d5816e8c5f560983695efa14e291c204b1316e657773</hex>
</signature>
</signatures>
'Dim files As List(Of FileInfo) = FileDirSearcher.GetFiles("C:\Windows\System32", SearchOption.AllDirectories).ToList
' Dim dirs As List(Of DirectoryInfo) = FileDirSearcher.GetDirs("C:\Windows\System32", SearchOption.AllDirectories).ToList
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim startPath As String = Environment.GetFolderPath(Environment.SpecialFolder.Startup)
Dim filess As IEnumerable(Of FileInfo) = FileDirSearcher.GetFiles(dirPath:=startPath,
searchOption:=SearchOption.TopDirectoryOnly,
fileNamePatterns:={"*"},
fileExtPatterns:={"*.vbs", "*.exe"},
ignoreCase:=True,
throwOnError:=True)
For Each File In Get_All_Files(startPath, False)
ListBox1.Items.Add(File)
Next
End Sub
End Class
#Region " Get All Files Function "
' [ Get All Files Function ]
'
' // By Elektro H@cker
'
' Examples:
'
' Dim Files As Array = Get_All_Files("C:\Test", True)
' For Each File In Get_All_Files("C:\Test", False) : MsgBox(File) : Next
Private Function Get_All_Files(ByVal Directory As String, Optional ByVal Recursive As Boolean = False) As Array
If System.IO.Directory.Exists(Directory) Then
If Not Recursive Then : Return System.IO.Directory.GetFiles(Directory, "*", IO.SearchOption.TopDirectoryOnly)
Else : Return IO.Directory.GetFiles(Directory, "*", IO.SearchOption.AllDirectories)
End If
Else
Return Nothing
End If
End Function
#End Region
Ну, как вы видите, я уже все сделал, но все же он очень медленный и не сканирует файлы списка.
Я простоВам нужен шестнадцатеричный сканер, который сканирует все файлы, которые находятся в списке, и который работает быстро.