PDA

View Full Version : --: الگوریتم EXIS :--



مهران رسا
شنبه 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 سابق !

meysam_meysam74
شنبه 11 خرداد 1387, 14:44 عصر
سرستون جالب بود
فقط یه سوال مقع دانلود برنامه هنگ نمیکنه ؟

مهران رسا
شنبه 11 خرداد 1387, 14:52 عصر
فقط یه سوال موقع دانلود برنامه هنگ نمیکنه ؟

بله ! یک وقفه در برنامه به دلیل دانلود نمودن فایل ایجاد میشه که زیاد مهم نیست .
برای مثال می تونید عملیات به هنگام سازی رو در رویداد Load بنویسید .

مهم روش کار هست که امیدوارم مورد رضایت شما واقع شده باشه ...

Mbt925
شنبه 11 خرداد 1387, 15:58 عصر
کمی بیشتر در مورد جزئیات الگوریتمتون توضیح بدید.

مهران رسا
شنبه 11 خرداد 1387, 16:46 عصر
کمی بیشتر در مورد جزئیات الگوریتمتون توضیح بدید.

والا کد که خیلی ساده نوشته شده . نمیدونم چیشو توضیح بدم !؟! ...

شما بفرمایید در چه قسمتی مشکل دارید تا من توضیح بدم .

بخشید .

مهران موسوی
شنبه 11 خرداد 1387, 16:55 عصر
به زبان ساده بگم ... اين دوستمون فايل رو به صورت باينري باز كرده .. و الگوريتم رو جوري نوشته كه به يك سري كلمات خاص در PE File حساسيت نشون ميده ...

مشكلات :

برنامه هايي كه قصد استفاده از يك سري امكانات رو دارن و به صورت ناخواسته اين جور كلمات درشون وجو داره به عنوان ويروس شناسايي ميشن ...

مهران رسا
شنبه 11 خرداد 1387, 17:06 عصر
به زبان ساده بگم ... اين دوستمون فايل رو به صورت باينري باز كرده .. و الگوريتم رو جوري نوشته كه به يك سري كلمات خاص در PE File حساسيت نشون ميده ...

مشكلات :

برنامه هايي كه قصد استفاده از يك سري امكانات رو دارن و به صورت ناخواسته اين جور كلمات درشون وجو داره به عنوان ويروس شناسايي ميشن ...


فایل رو ترتیبی باز کردیم !


درسته این رو قبول دارم که ممکنه برنامه های دیگه به اشتباه شناخته بشن .
ولی :
آیا به برنامه ای که مسیر پوشه ویندوز رو میگیره ، توی رجیستری کلید می نویسه و همچنین فایل Autorun میسازه ویروس نمیگن ؟!! (حداقل ویروس های امروزی ) :لبخندساده:

و به عنوان آخرین جواب : برای اینکه عملیات الگوریتم موفقیت آمیز تر باشه ، سیستم Update در نظر گرفته شده . که اینجا فقط یک مثال هست و هیچگونه پشتیبانی از جانب بنده نمیشه .

با تشکر .

مهران موسوی
شنبه 11 خرداد 1387, 17:14 عصر
ايا به نكته توجه كردين كه اگه ويروس پك شده بود .. اين الگوريتم كار نميكنه ؟؟

مهران رسا
شنبه 11 خرداد 1387, 17:22 عصر
ايا به نكته توجه كردين كه اگه ويروس پك شده بود .. اين الگوريتم كار نميكنه ؟؟

بله ! به این نکته هم توجه کردم .

و بررسی UPX0 در کد فایل شاید بتونه راه چاره باشه ! البته مطمئن نیستم .

ولی همون طور که گفتم حدوداً 70 % کار رو سیستم Update و بانک برنامه انجام میده که باید از طرف شخص و یا اشخاصی به صورت مطمئن و کامل پشتیبانی بشه !

شاید اگر کاربران ایرانی برای نرم افزارهای فارسی این چنینی ارزش قائل میشدند و چنین برنامه هایی رو به برنامه های کرک شده خارجی ترجیح نمی دادند و از همه مهم تر حاضر بودند برای حفظ امنیت رایانه شخصیشون پول خرج کنن ، طراح هایی این چنینی به نتیجه مطلوب می رسید .

بسه دیگه ! بهتر از رویا ها بیایم بیرون . :لبخندساده:

منتظرم دوستان عزیز دیگه هم نظراتشون رو بیان کنن .

مهران موسوی
شنبه 11 خرداد 1387, 19:49 عصر
دوست عزيز ... چك كردن UPX اصلا ملاك نيست .. ايا شما اصلا با ساختار PE اشناي داري ؟ ببين دوست من اين درست نيست كه بخواي كل فايل رو باز كني و با InStr چك كني كه زير رشته ي مورد نظر در رشته اي كه حاوي محتويات فايل هست وجو داره يا نه ... !! ميدوني سرعت در اين جور كارا چقدر ارزشمند هست ؟

من قبلا يك انتي براي سرگرمي نوشته بودم .. بايد از الگوريتمهاي قوي براي اناليز PE ها استفاده كني ... اين الگوريتمها ميتونه حتي ساخته ي دست خودت باشه ... شما بايد يك Thread ايجاد كني كه دائما رفتارهاي فايلهاي در حال اجرا رو چك كنه .. حتي اگه لازم باشه بايد توابعي رو در سيستم HOOK بكني تا بيشتر بر روي فايلها در حال اجرا تسلط داشته باشي ... در كل بايد در سطح كرنل كارات رو انجام بدي ...

از دوستان و صاحب نظران هم ميخوام كه اين دوستمون رو بيشتر راهنمايي كنن تا ذهنيتش در رابطه با اين موضوع گسترده تر بشه ...

يا حق ...

UpgradeVB6Code
شنبه 11 خرداد 1387, 20:14 عصر
سلام
آقاي .M8SPY. (http://barnamenevis.org/forum/member.php?u=58987) شما توي قسمت هوشمند اومديد محتويات يه فايل exe كه قراره اسكن بشه رو ريختيد توي يه متغيره رشته اي و توي اون متغيير دنبال كلماتي مثل Reg و ... هستيد ؟؟؟

مهران رسا
یک شنبه 12 خرداد 1387, 11:47 صبح
سلام
آقاي .M8SPY. (http://barnamenevis.org/forum/member.php?u=58987) شما توي قسمت هوشمند اومديد محتويات يه فايل exe كه قراره اسكن بشه رو ريختيد توي يه متغيره رشته اي و توي اون متغيير دنبال كلماتي مثل Reg و ... هستيد ؟؟؟

بله ! تقریباً یک همچین کاری انجام میشه .

مهران رسا
یک شنبه 12 خرداد 1387, 11:53 صبح
دوست عزيز ... چك كردن UPX اصلا ملاك نيست .. ايا شما اصلا با ساختار PE اشناي داري ؟ ببين دوست من اين درست نيست كه بخواي كل فايل رو باز كني و با InStr چك كني كه زير رشته ي مورد نظر در رشته اي كه حاوي محتويات فايل هست وجو داره يا نه ... !! ميدوني سرعت در اين جور كارا چقدر ارزشمند هست ؟

من قبلا يك انتي براي سرگرمي نوشته بودم .. بايد از الگوريتمهاي قوي براي اناليز PE ها استفاده كني ... اين الگوريتمها ميتونه حتي ساخته ي دست خودت باشه ... شما بايد يك Thread ايجاد كني كه دائما رفتارهاي فايلهاي در حال اجرا رو چك كنه .. حتي اگه لازم باشه بايد توابعي رو در سيستم HOOK بكني تا بيشتر بر روي فايلها در حال اجرا تسلط داشته باشي ... در كل بايد در سطح كرنل كارات رو انجام بدي ...

از دوستان و صاحب نظران هم ميخوام كه اين دوستمون رو بيشتر راهنمايي كنن تا ذهنيتش در رابطه با اين موضوع گسترده تر بشه ...

يا حق ...

با ساختار PE آشنا نیستم .

کاملاً با شما موافقم که استفاده از Instr شاید زیاد مناسب نباشه ولی من نمی خوام از این الگوریتم طرفداری کنم و همین روش رو پیش بگیرم .

می دونم که جای کار زیاد داره به خصوص اگه بشه از HOOK استفاده کرد .

این فقط یک روش نسبتاً کارساز بود که حداقل می تونه با پشتیبانی به موقع ویروس های جدید و ویروس های موجود در فلش دیسک ها رو پیدا کنه .

و در آخر به نظر من برای برنامه نویسی در سطح کرنل بهتره به جای Vb از زبان های قوی تری استفاده کنیم .

Mbt925
یک شنبه 12 خرداد 1387, 11:59 صبح
فکر می کردم قاعده یا روش خاصی پشت پرده باشه ولی

این روش به هیچ وجه روش کارایی نیست، و اصلا کاربردی نیست.
اشکالات این روش بسیار بسیار زیاد هست.
هیچ روش هوشمندی هم در کار نیست. تعریف شما از کلمه هوشمند اشتباست.
اصلا اسم این روش رو نمیشه ویروس یابی گذاشت.

مهران رسا
یک شنبه 12 خرداد 1387, 12:06 عصر
اصلا اسم این روش رو نمیشه ویروس یابی گذاشت
پس اسمشو چی میشه گذاشت ؟




این روش به هیچ وجه روش کارایی نیست، و اصلا کاربردی نیست.
این فقط یک روش نسبتاً کارساز بود که حداقل می تونه با پشتیبانی به موقع ویروس های جدید و ویروس های موجود در فلش دیسک ها رو پیدا کنه .




هیچ روش هوشمندی هم در کار نیست. تعریف شما از کلمه هوشمند اشتباست.
این حرفتون رو قبول دارم :لبخندساده:

Mbt925
یک شنبه 12 خرداد 1387, 12:15 عصر
دوست عزیز تصور شما از عملکرد یه ویروس اشتباست.

قرار نیست هر فایل اجرایی که توش این کلمات باشن (و یا حتی ترکیبی از همشون) ، ویروس باشه.

بحث در مورد این الگوریتم کافیه.

مهران رسا
یک شنبه 12 خرداد 1387, 18:22 عصر
قرار نیست هر فایل اجرایی که توش این کلمات باشن (و یا حتی ترکیبی از همشون) ، ویروس باشه.



درسته ! ولی میشه 60% احتمال داد . یعنی از نصف بیشتر ...



آیا به برنامه ای که مسیر پوشه ویندوز رو میگیره ، توی رجیستری کلید می نویسه و همچنین فایل Autorun میسازه ویروس نمیگن ؟!! (حداقل ویروس های امروزی )




بحث در مورد این الگوریتم کافیه.

چرا بحث در این مورد کافیه ؟!!
بذارید بقیه دوستان هم نظرشون رو بگن . مگه چند وقته که این تاپیک ایجاد شده .؟؟!

مجبور نیستید در تاپیک هایی که علاقه ای به مطالب اونها ندارید شرکت کنید و به جای تشویق کردن کاربران اونها رو دلسرد کنید و نظر منفی بدید !!

Mbt925
دوشنبه 13 خرداد 1387, 09:08 صبح
ببینید دوست عزیز
این الگوریتمی که شما نوشتید ، در نهایت می تونه دلیلی باشه برای اینکه فقط به یه فایل شک کنیم، و هیچ تصمیمی نمیشه در مورد ویروس بودن فایل گرفت.
آنتی ویروس های حرفه ای، وقتی رفتار مشکوکی می بینید، فقط به کاربر اطلاع میدن و هیچ کاره دیگه ای نمی کنن.

نه ، دوست عزیز ، بحث علاقه ی من نیست، بحث بی محتوا بودن این موضوعه.
این الگوریتم جایی برای صحبت نداره ، چیز خاصی نیست.

اگه به این مبحث علاقه دارید ، بصورت حرفه ای این بحث رو دنبال کنید، در موردش مطالعه کنید.

مهران رسا
دوشنبه 13 خرداد 1387, 09:19 صبح
بحث بی محتوا بودن این موضوعه.



علاقه نداشتن شما به این موضوع ؛ رابطه مستقیم داره با اینکه این موضوع رو بی محتوا بدونید .

Mbt925
دوشنبه 13 خرداد 1387, 09:24 صبح
علاقه نداشتن شما به این موضوع ؛ رابطه مستقیم داره با اینکه این موضوع رو بی محتوا بدونید .

به جای اینکه دوستای دیگتونو نصیحت کنید که به جای ویروس نویسی به کارای مفیدتر بپردازن، خودتون به جای سر و کله زدن با این الگوریتم های بی محتوا برید سراغ علمش.

این مبحث خیلی مبحث جالبیه ولی بصورت حرفه ای.
الگوریتم های هوشمند تشخیص رفتارهای مشکوک و تشخیص ویروسها.
نرم افزار NOD32 چندین جایزه برای الگوریتم های بسیار قویش برای شناسایی ویروس ها گرفته. (هوش مصنوعی).

در صورتی که همین طور به بحث های بی محتوا ادامه بدید این تاپیک قفل خواهد شد.

Mbt925
دوشنبه 13 خرداد 1387, 09:40 صبح
نیازی به ایجاد تاپیک جدید برای بحث در مورد مباحث پیشرفته نیست.

در مورد مباحث پیشرفته باید مطالعه کرد ، نه بحث.
بعد از اینکه مطالعاتتون به پایان رسید و به نتیجه ای رسیدید، میشه در مورد اون مطالب بحث کرد.

مهران رسا
دوشنبه 13 خرداد 1387, 09:46 صبح
نیازی به ایجاد تاپیک جدید برای بحث در مورد مباحث پیشرفته نیست.

در مورد مباحث پیشرفته باید مطالعه کرد ، نه بحث.
بعد از اینکه مطالعاتتون به پایان رسید و به نتیجه ای رسیدید، میشه در مورد اون مطالب بحث کرد.

لطفاً اگر امکان داره چند تا منبع فارسی معرفی کنید .

مرسی ...

مهران موسوی
دوشنبه 13 خرداد 1387, 12:59 عصر
براي اين كارا منبع فارسي خوب وجود نداره ... بايد بري در رابطه با مباحث خيلي پيچيده نظير HOOK و هوش مصنوعي و انالير فايلهي PE و ... تحقيقاتي انجام بدي كه مدتها وقتت رو ميگيره ... حتي ميتوني جوري طراحي كني كه انتي نوشته شده به كدهايي كه در حالت Run - Time هم ايجاد ميشه گير بده ... البته نه گير الكي مثلا الگوريتمي كه نوشتي .. بلكه از روي منطق و ... براي اين كار بايد بر روي حافظه اصلي تسلط داشته باشي و كارهات رو در سطح كرنل انجام بدي .. اگه واقعا قصد داري ادامه بدي دور VB رو هم خط بكش ..