مهران رسا
شنبه 11 خرداد 1387, 11:08 صبح
سلام .
چند وقتی بود که خیلی از دوستان دنبال یک روش نسبتاً قوی برای شناسایی ویروس ها بودن .
از اونجایی که من خودم علاقه زیادی به آنتی ویروس نویسی و کلاً مبارزه با ویروس ها و روش ها شناسایی اونها دارم به فکر نوشتن یک روش و شیوه ویروس یابی که تا حدودی بتونه ویروس ها رو شناسایی کنه افتادم .
این روش از دو Part اصلی تشکیل شده :
1 - سیستم نسبتاً هوشمند برنامه که بدون نیاز به Update تعدادی از ویروس ها رو شناسایی می کنه .
2 - سیستم به روز رسانی . که حدوداً 70 % از نقش شناسایی ویروس ها رو بر عهده میگیره .
سیستم Update الگوریتم از طریق فایل آپلود شده در پرشین گیگ پشتیبانی میشه .
قسمت اول الگوریتم که مربوط به شناسایی ویروس ها به صورت هوشمند هست از 9 مرحله اسکن ، یک مرحله شناسایی فایل تشکیل میشه ...
قسمت نسبتاً هوشمند الگوریتم در ابتدا قرار گرفته و در صورت عدم تشخیص فایل به قسمت دوم یعنی : به روز رسانی مراجعه میشه و بعد از باز شدن فایل یک جستجوی کامل و دقیق در کل متن فایل جهت پیدا کردن امضاهای موجود در فایل Update شده صورت میگیره .
تا اونجایی که تونستم عملیات کار رو به ساده ترین شیوه بیان کردم .
• • •
'EXIS Algorithm' Virus Scanner'
'-------------------------------------------------------------------'
'Coder : Mehran Rasa'
'E-mail : mehran8_rasa@yahoo.com'
Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Public Function DownloadFile(URL As String, _
LocalFilename As String) As Boolean: Dim lngRetVal As Long
lngRetVal = URLDownloadToFile(0, URL, LocalFilename, 0, 0)
If lngRetVal = 0 Then DownloadFile = True
End Function
Public Function EXIS(FileAddress As String) As Boolean
On Error Resume Next
Dim Level1 As Boolean, Level2 As Boolean, Level3 As Boolean, Level4 As Boolean
Dim Level5 As Boolean, Level6 As Boolean, Level7 As Boolean, Level8 As Boolean
Dim Level9 As Boolean
Dim FileString As String
Dim JustAddress As String
Dim UpdatedText As String
Dim FileSize As Long
Dim Level As Integer
Dim WinPath As String: WinPath = Environ("windir")
Ret = DownloadFile("http://gksoft.persiangig.ir/EXIS_Sopports/Updates.ini", App.Path & "\Updates.ini")
FileSize = FileLen(FileAddress) \ 1024
a$ = Space(FileLen(FileAddress)): Open FileAddress For Binary As #1: Get #1, , a$: Close #1
FileString = a$
If FileString <> "" Then
CDir() = Split(FileAddress, "\")
For i = LBound(CDir) To UBound(CDir) - 1: F = F & CDir(i) & "\": Next i
JustAddress = F
For Level = 1 To 8 Step 1
Select Case Level
Case 1
If InStr(1, LCase(FileString), "reg") <> 0 And InStr(1, LCase(FileString), "getwindowsdirectory") <> 0 Then Level1 = True
Case 2
If Not (EXIS) Then
If InStr(1, LCase(FileString), "yahoo") <> 0 Then Level2 = True
End If
Case 3
If Not (EXIS) Then
If InStr(1, LCase(FileString), "autorun") <> 0 Then Level3 = True
End If
Case 4
If Not (EXIS) Then
If InStr(1, LCase(FileString), "getwindowsdirectory") <> 0 And InStr(1, LCase(FileString), "vb98") <> 0 Then Level4 = True
End If
Case 5
If Not (EXIS) Then
If InStr(1, LCase(FileString), ".exe open") <> 0 Then Level5 = True
End If
Case 6
If Not (EXIS) Then
If InStr(1, UCase(FileString), "UUPX0") <> 0 Then Level6 = True
End If
Case 7
If Not (EXIS) Then
If InStr(1, LCase(FileString), "vbscript") <> 0 Then Level7 = True
End If
Case 8
If Not (EXIS) Then
If InStr(1, LCase(FileString), ".exe") <> 0 Then Level8 = True
End If
Case 9
If Not (EXIS) Then
If InStr(1, LCase(FileString), "kernel.exe") <> 0 Then Level9 = True
End If
End Select
Next
If (Level1 And Level3) Or (Level1 And Level6) Or (Level2 And Level6) _
Or (Level4 And Level3) Or (Level3 And Level5) _
Or (Level5 = True) Or (Level4 = True) Or (Level9 = True) _
Or (Level7 And Level8) Or (Level1 And Level2 And Level3) Then EXIS = True
If EXIS <> True Then
Open App.Path & "\Updates.ini" For Input As #1
While EOF(1) = False
Input #1, UpdatedText
If InStr(1, LCase(FileString), LCase(UpdatedText)) <> 0 Then EXIS = True
Wend
Close #1
End If
If EXIS Then
If FileSize > 10 _
And InStr(1, LCase(FileString), "microsoft.windows.shell.explorer") = 0 _
And InStr(1, LCase(FileString), "microsoft.windows.common-controls") = 0 Then
EXIS = True
Else: EXIS = False
End If
End If
End If
End Function
آماده پاسخ دادن به نظرات و سوالات شما هستم ..
با تشکر . PCM2008 سابق !
چند وقتی بود که خیلی از دوستان دنبال یک روش نسبتاً قوی برای شناسایی ویروس ها بودن .
از اونجایی که من خودم علاقه زیادی به آنتی ویروس نویسی و کلاً مبارزه با ویروس ها و روش ها شناسایی اونها دارم به فکر نوشتن یک روش و شیوه ویروس یابی که تا حدودی بتونه ویروس ها رو شناسایی کنه افتادم .
این روش از دو Part اصلی تشکیل شده :
1 - سیستم نسبتاً هوشمند برنامه که بدون نیاز به Update تعدادی از ویروس ها رو شناسایی می کنه .
2 - سیستم به روز رسانی . که حدوداً 70 % از نقش شناسایی ویروس ها رو بر عهده میگیره .
سیستم Update الگوریتم از طریق فایل آپلود شده در پرشین گیگ پشتیبانی میشه .
قسمت اول الگوریتم که مربوط به شناسایی ویروس ها به صورت هوشمند هست از 9 مرحله اسکن ، یک مرحله شناسایی فایل تشکیل میشه ...
قسمت نسبتاً هوشمند الگوریتم در ابتدا قرار گرفته و در صورت عدم تشخیص فایل به قسمت دوم یعنی : به روز رسانی مراجعه میشه و بعد از باز شدن فایل یک جستجوی کامل و دقیق در کل متن فایل جهت پیدا کردن امضاهای موجود در فایل Update شده صورت میگیره .
تا اونجایی که تونستم عملیات کار رو به ساده ترین شیوه بیان کردم .
• • •
'EXIS Algorithm' Virus Scanner'
'-------------------------------------------------------------------'
'Coder : Mehran Rasa'
'E-mail : mehran8_rasa@yahoo.com'
Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Public Function DownloadFile(URL As String, _
LocalFilename As String) As Boolean: Dim lngRetVal As Long
lngRetVal = URLDownloadToFile(0, URL, LocalFilename, 0, 0)
If lngRetVal = 0 Then DownloadFile = True
End Function
Public Function EXIS(FileAddress As String) As Boolean
On Error Resume Next
Dim Level1 As Boolean, Level2 As Boolean, Level3 As Boolean, Level4 As Boolean
Dim Level5 As Boolean, Level6 As Boolean, Level7 As Boolean, Level8 As Boolean
Dim Level9 As Boolean
Dim FileString As String
Dim JustAddress As String
Dim UpdatedText As String
Dim FileSize As Long
Dim Level As Integer
Dim WinPath As String: WinPath = Environ("windir")
Ret = DownloadFile("http://gksoft.persiangig.ir/EXIS_Sopports/Updates.ini", App.Path & "\Updates.ini")
FileSize = FileLen(FileAddress) \ 1024
a$ = Space(FileLen(FileAddress)): Open FileAddress For Binary As #1: Get #1, , a$: Close #1
FileString = a$
If FileString <> "" Then
CDir() = Split(FileAddress, "\")
For i = LBound(CDir) To UBound(CDir) - 1: F = F & CDir(i) & "\": Next i
JustAddress = F
For Level = 1 To 8 Step 1
Select Case Level
Case 1
If InStr(1, LCase(FileString), "reg") <> 0 And InStr(1, LCase(FileString), "getwindowsdirectory") <> 0 Then Level1 = True
Case 2
If Not (EXIS) Then
If InStr(1, LCase(FileString), "yahoo") <> 0 Then Level2 = True
End If
Case 3
If Not (EXIS) Then
If InStr(1, LCase(FileString), "autorun") <> 0 Then Level3 = True
End If
Case 4
If Not (EXIS) Then
If InStr(1, LCase(FileString), "getwindowsdirectory") <> 0 And InStr(1, LCase(FileString), "vb98") <> 0 Then Level4 = True
End If
Case 5
If Not (EXIS) Then
If InStr(1, LCase(FileString), ".exe open") <> 0 Then Level5 = True
End If
Case 6
If Not (EXIS) Then
If InStr(1, UCase(FileString), "UUPX0") <> 0 Then Level6 = True
End If
Case 7
If Not (EXIS) Then
If InStr(1, LCase(FileString), "vbscript") <> 0 Then Level7 = True
End If
Case 8
If Not (EXIS) Then
If InStr(1, LCase(FileString), ".exe") <> 0 Then Level8 = True
End If
Case 9
If Not (EXIS) Then
If InStr(1, LCase(FileString), "kernel.exe") <> 0 Then Level9 = True
End If
End Select
Next
If (Level1 And Level3) Or (Level1 And Level6) Or (Level2 And Level6) _
Or (Level4 And Level3) Or (Level3 And Level5) _
Or (Level5 = True) Or (Level4 = True) Or (Level9 = True) _
Or (Level7 And Level8) Or (Level1 And Level2 And Level3) Then EXIS = True
If EXIS <> True Then
Open App.Path & "\Updates.ini" For Input As #1
While EOF(1) = False
Input #1, UpdatedText
If InStr(1, LCase(FileString), LCase(UpdatedText)) <> 0 Then EXIS = True
Wend
Close #1
End If
If EXIS Then
If FileSize > 10 _
And InStr(1, LCase(FileString), "microsoft.windows.shell.explorer") = 0 _
And InStr(1, LCase(FileString), "microsoft.windows.common-controls") = 0 Then
EXIS = True
Else: EXIS = False
End If
End If
End If
End Function
آماده پاسخ دادن به نظرات و سوالات شما هستم ..
با تشکر . PCM2008 سابق !