صفحه 6 از 7 اولاول ... 4567 آخرآخر
نمایش نتایج 201 تا 240 از 258

نام تاپیک: شروع ساخت پروژه ی آنتی ویروس متن باز ایرانی ...

  1. #201

    نقل قول: شروع ساخت پروژه ی آنتی ویروس متن باز ایرانی ...

    الگریتم CRC32 در VB

    [

    Private crcTable(0 To 255) As Long

    Public Function GetCRC(ByVal PathFile As String) As String
    Dim B() As Byte, lcrc As Long
    On Error Resume Next
    If Len(PathFile) = 0 Then Exit Function
    Open PathFile For Binary Access Read As #1
    ReDim B(FileLen(PathFile) - 1)
    Get #1, , B
    Close #1
    lcrc = UBound(B())
    lcrc = CRC32(B(), lcrc)
    GetCRC = Hex(lcrc)
    End Function

    Public Sub BuildTable()

    Dim i As Long, X As Long, CRC As Long
    Const Limit = &HEDB88320
    For i = 0 To 255
    If GetInputState() <> 0 Then DoEvents
    CRC = i
    For X = 0 To 7
    If CRC And 1 Then
    CRC = (((CRC And &HFFFFFFFE) \ 2) And &H7FFFFFFF) Xor Limit
    Else
    CRC = ((CRC And &HFFFFFFFE) \ 2) And &H7FFFFFFF
    End If
    Next X
    crcTable(i) = CRC
    Next i

    End Sub

    Private Function CRC32(ByRef bArrayIn() As Byte, ByVal lLen As _
    Long, Optional ByVal lcrc As Long = 0) As Long

    Dim lCurPos As Long
    Dim lTemp As Long
    If lLen = 0 Then Exit Function
    lTemp = lcrc Xor &HFFFFFFFF
    For lCurPos = 0 To lLen
    DoEvents
    lTemp = (((lTemp And &HFFFFFF00) \ &H100) And &HFFFFFF) _
    Xor (crcTable((lTemp And 255) Xor bArrayIn(lCurPos)))
    Next lCurPos
    CRC32 = lTemp Xor &HFFFFFFFF

    End Function

    Private Sub Class_Initialize()
    BuildTable
    End Sub



  2. #202

    نقل قول: شروع ساخت پروژه ی آنتی ویروس متن باز ایرانی ...

    خروجی این الگریتم یک عدد هگزادسیمال در قالب string است. من از کل این کد به عنوان یک کلاس در پروژه نهایی ایتفاده میکنم.
    توجه کنید که کد زیر امضای فایل FilePath را استخراج و در متغیر متنی sCRC قرار میدهد:

    Private CRC As New clsCRC32
    sCRC = CRC.GetCRC(FilePath)



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

    For i = 0 To UBound(VSig)
    If sCRC = VSig(i).Value Then
    ' enter File Cleaning commands here
    End If
    Next i



  3. #203

    نقل قول: شروع ساخت پروژه ی آنتی ویروس متن باز ایرانی ...

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

  4. #204

    نقل قول: شروع ساخت پروژه ی آنتی ویروس متن باز ایرانی ...

    پایگاه داده آنتی ویروس

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

  5. #205

    نقل قول: شروع ساخت پروژه ی آنتی ویروس متن باز ایرانی ...

    ساختار فایل پایگاه داده

    ما از همان رکورد ساده با دو فیلد امضا و نام ویروس استفاده میکنیم اما در اول فایل یک رکورد کوچک برای مشخصات فایل اضافه میکنیم تا در صورت رشد پروژه ساختار آن انعطاف پذیر باشد. میتوان کل مجموعه امضاهای ویروس را در یک فایل قرار داد اما این روش دارای مشکلات زیادیست. مخصوصاً برای بروزرسانی پایگاه داده. پس در قدم اول ما دو مقدار تعداد امضا ها و تاریخ تولیذ فایل را به فایل اضافه میکنیم. بعد لیستی شامل مشخصات ویروس.
    من دو نوع رکورد موجود در فایل را به این صورت تعریف میکنم:

    'new DataType for Virus Signature
    Private Type VirusSig
    name As String
    Type As String
    Value As String
    Action As String
    ActionVal As String
    End Type

    'new DataType for Virus Signature Info
    Private Type VS_Info
    VirusCount As Long
    LastUpdate As Date
    End Type


    VirusSig دارای فیلد های اضافی است که در این ویرایشگر از آنها استفاده نمیکنیم. اما وجود آن برای توسعه در آینده مفید است.

  6. #206

    نقل قول: شروع ساخت پروژه ی آنتی ویروس متن باز ایرانی ...

    امضای ویروس

    الگوی منحصر به فردی از ویروس که به‌وسیلهٔ برنامه‌های ضدویروس برای شناسایی آنها مورد استفاده قرار می‌گیرد. امضای ویروس علامتی است که ویروس‌ها برروی برنامه‌ای که به آنها حمله کرده اند می گذارند تا دیگر به آن حمله نکنند وتنها ویروسی که یک برنامه را چند بار مورد حمله قرار می‌دهد ویروس اورشلیم است
    هر ویروس با یک یا تعداد بیشتری از الگوها، به نام امضا یا سیگنیچر ارائه می‌‌‌شود، دنباله‌ای از بایت‌ها که (در حالت مطلوب و خوش‌بینانه) به طور خاص و منحصراً، آن ویروس را توصیف می‌‌‌کند. گاهی، سیگنیچرها، رشته‌های اسکن نیز نامیده می‌‌‌شوند، و لازم نیست رشته‌های ثابتی باشند. برخی از نرم‌افزارهای آنتی‌ویروس، علائم don’t care که wildcard نامیده می‌‌‌شوند را نیز پشتیبانی می‌‌‌کنند که یک بایت، یا بخشی از یک بایت خاص، یا تعداد صفر یا بیشتر بایت دلخواه را مقایسه می‌‌‌کند.
    عدم شناسایی امضای ویروس در مقابل آنتی ویروس: گاه ممکن است یک ویروس در برابر آنتی ویروس ناشناس باشد، اما آنتی ویروس یک حالت جستجویی دارد که معروف به ابتدایی نیز می باشد. عکس العمل این جستجوی ابتدایی این می‌باشد که رفتارها را شناسایی کرده و در صورتی که فایل مشکوک باشد آن را به قرنطینه برده و اخطارهایی را نیز به کاربر صادر می‌کند. نکته جالب این است که وقتی ویروس ناشناخته به قرنطینه ارسال شده پس متصل شدن به اینترنت ضد ویروس نمونهٔ ویروس را به شرکت سازندهٔ ضد ویروس ارسال می‌کند.

  7. #207

    نقل قول: شروع ساخت پروژه ی آنتی ویروس متن باز ایرانی ...

    عملکرد آنتی ویروس : روش مبتنی بر کد (امضا)

    اغلب برنامه های آنتی ویروس در حال حاضر از این تکنیک استفاده می کنند. در این شیوه، رایانه میزبان، درایوهای حافظه و یا فایلها با هدف پیدا کردن الگویی که نشان دهنده یک بدافزار باشد، مورد جستجو قرار می گیرند. این الگوها معمولاً در فایلهایی به نام فایلهای امضا ذخیره می شوند. فایلهای مذکور توسط فروشندگان نرم افزارهای آنتی ویروس طبق یک برنامه منظم به روز رسانی می شوند تا قادر باشند بیشترین تعداد ممکن حمله های بدافزاری را شناسایی کنند. مشکل اصلی تکنیک بررسی امضا این است که نرم افزار آنتی ویروس باید قبلاً به روز رسانی شده باشد تا بتواند به مقابله و خنثی سازی بدافزارها بپردازد و لذا بدافزارهای جدیدی که هنوز شناسایی نشده و به فایلهای امضا اضافه نشده اند تشخیص داده نمی شوند.
    در این شیوه زمانی که نرم افزار آنتی ویروس یک فایل را مورد آزمایش قرار می دهد، به یک دیکشنری ویروس که حاوی امضای ویروسهای شناخته شده است مراجعه می کند. در صورتی که هر تکه از کد فایل با یک ویروس شناخته شده مطابقت داشته باشد، فایل مذکور به عنوان یک فایل آلوده شناسایی شده و آنتی ویروس یا آن را پاک می کند و یا آن را قرنطینه می نماید تا برنامه های دیگر به آن دسترسی نداشته و همچنین از انتشار آن جلوگیری به عمل آید. در برخی موارد نیز امکان بازسازی فایل آلوده از طریق حذف ویروس از فایل اصلی وجود دارد که در صورت امکان آنتی ویروس این کار را انجام می دهد.
    همان طور که در بالا نیز گفتیم، آنتی ویروسهای مبتنی بر امضا برای موفق بودن در درازمدت، نیاز دارند که مرتباً دیکشنری حاوی امضاهای ویروس را به صورت آنلاین به روز رسانی نمایند. زمانی که یک ویروس جدید در دنیای رایانه پدیدار می شود، کاربران با تجربه تر فایلهای آلوده را برای نویسندگان آنتی ویروس ها ارسال می کنند تا آنها بتوانند ویروس مزبور را شناسایی کرده و مشخصات آن را به دیکشنری اضافه کنند.
    آنتی ویروس های مبتنی بر امضا غالباً فایلها را در زمان اجرا، باز و بسته شدن و همچنین زمانی که ایمیل می شوند، مورد آزمایش قرار می دهند. به این وسیله یک ویروس شناخته شده به محض وارد شدن به رایانه تشخیص داده می شود. همچنین می توان برنامه های آنتی ویروس را طوری برنامه ریزی کرد که در زمانهای معینی به بررسی کل فایلهای موجود بر روی دیسک سخت بپردازند.
    با وجودی که روش مبتنی بر امضا مؤثر شناخته شده است ولی ویروس نویسان همواره تلاش می کنند تا یک قدم جلوتر از آنتی ویروس ها حرکت کنند و این کار را از طریق ایجاد ویروسهای چندریختی انجام می دهند. ویروسهای چندریختی در واقع دارای یک مکانیزم دفاعی رمزنگاری هستند. بدافزارهایی از این نوع رمزنگاری به عنوان یک مکانیزم دفاعی استفاده می کنند که می خواهند خود را تغییر دهند تا از خطر تشخیص داده شدن توسط نرم افزارهای آنتی ویروس در امان بمانند. این بدافزار ها معمولاً خود را با یک الگوریتم رمزنگاری به صورت رمزی درآورده و سپس برای هر دگرگونی از یک کلید رمزگشایی متفاوت استفاده می کنند. بنابراین بدافزار های چندریختی می توانند از تعداد نامحدودی الگوریتم رمزنگاری به منظور ممانعت از تشخیص استفاده کنند. در هر بار تکرار بدافزار جزئی از کد رمزگشایی دچار تغییر می شود. بسته به نوع هر بدافزار، عملیات خرابکارانه یا دیگر اعمالی که توسط بدافزار انجام می شوند می توانند تحت عملیات رمزنگاری قرار بگیرند. معمولاً یک موتور دگرگونی در بدافزار رمزنگاری شده تعبیه شده است که در هر بار تغییر، الگوریتم های رمزنگاری تصادفی را تولید می کند. سپس موتور مذکور و بدافزار توسط الگوریتم تولیدی رمزنگاری شده و کلید رمزگشایی جدید به آنها الصاق می شود.
    نکته ای که نباید آن را از نظر دور داشت اینست که روشهای متنوعی برای رمزنگاری و بسته بندی بدافزارها وجود دارد که تشخیص انواع شناخته شده بدافزارها را برای آنتی ویروسها بسیار سخت یا غیرممکن می سازد. لذا تشخیص اینگونه ویروسها نیازمند موتورهای قوی باز کردن بسته بندی است که بتوانند فایلها را قبل از آزمایش رمزگشایی نمایند. متأسفانه بسیاری از آنتی ویروس های محبوب و معروف امروزی فاقد توانایی تشخیص ویروس های رمزنگاری شده هستند.

  8. #208
    کاربر دائمی آواتار Jarvis
    تاریخ عضویت
    اسفند 1391
    محل زندگی
    Esfahan
    پست
    580

    نقل قول: شروع ساخت پروژه ی آنتی ویروس متن باز ایرانی ...

    چند روزی به این تاپیک سر نزدم ولی الان که سر زدم از یه طرف ناراحت شدم و از یه طرف خوشحال!
    ناراحت به خاطر این که عده ای از بچه ها این تاپیک رو با جاهای دیگه اشتباه گرفتن و دارن توهین و تحقیر میکنن و هم دیگه رو مسخره میکنن... خوشحال به خاطر این که بالاخره چند خط کد دیدم و اونم به همت دوست عزیزمون hadiroosta هستش که واقعا ازشون ممنونم و امیدوارم همینجوری ادامه بدن
    ما ایرانیا چرا نمی خوایم تو ذهنمون فرو کنیم که اگه یه نفر دلش میخواد پیشرفت کنه به جای مسخره کردنش کمکش کنیم
    میخوام اینو بگم که به این پروژه فعلا به عنوان یک پروژه ی تجاری و رسمی نگاه نکنید ... این پروژه رو فرض کنید یه کار عملی هست .. یه کار تحقیقاتی .. یه چیزی که بتونید ایده های برنامه نویسی تون رو روش پیاده کنید
    یه سوال : این همه برنامه نویسی کار کردید ! کجا میخواید ازش استفاده کنید ؟! من خودم چند سال اگه برنامه نویسی کار کرده باشم ، وقتی جایی ازش استفاده نکنم به چه دردم میخوره ؟! جز این که وقتم رو تلف کردم ؟!
    نمیخواد به فکر ساخت آنتی ویروس ملی باشید ... من پیشنهاد میکنم به فکر این باشید که بفهمید کارکرد یه آنتی ویروس چجوریه ... معایب آنتی ویروس های دیگه چیه ؟ چه ایده هایی برای بهتر کردن یه آنتی ویروس می تونیم به کار بگیریم ... این تاپیک رو تبدیل کنید به یه تاپیک علمی ، تحقیقاتی و آموزشی ... حرفه ای باشید و حرفه ای تحقیق کنید ... از مسخره کردن و تحقیر کردن و پست الکی زدن و طعنه چیزی عاید هیچ کسی نمیشه و نتیجش این میشه که ایران قدرت نرم افزاریش ضعیفه ...!


    یا علی بگید و دانش خودتون رو اینجا به اشتراک بگذارید .. هر کی هر چی بلده اینجا بگه تا با هم پیشرفت کنیم ... بزارید شعارهامون به حقیقت تبدیل بشه!
    به امید پیشرفت...
    آخرین ویرایش به وسیله Jarvis : پنج شنبه 02 آبان 1392 در 19:25 عصر دلیل: همینجوری :)

  9. #209

    نقل قول: شروع ساخت پروژه ی آنتی ویروس متن باز ایرانی ...

    یک ضدویروس چگونه ویروس‌ها را شناسایی می‌کند؟

    روش‌های مختلفی برای شناسایی ویروس‌ها وجود دارد.
    ویروس‌ها (به‌طور معمول) چیزی بیشتر از کد یک برنامه نیستند. بنابراین اگر ما بدانیم که هر کدی چه کاری انجام می‌دهد قادر خواهیم بود که کد حامل ویروس را به محض رویت شناسایی کنیم.
    این کار اولین عملی است که انجام می‌گیرد و به نام Signature Matching معروف است.
    نرم‌افزارهای ضدویروس که به این روش کار می‌کنند دارای یک بانک اطلاعاتی هستند که شامل Virus signatureها است و به محض این‌که کدی را ملاحظه کرد که معادل یکی از رکوردها باشد آن را به عنوان ویروس شناسایی می‌کند. به نظر می‌رسد که موثرترین راه برای کشف ویروس‌ها همین باشد. روش فوق ذاتاً به‌گونه‌ای است که اول ویروس را شناسایی می‌کند و بعد متناظر با آن یک رکورد (virus signature) به بانک اطلاعاتی اضافه می‌کند و حالا اگر ویروسی پیدا کند، در صورتی‌که متناظر با این ویروس رکوردی در بانک اطلاعاتی باشد قادر به شناسایی آن خواهد بود و همین امر ایجاب می‌کند شرکت‌هایی که از این فناوری در نرم‌افزار خود استفاده می‌کنند مدام آن را بروز نگه دارند. به هر حال این یک نقطه ضعف می‌باشد و برای فائق آمدن بر آن دو روش دیگر در نرم‌افزارهای ضدویروس معرفی شده است.

    1- Heuristic method (روش‌ مکاشفه‌ای)
    فلسفه Heuristic این است که بتوانیم ویروس‌هایی را شناسایی کنیم که هنوز Virus Signature آن‌ها در بانک اطلاعاتی موجود نمی‌باشد.
    این کار با استفاده از یک بانک اطلاعاتی که رکوردهای آن حاوی Virus behavior signature می‌باشد قابل انجام است. رکوردهای این بانک اطلاعاتی امضای ویروس خاصی را نگهداری نمی‌کنند بلکه بیشتر رفتارهای (رفتار بد) ویروس‌ها را ذخیره می‌کنند. مثلاً این‌که هر کجا تشخیص بدهند کدی قصد پاک کردن Boot Sector را دارد از آن جلوگیری می‌کنند.
    الگوریتم‌هایHeuristic به دو صورت پیاده‌سازی می‌شوند:
    ● اگر تکنولوژی Heuristic کد هر برنامه را با Virus behavior Signature مقایسه کند و مورد آنالیز قرار دهد آن را روش static heuristic می‌نامیم.
    ● در بعضی مواقع این تکنولوژی قطعه کد را در یک ماشین مجازی اجرا می‌کند تا نتایج رفتاری آن را ببیند به این روش dynamic heuristic می‌گوییم. این روش ممکن است نتایج غلطی نیز تولید کند.

    Integrity checksum -2 (جامعیت سرجمع)
    در روش integrity checksum، فرض براین است که ویروس قصد اعمال تغییراتی در فایل دارد. مثلا‌ً یک ویروس می‌خواهد که روی یک فایل چیزی بنویسد یا این‌که خودش را به آخر فایلی اضافه کند. در این روش نرم‌افزار checksum فایل غیرویروسی و یا درایورهای تمیز را ذخیره می‌کند و هرگاه که تغییری در این checksum مشاهده شود متوجه می‌شود که احتمال دارد ویروسی این کار را انجام داده باشد. در این روش نیز احتمال تولید نتایج غلط وجود دارد. این روش در مقابله با ویروس‌های ماکرویی یا ویروس‌های مانند code Red که بدون این‌که در هیچ فایلی ذخیره شوند در حافظه بارگذاری و اجرا می‌شوند، کارایی چندانی ندارد.
    اگر یک کد مزاحم از تمام الگوریتم‌های یک ضدویروس که تاکنون نام بردیم بگذرد، در گام آخر توسط فناوری دیگری به نام Activity Blocker از فعالیت آن جلوگیری می‌شود. این تکنولوژی از تمام فعالیت‌هایی که ممکن است توسط یک کد مخرب صورت بپذیرد جلوگیری می‌کند مثلاً اگر تشخیص دهد که هارددیسک در حال فرمت شدن است از آن جلوگیری می‌کند.

    یک ضدویروس چه موقع ویروس‌ها را شناسایی می‌کند؟

    معمولاً ضدویروس‌ها به دو روش می‌توانند ویروس‌ها را شناسایی کنند.
    در روش اول ضدویروس، به صورت Real Time (بلادرنگ) و همان موقع که فایل مورد دسترسی قرار می‌گیرد عمل می‌کند. در این روش، ضدویروس درون حافظه مقیم می‌شود و تمام فعالیت‌های مربوط به سیستم را مورد ارزیابی و بررسی قرار می‌دهد. این نرم‌افزارها با همکاری سیستم‌عامل متوجه می‌شوند که هم‌اکنون قرار است فایلی مورد دسترسی قرار بگیرد. سریعاً این فایل را بررسی و نتیجه را گزارش می‌دهند. به این روش on-access می‌گویند.
    مزیت این روش در ارایه یک حفاظت دایمی است ولی اشکالی که دارد این است که تنها فایل‌ها را به هنگام دسترسی مورد بررسی قرار می‌دهد. یعنی احتمالاً اگر ویروسی در یک فایل قرار گرفته باشد و در دیسک ذخیره شده باشد، با این روش قابل شناسایی نیست. در روش دوم این امکان به کاربر داده می‌شود که خودش نرم‌افزار ضدویروس را برای بررسی کردن دیسک یا یک فایل به کمک بگیرد. برای این‌که فعالیت فوق بازده بهتری داشته باشد باید ضدویروس را طوری تنظیم کرد که در دوره‌های زمانی معین اقدام به اسکن کند. این روش به on-demand معروف است.

    ضدویروس‌ها چه کارهایی را می‌توانند انجام دهند و چه کارهایی را نمی‌توانند انجام دهند؟

    1- محافظت صددرصدی
    هیچ ضدویروسی وجود ندارد که بتواند به صورت صددرصد سیستم شما را در مقابل ویروس‌ها ایمن کند. ویروس‌ها و کدهای مخرب همیشه از ضد‌ویروس‌ها جلو بوده‌اند CodeRed .،Melissa ،Funlove ، Nimda و ویروس‌های زیاد دیگر این فرضیه را ثابت نموده‌اند و البته دلیل پویایی و حیات نرم‌افزارهای ضدویروس نیز همین قضیه می‌باشد.
    به خاطر دارید که ضدویروس‌ها برای شناسایی یک ویروس به‌طور معمول نیاز به virus signature دارند و البته هنگامی که این signature موجود نباشد از روش‌های heuristic استفاده می‌شود که این روش‌ نیز همیشه جواب درست را برنمی‌گرداند. با این همه، ضدویروس‌ها در مقابل ویروس‌های شناخته شده (بیش از60 هزار عدد) یک حفاظت همه جانبه از سیستم شما به عمل می‌آورند.
    بیشتر ضدویروس‌ها در صورت بروز و ظهور یک ویروس جدید قادر خواهند بود که به سرعت آن را شناسایی کنند و سیستم شما را از وجود این ویروس پاک نگه دارند.

    2- بازسازی فایل‌های ویروسی شده

    آیا هر ویروسی که توسط نرم‌افزار ضدویروس شناسایی شد قابل از بین بردن است؟

    بستگی دارد که عملکرد ویروس چگونه باشد.
    بعضی از ویروس‌ها مانند ویروس‌های ماکرویی به راحتی توسط نرم‌افزار ضدویروسی تشخیص داده می‌شوند و از فایل بیرون کشیده می‌شوند و پاک می‌شوند. این فایل‌ها هیچ آسیبی به فایل میزبان خود نمی‌رسانند.
    اما بعضی از ویروس‌های دیگر نیز هستند که بر روی فایل میزبان چیزی می‌نویسند یا این‌که اصلاً کدویروس را درون فایل میزبان قرار می‌دهند. یکی از انواع این ویروس‌ها Loveletter است. در این مورد به وضوح دیده می‌شود که فایل میزبان قابل بازیابی نیست و تنها راه‌حل این است که این فایل را پاک کنیم.
    دسته دیگری از ویروس‌ها وجود دارند (مانند ویروس Nimda) که علاوه بر ایجاد تغییرات بر روی فایل، قابلیت دستکاری فایل‌های سیستم و رجیستری را نیز دارند. در این موارد ضدویروس به تنهایی نمی‌تواند کاری بکند. شما به ابزاری نیاز دارید که بتواند فایل ویروسی را حذف کند و تغییرات اعمال شده در سیستم شما را به حالت اولیه برگرداند. معمولاً این ابزار کمکی بر روی وب سایت‌های فروشندگان نرم‌افزار ضدویروس موجود می‌باشد.

    معیارهای انتخاب یک ضدویروس
    حالا که متوجه شدید ضدویروس چگونه کار می‌کند و چه کارهایی را می‌تواند برای شما انجام دهد، وقت آن است ببینیم چه معیارهایی برای انتخاب یک ضدویروس مهم هستند.

    1- شناسایی
    مهمترین وظیفه یک ضدویروس شناسایی ویروس‌ها است. اما چگونه باید مطمئن شویم که یک ضدویروس همان کاری را که ادعا می‌کند انجام می‌دهد؟
    آیا همین قدر که برنامه ضدویروس یک گزارش مبنی بر شناسایی ویروس‌ها تولید می‌کند متقاعد می‌شوید که کار خود را به خوبی انجام می‌دهد؟ پیدا کردن جواب دو سوال زیر می‌تواند به شما کمک ‌کند:
    پرسش اول: نرم‌افزار ضدویروس قادر است چه تعداد ویروس را مورد شناسایی قرار دهد. از این پارامتر عموماً با نام detection Rate یاد می‌شود.
    پرسش دوم: نرم‌افزار ضدویروس تحت چه شرایطی می‌تواند یک ویروس را شناسایی کند؟ آیا اگر این ویروس در حافظه مقیم شده باشد توسط ضدویروس قابل تشخیص است؟

  10. #210

    نقل قول: شروع ساخت پروژه ی آنتی ویروس متن باز ایرانی ...

    توصیه های مهم
    اول: یک راه‌حل این است که شما خودتان ضدویروس را بررسی کنید. برای این کار بر روی اینترنت به دنبال ویروس‌های مختلفی بگردید و این ویروس‌ها را به سیستم خودتان بیاورید و ببینید که آیا ضد‌ویروس می‌تواند این ویروس‌ها را شناسایی کند یا نه؟ ولی من شما را از انجام این عمل شدیداً منع می‌کنم. حتی اگر فروشنده ضدویروس خودش این پیشنهاد را به عنوان یک راه‌حل برای آزمایش ضدویروس داده باشد. همان‌طورEicar که گفته است: استفاده از ویروس‌های واقعی برای تست کردن یک ضدویروس در یک محیط عملیاتی مانند این است که شما آتش را به دفتر کار خود بیاورید و بعد بخواهید بررسی کنید که آیا حسگرهای دود‌ به خوبی کار می‌کنند یا نه؟ شما هرگز نمی‌توانید از نتیجه کار مطمئن باشید. ممکن است برنامه ضدویروس نتواند همه موارد را شناسایی کند و ویروس‌ها شروع به پاک کردن داده‌های ارزشمند سیستم شما و پخش شدن در شبکه بنمایند. امری که ممکن است به بهای از دست دادن شغلتان تمام شود.
    دوم: اگر شما واقعاً می‌خواهید مطمئن شوید که یک ضدویروس قادر به انجام چه کارهایی است می‌توانید در سایتwww.eicar.org یک سری آزمایش‌های بی‌خطر جهت آزمایش ضدویروس پیدا کنید. در این سایت فایل‌های آزمایشی و بی‌خطری وجود دارند که بیشتر ضدویروس‌ها آن‌ها را به عنوان ویروس شناسایی می‌کنند.
    در این حالت اگر ضدویروس موفق به از بین‌بردن ویروس شود چه بهتر و چنانچه نتواند، شما هیچگونه اطلاعاتی از دست نخواهید داد. بدین‌ترتیب می‌توانید یک روش امن برای آزمایش ضدویروس به کار ببندید.
    سوم: شما می‌توانید از منابع موجود که قبلاً این کار را انجام داده‌اند استفاده کنید. بعضی از سازمان‌ها، متولی انجام همین فعالیت می‌باشند. لیستی از ویروس‌ها توسط www.wildlist.org نگهداری می‌شود. در این سایت می‌توانید ببینید که detection Rate یا نرخ شناسایی هر ضدویروس چقدر است.
    این سایت‌ها نیز برای این منظور مفید می‌باشند:
    www.virusbtn.com: این سایت، آماری از توان ضدویروس‌ها برای شناسایی ویروس‌های موجود در سایت wildlist (در دو مورد on-demand,Real-time) را ارایه می‌کند.
    www.chech-mark.com/cgi-bin/Redirect.pl: در این سایت ضدویروس‌ها در دو سطح مورد بررسی قرار می‌گیرند. سطح اول همان است که در سایت Virusbtn نیز انجام می‌شود یعنی فقط شناسایی ویروس‌ها.
    نرم‌افزارهایی در سطح دوم موفق هستند که قادر به از بین بردن ویروس نیز باشند.

    2- امکانات

    بسیار مهم است که بدانیم چه نوع فناوری در ضدویروس موردنظر استفاده شده است و چه ویژگی‌هایی دارد.

    1- سازگاری سخت‌افزاری و نرم‌افزاری سیستم شما با ضدویروس انتخاب شده.
    در نگاه اول شاید این مساله کمی بدیهی به نظر برسد. اما به هر حال برخی از فروشندگان آخرین نسخه نرم‌افزار ضدویروس خود را که تنها با جدیدترین سیستم‌عامل‌ها کار می‌کنند، ارایه می‌دهند.
    بنابراین منطقی به نظر می‌رسد که قبل از اقدام به خرید نرم‌افزار حتماً به این نکته توجه کنید.
    2- توانایی پویش(on-Access Real time) را داشته باشد.
    این یکی از ویژگی‌های اساسی است که یک ضد‌ویروس باید دارا باشد. این بخش نرم‌‌افزار باعث می‌شود که نرم‌افزار ضدویروس مانند یک سگ نگهبان عمل کند. یعنی همان موقع که ویروس در حافظه بارگذاری می‌شود ویروس را شناسایی و خنثی کند.
    این بخش نرم‌افزار باید قادر باشد که به تمام نواحی سیستم از جمله فایل سیستم، بوت رکورد،
    Mabter Boot Record) MBR) و حافظه سرکشی کند.
    3- توانایی پویش به صورت on-demand را داشته باشد. یکی از کارهای ضروری که برای حفظ سلامت سیستم‌تان باید انجام دهید این است که هراز‌چندگاهی وضعیت سیستم خود را با اجرای ضدویروس بررسی کنید.
    مخصوصاً هنگامی که آخرین نسخه ضدویروس را دریافت می‌کنید حتماً این کار را انجام دهید. سناریوی زیر انجام توصیه بالا را توجیه می‌کند.
    شما یک e-mail دریافت می‌کنید که این e-mail شامل یک ضمیمه و ویروسی است. منتهی شما این ضمیمه را هیچ‌گاه باز نکرده‌اید. اجرای ضدویروس بروز شده باعث می‌شود که (احتمالاً) ویروس فوق شناسایی شود.
    4- از الگوریتم‌های Heuristic پشتیبانی کند.
    5- بتواند انواع فایل‌ها با فرمت‌های مختلف را پویش کند.
    اگر شما ویروسی در سیستم داشته باشید که قادر باشد به هر نوع فایلی بچسبد، نیاز به ضدویروسی دارید که بتواند فایل‌های مختلف با پسوندهای مختلف را مورد بررسی قرار دهد. قبلاً تنها راه انتشار یک ویروس این بود که به فایل‌های برنامه‌ای بچسبد، اما امروزه این امکان وجود دارد که ویروس برای انتشار خودش از فایل‌های غیراجرایی نیز استفاه کند.
    6- توانایی جلوگیری از فعالیت اسکریپت‌های مخرب را داشته باشد. بعضی از ویروس‌ها هستند که با استفاده از اسکریپت‌ها طراحی شده‌اند. کرم‌های I Love You از این نوع است.
    موتور ضدویروس باید این قابلیت را داشته باشد که کدهای VBS و JS را شناسایی کند و در صورتی که آن‌ها را مخرب تشیخص دهد از فعالیتشان جلوگیری کند.
    7- توانایی بررسی ضمیمه e-mail را داشته باشد.
    امروزه بسیاری از ویروس‌ها توسط e-mail ‌انتشار پیدا می‌کنند.
    بعضی از آن‌ها مانند کرم KAK حتی این توانایی را دارند تا در سیستم‌هایی که خوب پیکربندی نشده‌اند، بدون این‌که ضمیمه e-mail باز شود شروع به انتشار خود بنمایند.
    8- قابلیت بررسی فایل‌های فشرده را نیز داشته باشد. اگر چه یک ویروس هنگامی که در یک فایل فشرده قرار دارد نمی‌تواند آسیبی به سیستم برساند ولی بهتر است است که اصلاً این ویروس در سیستم شما وجود نداشته باشد.
    9- قابلیت این را داشته باشد که اسب‌های تراوا، جاوااپلت‌های مخرب و اکتیوایکس‌های مزاحم را شناسایی کند. نرم‌افزارهای ضدویروس نه تنها باید این قابلیت را داشته باشند که ویروس‌ها و کرم‌ها را شناسایی کنند بلکه باید بتوانند از فعالیت‌اسب‌های تراوا، اکتیویکس‌ها و اپلت‌های جاوا نیز جلوگیری کنند.
    امروزه بیشتر ضدویروس‌ها دارای این خصوصیت می‌باشند.

    3- نگهداری از نرم‌افزار
    دو مورد زیر در نگهداری از نرم‌افزارهای ضدویروس قابل توجه هستند.
    1- بروز کردن مداوم ضدویروس برای مقابله با ویروس‌های جدید.
    در بخش‌های قبل لزوم بروز نگه‌داشتن بانک‌اطلاعاتی ضدویروس توضیح داده شد. بنابراین ضدویروس منتخب شما باید به ‌گونه‌ای باشد که به راحتی قابلیت روزآمد شدن را داشته باشد و علاوه‌‌‌برآن به‌طور مداوم رکوردهای این بانک اطلاعاتی زیاد شود. شما همچنین باید متوجه این مطلب باشید که از چه مکانیزم‌هایی جهت بروز نگه‌داشتن ضدویروس استفاده می‌شود. آیا نسخه‌های بروز شده بر روی وب سایت فروشندگان قرار دارد؟ و آیا به راحتی قابل دریافت می‌باشد؟ و آیا شما به راحتی می‌توانید از وجود یک ویروس جدید آگاهی یابید یا نه؟
    اگر شما دارای ارتباط اینترنتی کم سرعتی باشید دریافت کردن این نرم‌افزار بسیار خسته‌کننده می‌باشد. این نکته نیز مهم است که در هر بار انجام این عمل باید فقط قسمت روزآمد شده نرم‌افزار دریافت شود.
    نکته دیگر این‌که، نویسندگان ضدویروس‌ها چقدر سعی می‌کنند تا روش‌های جدیدی که برای تولید ویروس‌ها استفاده می‌شود بشناسند و در نرم‌افزار خود به کار گیرند؟
    و نکته مهم‌تر این‌که از زمان خبر انتشار یک ویروس تا وقتی که نرم‌افزار ضدویروس برای این ویروس بروز شود چقدر طول می‌کشد؟

    4- نرم‌افزارهای ضدویروس چقدر بر کارایی سیستم شما تأثیرگذار می‌باشند؟
    همه نرم‌افزارهای ضد‌ویروس بر کارایی سیستم شما تأثیر می‌گذارند. اغلب اوقات اندازه‌گیری میزان این تأثیر سخت است ولی به هر حال به عنوان یک معیار مهم در انتخاب ضدویروس مطرح می‌باشد. پرسش‌های زیر در این مقوله مهم می‌باشند.
    - آیا نرم‌افزار ضدویروس باعث کندتر شدن پروسه بوت سیستم شده است؟
    - زمان دسترسی به یک فایل را افزایش داده است؟
    پس برای انتخاب یک ضدویروس مناسب ناچارید که چند آزمایش را انجام دهید.
    مثلاً می‌توانید زمانی که برای پویش‌های مختلف (تحت شرایط مختلف) توسط یک ضدویروس مصرف می‌شود را محاسبه کنید و در این مدت، زمان میانگین استفاده از حافظه و cpu را نیز اندازه‌گیری کنید.
    یا این‌که زمانی که برای اسکن on-demand نیاز می‌باشد را برای محصولات مختلف اندازه‌گیری کنید.
    یا این‌که وقتی که ضدویروس در حال پویشReal-time می‌باشد ببینید که باز کردن یک فایل بزرگ چقدر طول می‌کشد؟
    توجه به این موضوع که محیط تست برای همه ضدویروس‌ها که مورد ارزیابی قرار می‌گیرند، مشابه باشد بسیار مهم است از جلمه این‌که:
    حجم فایل‌ها و نوع فایل‌هایی که برای هر یک از ضدویروس‌ها مورد بررسی قرار می‌گیرد مهم است.
    هر دو ضدویروس به یک ترتیب و روی یک سخت‌افزار پیکربندی شده باشند.

    5- نرم‌افزار ضدویروس قابل کنترل باشد.
    اگر شما نتوانید بر روی ضدویروس خود نظارت کامل داشته باشید مانند این است که ضدویروس ندارید.
    شما باید بتوانید به‌طور مرتب (هر زمان که نیاز داشتید) و بدون زحمت زیادی بانک اطلاعاتی خود را کامل‌تر یا بروز کنید.
    به راحتی بتوانید از سرورها خود و کلاینت‌های خود محافظت کنید و گزارش‌های نرم‌افزار ضدویروس را برای هر کدام از آن‌ها ببینید.

    6- پشتیبانی ضدویروس همیشگی و موثر باشد.
    فروشنده نرم‌افزار باید قادر باشد که پشتیبانی مورد نظر شما را انجام دهد. مطمئناً پشتیبانی که برای کاربر در خانه ارایه می‌شود با پشتیبانی که برای یک شرکت بزرگ انجام می‌شود با یکدیگر متفاوت هستند.
    فروشنده برای پشتیبانی می‌تواند خدمات زیر را به شما ارایه دهد.
    1- قادر باشد که شما را به صورت on-line پشتیبانی کند و اگر شک کردید که فایلی حاوی ویروس است، بتوانید آن را برای فروشنده ارسال کنید تا نظر خودش را راجع‌به فایل بیان کند.
    اگر یک ویروس جدید شناخته شود، فروشنده باید بتواند این موضوع را به اطلاع شما برساند تا اقدامات لازم را برای خودتان، یا برای شبکه‌ای که شما مس‡وول آن هستید انجام دهید.

  11. #211

    نقل قول: شروع ساخت پروژه ی آنتی ویروس متن باز ایرانی ...

    چند تکنیک آنتی ویروس Kaspersky : (از بهترین آنتی ویروسها )
    1. تکنیک تله گذاری: در این روش آنتی ویروس توجه ویروس را به خود جلب می کند.
    2. مخفی ماندن : وقتی ما آنتی ویروسی در کامپیوتر نصب میکنیم ویروسها در بین فایلها پنهان می شوند. در آنتی ویروس Kaspersky هیچ قسمتی از سیستم (نرم افزاری) متوجه نصب نمی شوند.
    3. سیستم رادار : اطلاع رسانی به کاربران.
    و ده ها تکنیک دیگر.

  12. #212

    نقل قول: شروع ساخت پروژه ی آنتی ویروس متن باز ایرانی ...

    " روشهای شناسایی"
    یکی از معدود نتایج نظری برگرفته از مطالعاتی که بر روی ویروسهای کامپیوتری انجام گرفته است مربوط می شود به اثباتهای عملی که Fred Cohen در سال 1987 به آن رسیده بود. در این مطالعات Fred Cohen به این نتیجه رسید که هیچ الگوی مشخصی نیست که بتوان تمامی ویروسها را از طریق آن شناسایی کرد.پس از انجام تحقیقات نهایی، نتیجه آن این شد که ویروسهای کامپیوتری، نرم افزار یا کدهای مخربی می باشند که توانایی بازتولید و انتشار خود را دارند. اما بعدها محققان متوجه شدند که معانی جدیدی نیز وجود دارند که لزوما با وجود اینکه دارای نقاط مشترکی با ویروسها می باشند ولی از لحاظ عملکرد مترادف با ویروسها نبودند. ابزارهای مخربی جهت رسیدن به اهداف خاص... از سوی دیگری نرم افزارهای آنتی ویروس نیز جهت شناسایی و حذف انواع مختلف بدافزار که با متدهای خاص و حرفه ای در حال طراحی بودند به تکنولوژیهای جدید مجهز می شدند که این تکنولوژیها پایه و اساس طراحی آنتی ویروسهای جدید می باشد.
    متدهای طراحی و شناسایی ویروسها توسط نرم افزارهای آنتی ویروس:
    1-شناسایی از روی امضاء دیجیتالی (Signature Based detection): معمول ترین روشی که آنتی ویروس ها جهت شناسایی بدافزارها مورد استفاده قرار می دهند، شناسایی ویروسها از روی امضاء دیجیتالی می باشد که در آن آنتی ویروسها محتویات یک فایل را با دیتا بیسی از امضاء دیجیتالی ویروسهای اکتشافی مقایسه می کند و در صورت آلوده بودن فایلها بعنوان بدافزار معرفی می شوند، در این روش کل یا بخشی از فایلها اسکن می شود که این بدان علت می باشد که ویروسها می توانند
    2- روش اکتشافی( Heuristic Based Detection): در این روش آنتی ویروس ها با بررسی عملکرد فعالیت های مشکوک به اکتشاف ویروسهای ناشناخته می پردازند، این تکنولوژی یکی از جدیدترین متدهای اکتشافی می باشد. خود را داخل فایل ها جاسازی کنند
    3- روش تقلید (File Emulation) : یکی دیگر از روشهای شناسایی ویروسها توسط نرم افزارهای آنتی ویروس که بر مبنای تکنولوژی Heuristic Analyzer استوارمی باشد، روش تقلید فایل می باشد. در این روش با اجرای یک برنامه در محیط مجازی و سنجش رفتارهای به وقوع پیوسته و مقایسه آن با رفتارهای بدافزارهایی که از قبل به ثبت رسیده اند تشخیص داده می شود که این رفتار مربوط به یک بدافزار می شود یا نه، درصورتی که برنامه اجرا شده یک بدافزار باشد اقدامات لازم جهت پاکسازی و جلوگیری از فعالیت ان بدافزار انجام خواهد گرفت..
    شناسایی از روی امضاء دیجیتالی لازم اما ناکافی
    همانطور که می‌دانید، نرم‌افزارهای آنتی‌ویروس غالبا از روش تست امضاء دیجیتالی به شناسایی بدافزارها می‌پردازند، با وجود اینکه این روش یکی از روش‌های موثر در این زمینه است ولی زمانی بیشترین کارایی را دارد که آنتی‌ویروس‌ها از قبل بااین بدافزار برخورد کرده باشند و امضاء دیجیتالی آن توسط شرکت‌های تولیدکننده آنتی‌ویروس تولید و به دیتابیس آنتی‌ویروس افزوده شده باشد، به همین دلیل این روش در مقابله با بدافزارهای جدید و ناشناخته راهی از پیش نخواهند برد.
    در روش شناسایی بر مبنای امضاء دیجیتالی با توجه به اینکه روزانه ویروس‌های جدیدی تولید می‌شوند، نیاز به بروزرسانی دیتابیس امضاء‌های دیجیتالی امری اجتناب‌ناپذیر به نظر می‌رسد. از این رو جهت یاری رساندن به شرکت‌های تولید‌کننده آنتی ویروس امکاناتی در داخل خود نرم‌افزارهای آنتی‌ویروس تعبیه شده است که به کاربران کامپیوتر امکان ارسال فایل‌های مشکوک به شرکت‌های سازننده آنتی‌ویروس جهت آنالیز و افزودن به دیتابیس امضاءهای ویروسی داده شده است. عملیات کشف و خنثی‌سازی ویروس‌ها توسط متخصصان این رشته و با بکارگیری نرم‌افزارها و متدهای خاص در شرایط مهندسی معکوس اتفاق می‌افتد.
    یکی از نرم‌افزارهایی که جهت آنالیز فایل‌های مشکوک مورد استفاده قرار می‌گیرد نرم‌افزار Interactive Disassambler است. البته توجه داشته باشید که این نرم‌افزارها کار یک آنتی‌ویروس را انجام نداده بلکه به متخصصان جهت شناسایی و اضافه‌کردن امضاء دیجیتالی یک ویروس جدید به دیتابیس آنتی‌ویروس یاری می‌دهند.
    با وجود اینکه روش شناسایی بر مبنای امضاء دیجیتالی روش موثری در جلوگیری از شیوع بسیاری از ویروس‌های کامپیوتری است، ولی ویروس‌نویسان همواره با بکارگیری فناوري‌هايي چون "Oligomorphic" و و اخیرا فناوري کاملاً پیچیده "Metamorphic" سعی دارند که همواره یک قدم جلوتر از نرم‌افزارهای آنتی ویروس باشند. در تکنیک‌های جدیدی که برای ویروس‌نویسی مورد استفاده قرار می‌گیرد این امکان وجود دارد که بخش یا کل فایل آلوده بصورت رمزنگاری شده تولیدگردد که این امر باعث می‌شود ویروس‌های از پیش شناخته شده نیز تنها با ایجاد تغییر در رفتار و شکل و شمایل خود، آنتی‌ویروس را در روش مبتنی بر امضاء دیجیتالی گول بزنند حتی اگر امضاء دیجیتالی ویروس پیشتر از اینها به دیتابیس آنتی‌ویروس افزوده شده باشد.
    با توجه به اینکه بسیاری از ویروس‌ها از روش‌های مشابه جهت انتشار و آلوده ساختن سیستم‌های کامپیوتری استفاده می‌کنند و فقط پس از نفوذ به کامپیوترها تنها با تغییر در بعضی از رفتارها، میزبان خود را تخریب می‌کنند، از این رو با ایجاد یک روش اکتشافی عمومی بسیاری از ویروس‌های کامپیوتری که از یک مفهوم مشخص جهت آلوده‌کردن سیستم‌ها استفاده می‌کنند، شناسایی و در یک خانواده طبقه‌بندی می گردند
    بنابراین برای شناسایی هر نوع ویروس جدید لزوما نیازی نیست امضاء دیجیتالی آن ویروس در دیتابیس آنتی‌ویروس موجود باشد، بلکه با استفاده از فناوري Heuristic Analysis با تشخیص و تطبیق نوع رفتار و عملکرد یک فایل مشکوک با بدافزاری که از قبل شناسایی شده، آن فایل نیز جزء آن دسته از ویروس طبقه‌بندی شده و توسط آنتی ویروس قابل شناسایی و حذف می‌گردد. از ان جمله می‌توان بدافزار Sality را نام برد که در کلاسه‌بندی آنتی‌ویروس‌های مختلف دارای هم خانواده‌های مختلفی است که برای مثال در آنتی‌ویروس VBA32 این بدافزار دارای دو هم خانواده کاملاً متمایز به نام‌های Sality Baka و Sality Kaka است.
    با وجود اینکه شناسایی یک ویروس مشخص و خاص از طریق امضاء دیجیتالی به نظر سودمند می‌آید ولی شناسایی یک خانواده از ویروس‌ها از طریق روش امضاء دیجیتالی عمومی (روش معمول در فناوري "Heuristic Analysis) سریعتر است.محققانی که در زمینه ویروس‌نویسی تبحر دارند به این موضوع رسیده‌اند که تمامی ویروس‌هایی که در یک خانواده طبقه‌بندی می‌شوند دارای نقاط مشترکی در کدنویسی هستند که به آنتی ویروس‌ها کمک می‌کنند تا با شناسایی این نقاط و ارتباط آن با یک امضاء عمومی، تمامی آن بدافزارها شناسایی گردند (این امضاء دیجیتالی عمومی به دیتابیس آنتی‌ویروس‌ها افزوده می‌شود).
    این امضاءهای دیجیتالی غالبا دارای کدهای ناپیوسته قلابی هستند که ویروس‌نویسان غیرحرفه‌ای به منبع ویروس اصلی که قبلا تولید شده اضافه کرده‌اند. از این رو وجود همین کدهای نامتعارف و قلابی به اسکنرهای آنتی‌ویروس‌ها اجازه می‌دهند که بتوانند ویروس‌ها را شناسایی کنند حتی اگر در ساختمان آن ویروس‌ها از کدهای بی معنی استفاده شده باشد. به این روش شناسایی که از متد بالا استفاده می کند، روش "Heuristic Detection" گفته می‌شود.

  13. #213

    نقل قول: شروع ساخت پروژه ی آنتی ویروس متن باز ایرانی ...

    آشنایی با نمونه ای از انواع ویروس های رایانه ای

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


    ویروس برای محافظت خود در برابر ویروس یاب در هنگام جستجو باید درون حافظه قرار گیرد . اولین ویروس ثبت شده از این نوع ،Brain می باشد که یک ویروس تحت Dos است . این ویروس اعمال خروجی و ورودی Dos را کنترل کرده و هر بار که تقاضایی مطرح می شود آن را به ناحیه ای از دیسک که قبلا boot سالم را در آنجا ذخیره کرده است هدایت می کند . از دیدگاه برنامه نویسی ، ویروس وقفه شمار 21H از Dos را تسخیر کرده و نتایج فرامین Dos را به ناحیه دلخواه خود معطوف می کند .

    ویروس های کند


    شناسایی این ویروس ها نیز سخت است ،زیرا آن ها فایل های مورد استفاده سیستم عامل را آلوده می کنند . به عبارت دیگر یک ویروس کند ، تنها فایلی که در حال حاضر مورد استفاده کاربر است را آلوده می سازد . به عنوان مثال ، یک ویروس کند ممکن است فقط ناحیه boot یک فلاپی را در حین اجرای فرمان هایی نظیر FORMAT یا SYS آلوده سازد . یکی از متداول ترین این ویروس ها Darth-Vader می باشد که فقط فایل هایی از نوع COM را آن هم در هنگام نوشتن آنها توسط سیستم عامل آلوده می سازد


    ویروس های پس رو

    یک ویروس پس رو با حمله مستقیم به ویروس یاب سعی می کند از عملیات جستجو برای آشکار شدن خود عبور کند . حرفه ای ها از ویروس پس رو به عنوان ضد ویروس یاب یاد می کنند .
    ساخت چنین ویروسی مشکل نیست . زیرا طراحان ویروس تقریبا به نام ویروس یاب های موجود در بازار دسترسی دارند . تنها کاری که باید انجام گیرد این است که کلیه ی توانایی ها و ویژگی ها ی ویروس یاب مورد بررسی قرار گرفته و با یافتن نقطه ی ضعف آن عمل نوشتن ویروس آغاز می شود .
    متداول ترین روش عملکرد یک ویروس پس رو این است که فایل داده موجود در برنامه ضد ویروس را مورد باز بینی قرار داده و با ذخیره کردن امضای ویروس آن فایل را پاک می کند . بدین ترتیب ویروس یاب قادر به شناسایی آن نوع ویروس خاص نیست
    .

    ویروس های چند بخشی

    این ویروس ها هم فایل های اجرایی و هم سکتور های راه انداز را آلوده می سازند . عنوان چند بخشی برای این ویروس ها به خاطر توا نایی آلوده سازی به روش های متعدد می باشد . وقتی یک برنامه آلوده به چنین ویروسی را اجرا می کنید ، سکتور راه انداز دیسک سخت کامپیوتر آلوده شده و بدین ترتیب با هر بار اجرای یک برنامه آلودگی گسترش پیدا می کند .
    یکی از مشهورترین ویروس های این گروه ، ویروس One-Half می باشد . در شکل 7-14 نحوه عملکرد این ویروس را مشاهده می کنید .


    ویروس های زره پوش

    ویروس های زره پوش خود را با قطعه برنامه ای مسلح می کنند که به واسطه عمل رد یابی ، شناسایی و تخریب بدنه ویروس مشکل می شود . ویروس زره پوش ممکن است با استفاده از "کد پوششی " که حواس نظاره گر را از بدنه ویروس پرت می کند خود را استتار نماید . یکی از مشهورترین این ویروس ها ویروس وال می باشد .
    ویروس های بدل

    ویروس های بدل با ایجاد یک نسخه دیگر از یک فایل اجرایی فعالیت می کنند . به عنوان مثال یک ویروس بدل ، ممکن خود را با عنوان winword.com ذخیره کند . بدین ترتیب با هر بار اجرای winword .exe سیستم عامل ابتدا به سراغ winword .com رفته و با اجرای ویروس سیستم را آلوده کند .

    ویروس های Phage

    آخرین گروه از ویروس ها ، ویروس های Phage هستند که برنامه ها یا پایگاه داده ها را به شکلی غیر مجاز تخریب کرده و تغییر می دهند . حرفه ای ها این دسته از ویروس ها را پس از ویروس پزشکی Phage انتخاب کرده اند . در چنین ویروسی یک سلول آلوده با کد ژنتیک آن تعویض می شود (در پزشکی ) به طور مشابه ویروس Phage در کامپیوتر یک برنامه اجرایی را با بدنه خود عوض می کند.

    روش آلوده سازی سیستم

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



    ویروس های ماکرویی

    در حال حاضر، رشد این دسته از ویروس ها نسبت به سایر ویروس ها بسیار چشمگیر است . این ویروس ها علاوه بر کامپیوتر های شخصی روی هر شبکه ای قابل رشد و توسعه می باشند . بزرگترین خطر ویروس های ماکرویی عدم وابستگی آن ها به سخت افزار و سیستم عامل می باشد . علاوه بر این،ویروس ماکرویی به فایل های اجرایی کاری ندارد بلکه مستقیما به داده ها حمله می کند .
    تنوع و گونه های ویروس ماکرویی به شدت در حال افزایش هستند.در اکتبر سال 1996 تنها 100 ویروس ثبت شده از این نوع شناسایی شدند.
    در ماه مه 1997 تعداد آن ها به 700 عدد رسید و اکنون این رقم اصلا قابل مقایسه با قبل نیست .این ویروس ها با یک زبان داخلی (1) و در درون برنامه های کاربردی نوشته می شوند . نمونه هایی از این برنامه عبارتند از :برنامه های حروفچینی ،صفحه ی گسترده و گرافیکی نویسندگان ویروس برای آلوده سازی فایل هایی که توسط این نوع برنامه ها ایجاد می شوند ،ماکروها را طراحی می کنند .بدین ترتیب با مبادله ی فایل های آلوده ی دیگر کامپیوتر ها نیز آلوده خواهند شد .اکثر اوقات ،ماکروها طوری فایل ها را پاک می کنند که غیر قابل بازگشت باشد.هر سیستمی که قادر به خواندن این نوع فایل های آلوده باشد مورد تهاجم این ویروس خواهد بود.
    زبان داخلی برنامه ها ، غالبا از قدرت های زیادی برخوردار است و می تواند اعمالی نظیر حذف و تغییر نام فایل ها و شاخه ها را انجام دهد.همچنین می تواند محتویات یک فایل را عوض کند . بسیاری از ویروس های ماکرویی با استفاده از Word basic و Visual Basic for Application (2) نوشته می شوند . یک ویروس ماکرویی نوشته شده در VBA قادر به آلوده سازی یک فایل Excle یک پایگاه داده Access با یک طرح PowerPoint می باشد .
    یک ویروس ماکرویی باید روی گزینه های save ،New و saveAse از منوی File باز نویسی شوند تا عملکردشان تضمین گردد.


    برخی از ویروس های ماکرویی مشهور

    ویروس WordMacro/Concept که با عنوان Word Prank Macro یا www6 Macro نیزشناخته می شود ، ماکرویی است که با زبان ماکرو MS Word 6.0 نوشته شده است . این ویروس از چند ماکرو به نام های Payload,FilesaveAs,AutoOpen,AAAZFS,AAAZAO تشکیل شده است . این ویروس سعی می کند صفحه عمومی Word یعنی فایل normal.dot را آلوده کند .اگردر حین آلوده سازی normal.dot ، وجود ماکروهای Payload یا File Save As در صفحه تایید شود ،ویروس فرض را بر این می گذارد که صفحه ی آلوده شده و از ادامه کار دست می کشد . پس از آلوده شدن صفحه ، کلید فایل هایی که توسط گزینه ی Save As ذخیره می شوند ، آلوده خواهند شد . با انتخاب گزینه ی Tools>Macro می توانید به وجود این این ویروس پی ببرید . اگر در لیست ماکروها نام AAAZFS مشاهده شود ، ویروس concept احتمالا سیستم شما را آلوده کرده است.
    با ایجاد ماکروهایی به نام Payload که حاوی هیچ نوع دستوری نباشد می توانید از آلوده شدن سیستم خود جلوگیری کنید . این ماکرو روی ویروسی بازنویسی خواهد شد ، و ویروس تصور می کند یک بار سیستم را آلوده کرده است و از ادامه کار صرف نظر می کند .ایجاد ماکروpayload راه حلی موقتی است. شاید شخصی دیگر بدون اهمیت دادن به این که آیا فایل normal.dot حاوی ماکروهای FileSaveAs یا Payload است با استفاده از بدنه ی Concept ویروسی دیگر طراحی کند . از دیگر ویروس های ماکرویی مشهور عبارتند از WordMacro/Nuclear, WordMacro/DMDA, WordMacro/Hot, WordMacro/Colors, WordMacro/Bandung,WordMacro/Atom و WordMacro/Wzzu,.

    بهترین راه حل برای مقابله با ویروس های ماکرویی

    ازMS Word 97 به بعد با بازکردن فایل حاوی ویروس پیامی نشان داده می شود .علاوه بر این بهتر است کلیه ی فایل های Word را که در قالب email از اینترنت دریافت می شود یا به صورت ذخیره شده روی دیسک تحویل می گیرید ، با استفاده از نرم افزارهای ویروس کش مورد بررسی قرار دهید .
    علاوه بر این در نگارش جدید VBA ، مکانیزمی امنیتی در نظر گرفته شده است که با استفاذه از آن می توان کلیه ماکروهای ویروسی را بی اثر ساخت . زبان VBA در زبان های درونی بسیاری از برنامه ها نظیر AutoCAD,Photoshop,Chameleon کاربرد دارد

  14. #214

    نقل قول: شروع ساخت پروژه ی آنتی ویروس متن باز ایرانی ...

    بدون شرح ... خودتون کد رو ببینید و بگید چیکار میکنه ... البته کد بهینه سازی شده نیست ... بخشی از کد آنتی ویروس متن باز !

        QString CSPath = "C:\\Windows\\System32";
    QDirIterator dir(CSPath,QDirIterator::Subdirectories);

    QCryptographicHash crypto0(QCryptographicHash::Md4);
    QCryptographicHash crypto1(QCryptographicHash::Md5);
    QCryptographicHash crypto2(QCryptographicHash::Sha3_224);
    QCryptographicHash crypto3(QCryptographicHash::Sha3_256);
    QCryptographicHash crypto4(QCryptographicHash::Sha3_384);
    QCryptographicHash crypto5(QCryptographicHash::Sha3_512);
    QCryptographicHash crypto6(QCryptographicHash::Sha224);
    QCryptographicHash crypto7(QCryptographicHash::Sha256);
    QCryptographicHash crypto8(QCryptographicHash::Sha384);
    QCryptographicHash crypto9(QCryptographicHash::Sha512);

    while (dir.hasNext()) {
    QFile file(dir.next());
    if(file.open(QFile::ReadOnly)) {

    crypto0.addData(file.read(1024*1024));
    QByteArray hash0 = crypto0.result();
    crypto1.addData(file.read(1024*1024));
    QByteArray hash1 = crypto1.result();
    crypto2.addData(file.read(1024*1024));
    QByteArray hash2 = crypto2.result();
    crypto3.addData(file.read(1024*1024));
    QByteArray hash3 = crypto3.result();
    crypto4.addData(file.read(1024*1024));
    QByteArray hash4 = crypto4.result();
    crypto5.addData(file.read(1024*1024));
    QByteArray hash5 = crypto5.result();
    crypto6.addData(file.read(1024*1024));
    QByteArray hash6 = crypto6.result();
    crypto7.addData(file.read(1024*1024));
    QByteArray hash7 = crypto7.result();
    crypto8.addData(file.read(1024*1024));
    QByteArray hash8 = crypto8.result();
    crypto9.addData(file.read(1024*1024));
    QByteArray hash9 = crypto9.result();

    qDebug() <<hash0.toHex();
    qDebug() <<hash1.toHex();
    qDebug() <<hash2.toHex();
    qDebug() <<hash3.toHex();
    qDebug() <<hash4.toHex();
    qDebug() <<hash5.toHex();
    qDebug() <<hash6.toHex();
    qDebug() <<hash7.toHex();
    qDebug() <<hash8.toHex();
    qDebug() <<hash9.toHex();

    file.close();
    }
    }

  15. #215

    نقل قول: شروع ساخت پروژه ی آنتی ویروس متن باز ایرانی ...

    اینم یه کد پیشرفته تر ... که البته ... خودتون حدث بزنید و به منم بگید ... بخشی از کد آنتی ویروس متن باز ... !

        static  int iii;

    QString s[100] ;
    s[0] = "57edbed221f31b13a464a84c7c0acdb1";
    s[1] = "d41d8cd98f00b204e9800998ecf8427e";
    s[2] = "4155555555555555555554545455444";
    s[3] = "713b3557e19f1e6e0065c62f042c423d";
    s[4] = "6548adcafc86b36912913b45d21cbf69";
    s[5] = "9sscdaf986424df2d9ca1d9a82414bde";
    s[6] = "End";


    QString fileName = "*.exe";
    QString CSPath = "C:\\";

    QDirIterator dira(CSPath,QDirIterator::Subdirectories);

    QDir dir(dira.filePath());
    QStringList files = dir.entryList(QStringList(fileName),QDir::Files | QDir::NoSymLinks);

    while(dira.hasNext())
    {


    while (!(files.at(iii) == files.last()))
    {
    QCryptographicHash crypto(QCryptographicHash::Md5);
    QFile file(files.at(iii));
    crypto.addData(file.read(1024*1024));
    QByteArray hash = crypto.result();
    qDebug() <<files.at(iii)<< " "<<hash.toHex();
    iii++;
    file.close();
    }
    }
    }

  16. #216
    کاربر دائمی آواتار FastCode
    تاریخ عضویت
    تیر 1388
    محل زندگی
    /dev/null
    پست
    3,486

    نقل قول: شروع ساخت پروژه ی آنتی ویروس متن باز ایرانی ...

    نقل قول نوشته شده توسط Abbas Naghdi مشاهده تاپیک
    بدون شرح ... خودتون کد رو ببینید و بگید چیکار میکنه ... البته کد بهینه سازی شده نیست ... بخشی از کد آنتی ویروس متن باز !

        QString CSPath = "C:\\Windows\\System32";
    QDirIterator dir(CSPath,QDirIterator::Subdirectories);

    QCryptographicHash crypto0(QCryptographicHash::Md4);
    QCryptographicHash crypto1(QCryptographicHash::Md5);
    QCryptographicHash crypto2(QCryptographicHash::Sha3_224);
    QCryptographicHash crypto3(QCryptographicHash::Sha3_256);
    QCryptographicHash crypto4(QCryptographicHash::Sha3_384);
    QCryptographicHash crypto5(QCryptographicHash::Sha3_512);
    QCryptographicHash crypto6(QCryptographicHash::Sha224);
    QCryptographicHash crypto7(QCryptographicHash::Sha256);
    QCryptographicHash crypto8(QCryptographicHash::Sha384);
    QCryptographicHash crypto9(QCryptographicHash::Sha512);

    while (dir.hasNext()) {
    QFile file(dir.next());
    if(file.open(QFile::ReadOnly)) {

    crypto0.addData(file.read(1024*1024));
    QByteArray hash0 = crypto0.result();
    crypto1.addData(file.read(1024*1024));
    QByteArray hash1 = crypto1.result();
    crypto2.addData(file.read(1024*1024));
    QByteArray hash2 = crypto2.result();
    crypto3.addData(file.read(1024*1024));
    QByteArray hash3 = crypto3.result();
    crypto4.addData(file.read(1024*1024));
    QByteArray hash4 = crypto4.result();
    crypto5.addData(file.read(1024*1024));
    QByteArray hash5 = crypto5.result();
    crypto6.addData(file.read(1024*1024));
    QByteArray hash6 = crypto6.result();
    crypto7.addData(file.read(1024*1024));
    QByteArray hash7 = crypto7.result();
    crypto8.addData(file.read(1024*1024));
    QByteArray hash8 = crypto8.result();
    crypto9.addData(file.read(1024*1024));
    QByteArray hash9 = crypto9.result();

    qDebug() <<hash0.toHex();
    qDebug() <<hash1.toHex();
    qDebug() <<hash2.toHex();
    qDebug() <<hash3.toHex();
    qDebug() <<hash4.toHex();
    qDebug() <<hash5.toHex();
    qDebug() <<hash6.toHex();
    qDebug() <<hash7.toHex();
    qDebug() <<hash8.toHex();
    qDebug() <<hash9.toHex();

    file.close();
    }
    }
    به طور خلاصه کد اشتباه میکنه.اگر اشتباه نکنم هر بار که read صدا زده میشه, offset جلو میره.به جز این احتمالا هدفش این بوده که از یک مگابایت اول فایلهای یک دایرکتوری هش بگیره.که باید بگم طراحی فوقالعاده افتضاحی هم داره.
    در یک انتی ویروس شما باید در موارد اینچنینی از معماری سرویس دهنده سرویس گیرنده استفاده کنی و برای متودهای هش از معماری کارخانه و باید یک مقدار انعتاف رو بیشتر کنید.
    مشکل اصلی کد شما اینه که مثل روش کار شهرداری میمونه.همونطور که شهرداری یه خیابون رو آسفالت نمیکنه چون میدونه سال دیگه قرار هست خط تلفن از اونجا رد بشه.شما هم کد بد نشوتید چون میدونید سال دیگه باید همش رو از اول درست بنویسید.

  17. #217

    نقل قول: شروع ساخت پروژه ی آنتی ویروس متن باز ایرانی ...

    این یکی رو دیگه خودم ننوشتم و فقط برای بهینه سازی و ساز گاری یه سری تغیرات کوچیک دادم ... اینم خودتون بگید کارش چیه و چیکار میکنه ...

    فایل هدر :


    #ifndef MD5_H
    #define MD5_H

    // Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
    // rights reserved.

    // License to copy and use this software is granted provided that it
    // is identified as the "RSA Data Security, Inc. MD5 Message-Digest
    // Algorithm" in all material mentioning or referencing this software
    // or this function.
    //
    // License is also granted to make and use derivative works provided
    // that such works are identified as "derived from the RSA Data
    // Security, Inc. MD5 Message-Digest Algorithm" in all material
    // mentioning or referencing the derived work.
    //
    // RSA Data Security, Inc. makes no representations concerning either
    // the merchantability of this software or the suitability of this
    // software for any particular purpose. It is provided "as is"
    // without express or implied warranty of any kind.
    //
    // These notices must be retained in any copies of any part of this
    // documentation and/or software.



    // The original md5 implementation avoids external libraries.
    // This version has dependency on stdio.h for file input and
    // string.h for memcpy.
    #include <stdio.h>
    #include <string.h>

    #pragma region MD5 defines
    // Constants for MD5Transform routine.
    #define S11 7
    #define S12 12
    #define S13 17
    #define S14 22
    #define S21 5
    #define S22 9
    #define S23 14
    #define S24 20
    #define S31 4
    #define S32 11
    #define S33 16
    #define S34 23
    #define S41 6
    #define S42 10
    #define S43 15
    #define S44 21






    static unsigned char PADDING[64] = {
    0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
    };

    // F, G, H and I are basic MD5 functions.
    #define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
    #define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
    #define H(x, y, z) ((x) ^ (y) ^ (z))
    #define I(x, y, z) ((y) ^ ((x) | (~z)))

    // ROTATE_LEFT rotates x left n bits.
    #define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))

    // FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
    // Rotation is separate from addition to prevent recomputation.
    #define FF(a, b, c, d, x, s, ac) { \
    (a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \
    (a) = ROTATE_LEFT ((a), (s)); \
    (a) += (b); \
    }
    #define GG(a, b, c, d, x, s, ac) { \
    (a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \
    (a) = ROTATE_LEFT ((a), (s)); \
    (a) += (b); \
    }
    #define HH(a, b, c, d, x, s, ac) { \
    (a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \
    (a) = ROTATE_LEFT ((a), (s)); \
    (a) += (b); \
    }
    #define II(a, b, c, d, x, s, ac) { \
    (a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \
    (a) = ROTATE_LEFT ((a), (s)); \
    (a) += (b); \
    }
    #pragma endregion

    typedef unsigned char BYTE ;

    // POINTER defines a generic pointer type
    typedef unsigned char *POINTER;

    // UINT2 defines a two byte word
    typedef unsigned short int UINT2;

    // UINT4 defines a four byte word
    typedef unsigned long int UINT4;


    // convenient object that wraps
    // the C-functions for use in C++‎ only
    class MD5
    {
    private:
    struct __context_t {
    UINT4 state[4]; /* state (ABCD) */
    UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */
    unsigned char buffer[64]; /* input buffer */
    } context ;

    #pragma region static helper functions
    // The core of the MD5 algorithm is here.
    // MD5 basic transformation. Transforms state based on block.
    static void MD5Transform( UINT4 state[4], unsigned char block[64] )
    {
    UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16];

    Decode (x, block, 64);

    /* Round 1 */
    FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */
    FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */
    FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */
    FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */
    FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */
    FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */
    FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */
    FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */
    FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */
    FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */
    FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
    FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
    FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
    FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
    FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
    FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */

    /* Round 2 */
    GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */
    GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */
    GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
    GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */
    GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */
    GG (d, a, b, c, x[10], S22, 0x2441453); /* 22 */
    GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
    GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */
    GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */
    GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
    GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */
    GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */
    GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
    GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */
    GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */
    GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */

    /* Round 3 */
    HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */
    HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */
    HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
    HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
    HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */
    HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */
    HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */
    HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
    HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
    HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */
    HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */
    HH (b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */
    HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */
    HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
    HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
    HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */

    /* Round 4 */
    II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */
    II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */
    II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
    II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */
    II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
    II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */
    II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
    II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */
    II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */
    II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
    II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */
    II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
    II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */
    II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
    II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */
    II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */

    state[0] += a;
    state[1] += b;
    state[2] += c;
    state[3] += d;

    // Zeroize sensitive information.
    memset((POINTER)x, 0, sizeof (x));
    }

    // Encodes input (UINT4) into output (unsigned char). Assumes len is
    // a multiple of 4.
    static void Encode( unsigned char *output, UINT4 *input, unsigned int len )
    {
    unsigned int i, j;

    for (i = 0, j = 0; j < len; i++, j += 4) {
    output[j] = (unsigned char)(input[i] & 0xff);
    output[j+1] = (unsigned char)((input[i] >> 8) & 0xff);
    output[j+2] = (unsigned char)((input[i] >> 16) & 0xff);
    output[j+3] = (unsigned char)((input[i] >> 24) & 0xff);
    }
    }

    // Decodes input (unsigned char) into output (UINT4). Assumes len is
    // a multiple of 4.
    static void Decode( UINT4 *output, unsigned char *input, unsigned int len )
    {
    unsigned int i, j;

    for (i = 0, j = 0; j < len; i++, j += 4)
    output[i] = ((UINT4)input[j]) | (((UINT4)input[j+1]) << 8) |
    (((UINT4)input[j+2]) << 16) | (((UINT4)input[j+3]) << 24);
    }
    #pragma endregion


    public:
    // MAIN FUNCTIONS
    MD5()
    {
    Init() ;
    }

    // MD5 initialization. Begins an MD5 operation, writing a new context.
    void Init()
    {
    context.count[0] = context.count[1] = 0;

    // Load magic initialization constants.
    context.state[0] = 0x67452301;
    context.state[1] = 0xefcdab89;
    context.state[2] = 0x98badcfe;
    context.state[3] = 0x10325476;
    }

    // MD5 block update operation. Continues an MD5 message-digest
    // operation, processing another message block, and updating the
    // context.
    void Update(
    unsigned char *input, // input block
    unsigned int inputLen ) // length of input block
    {
    unsigned int i, index, partLen;

    // Compute number of bytes mod 64
    index = (unsigned int)((context.count[0] >> 3) & 0x3F);

    // Update number of bits
    if ((context.count[0] += ((UINT4)inputLen << 3))
    < ((UINT4)inputLen << 3))
    context.count[1]++;
    context.count[1] += ((UINT4)inputLen >> 29);

    partLen = 64 - index;

    // Transform as many times as possible.
    if (inputLen >= partLen) {
    memcpy((POINTER)&context.buffer[index], (POINTER)input, partLen);
    MD5Transform (context.state, context.buffer);

    for (i = partLen; i + 63 < inputLen; i += 64)
    MD5Transform (context.state, &input[i]);

    index = 0;
    }
    else
    i = 0;

    /* Buffer remaining input */
    memcpy((POINTER)&context.buffer[index], (POINTER)&input[i], inputLen-i);
    }

    // MD5 finalization. Ends an MD5 message-digest operation, writing the
    // the message digest and zeroizing the context.
    // Writes to digestRaw
    void Final()
    {
    unsigned char bits[8];
    unsigned int index, padLen;

    // Save number of bits
    Encode( bits, context.count, 8 );

    // Pad out to 56 mod 64.
    index = (unsigned int)((context.count[0] >> 3) & 0x3f);
    padLen = (index < 56) ? (56 - index) : (120 - index);
    Update( PADDING, padLen );

    // Append length (before padding)
    Update( bits, 8 );

    // Store state in digest
    Encode( digestRaw, context.state, 16);

    // Zeroize sensitive information.
    memset((POINTER)&context, 0, sizeof (context));

    writeToString() ;
    }

    /// Buffer must be 32+1 (nul) = 33 chars long at least
    void writeToString()
    {
    int pos ;

    for( pos = 0 ; pos < 16 ; pos++ )
    sprintf( digestChars+(pos*2), "%02x", digestRaw[pos] ) ;
    }


    public:
    // an MD5 digest is a 16-byte number (32 hex digits)
    BYTE digestRaw[ 16 ] ;

    // This version of the digest is actually
    // a "printf'd" version of the digest.
    char digestChars[ 33 ] ;

    /// Load a file from disk and digest it
    // Digests a file and returns the result.
    char* digestFile( char *filename )
    {
    Init() ;

    FILE *file;

    int len;
    unsigned char buffer[1024] ;

    if( (file = fopen (filename, "rb")) == NULL )
    printf( "%s can't be opened\n", filename ) ;
    else
    {
    while( len = fread( buffer, 1, 1024, file ) )
    Update( buffer, len ) ;
    Final();

    fclose( file );
    }

    return digestChars ;
    }

    /// Digests a byte-array already in memory
    char* digestMemory( BYTE *memchunk, int len )
    {
    Init() ;
    Update( memchunk, len ) ;
    Final() ;

    return digestChars ;
    }

    // Digests a string and prints the result.
    char* digestString( char *string )
    {
    Init() ;
    Update( (unsigned char*)string, strlen(string) ) ;
    Final() ;

    return digestChars ;
    }
    } ;

    #endif


    فایل اصلی :

    #include "md5.h"
    #include <iostream>
    #include <string>
    #include <string.h>

    int main()
    {
    MD5 md5 ;
    puts( md5.digestString( "HELLO THERE I AM MD5!" ) ) ;

    // print the digest for a binary file on disk.
    system("Pause");
    puts( md5.digestFile( "E:\\OS Softwares\\Different Kit\\Operation System\\Actions\\Android 4.0 Ice Cream Sandwich.vmdk" ) ) ;
    system("Pause");
    return 0;
    }

  18. #218

    نقل قول: شروع ساخت پروژه ی آنتی ویروس متن باز ایرانی ...

    به طور خلاصه کد اشتباه میکنه.اگر اشتباه نکنم هر بار که read صدا زده میشه, offset جلو میره.به جز این احتمالا هدفش این بوده که از یک مگابایت اول فایلهای یک دایرکتوری هش بگیره.که باید بگم طراحی فوقالعاده افتضاحی هم داره.
    در یک انتی ویروس شما باید در موارد اینچنینی از معماری سرویس دهنده سرویس گیرنده استفاده کنی و برای متودهای هش از معماری کارخانه و باید یک مقدار انعتاف رو بیشتر کنید.
    مشکل اصلی کد شما اینه که مثل روش کار شهرداری میمونه.همونطور که شهرداری یه خیابون رو آسفالت نمیکنه چون میدونه سال دیگه قرار هست خط تلفن از اونجا رد بشه.شما هم کد بد نشوتید چون میدونید سال دیگه باید همش رو از اول درست بنویسید.
    آره خیلی اشتباهه ... این کد رو صرفا برای نمایش و آشنایی گذاشتم ...
    مگر نه طبیعتا اینطوری نمیشه ... البته پیشرفته ترشو گذاشتم که اونم هنوز مشکل داره و برای نمایش گذاشتم
    بزارین دوستان دیگه کد رو تحلیل کنن ... بعدش چیزایی باید بنویسم که بدونید و در موردش بحث کنیم !

  19. #219
    کاربر دائمی آواتار FastCode
    تاریخ عضویت
    تیر 1388
    محل زندگی
    /dev/null
    پست
    3,486

    نقل قول: شروع ساخت پروژه ی آنتی ویروس متن باز ایرانی ...

    روش درستش اینه:
    فایل های ضمیمه فایل های ضمیمه
    • نوع فایل: zip AV.zip‏ (6.6 کیلوبایت, 28 دیدار)

  20. #220

    نقل قول: شروع ساخت پروژه ی آنتی ویروس متن باز ایرانی ...

    2. مخفی ماندن : وقتی ما آنتی ویروسی در کامپیوتر نصب میکنیم ویروسها در بین فایلها پنهان می شوند. در آنتی ویروس Kaspersky هیچ قسمتی از سیستم (نرم افزاری) متوجه نصب نمی شوند.
    من دقیقاً متوجه منظورت نشدم، اگه منظورت اینه که ویروس نمیتونه از نصب بودن AV مطلع بشه اشتباه می کنی ! با چند خط کد و استفاده از WMI میشه این کارو کرد! یا وقتی ما لیست Filter Driver ها رو از رجیستری بخونیم آنتی ویروس جماعت میشه گاو پیشونی سفید
    این کد :
    program Project1;

    {$APPTYPE CONSOLE}

    uses
    SysUtils,
    ActiveX,
    ComObj,
    Variants;

    function VarArrayToStr(const vArray: variant): string;

    function _VarToStr(const V: variant): string;
    var
    Vt: integer;
    begin
    Vt := VarType(V);
    case Vt of
    varSmallint, varInteger:
    Result := IntToStr(integer(V));
    varSingle, varDouble, varCurrency:
    Result := FloatToStr(Double(V));
    varDate:
    Result := VarToStr(V);
    varOleStr:
    Result := WideString(V);
    varBoolean:
    Result := VarToStr(V);
    varVariant:
    Result := VarToStr(variant(V));
    varByte:
    Result := char(byte(V));
    varString:
    Result := String(V);
    varArray:
    Result := VarArrayToStr(variant(V));
    end;
    end;

    var
    i: integer;
    begin
    Result := '[';
    if (VarType(vArray) and varArray) = 0 then
    Result := _VarToStr(vArray)
    else
    for i := VarArrayLowBound(vArray, 1) to VarArrayHighBound(vArray, 1) do
    if i = VarArrayLowBound(vArray, 1) then
    Result := Result + _VarToStr(vArray[i])
    else
    Result := Result + '|' + _VarToStr(vArray[i]);

    Result := Result + ']';
    end;

    function VarStrNull(const V: OleVariant): string;
    // avoid problems with null strings
    begin
    Result := '';
    if not VarIsNull(V) then
    begin
    if VarIsArray(V) then
    Result := VarArrayToStr(V)
    else
    Result := VarToStr(V);
    end;
    end;

    function GetWMIObject(const objectName: String): IDispatch;
    // create the Wmi instance
    var
    chEaten: integer;
    BindCtx: IBindCtx;
    Moniker: IMoniker;
    begin
    OleCheck(CreateBindCtx(0, BindCtx));
    OleCheck(MkParseDisplayName(BindCtx, StringToOleStr(objectName), chEaten,
    Moniker));
    OleCheck(Moniker.BindToObject(BindCtx, nil, IDispatch, Result));
    end;

    procedure GetAntiVirusProductInfo;
    var
    objWMIService: OleVariant;
    colItems: OleVariant;
    colItem: OleVariant;
    oEnum: IEnumvariant;
    iValue: LongWord;
    begin;
    objWMIService := GetWMIObject('winmgmts:\\localhost\root\SecurityCe nter2');

    colItems := objWMIService.ExecQuery('SELECT * FROM AntiVirusProduct',
    'WQL', 0);
    oEnum := IUnknown(colItems._NewEnum) as IEnumvariant;
    while oEnum.Next(1, colItem, iValue) = 0 do
    begin
    Writeln(Format('displayName %s',
    [VarStrNull(colItem.displayName)])); // String
    Writeln(Format('instanceGuid %s',
    [VarStrNull(colItem.instanceGuid)])); // String
    Writeln(Format('pathToSignedProductExe %s',
    [VarStrNull(colItem.pathToSignedProductExe)])); // String
    Writeln(Format('pathToSignedReportingExe %s',
    [VarStrNull(colItem.pathToSignedReportingExe)])); // String
    Writeln(Format('productState %s',
    [VarStrNull(colItem.productState)])); // Uint32
    Writeln('');
    end;
    end;

    begin
    try
    CoInitialize(nil);
    try
    GetAntiVirusProductInfo;
    Readln;
    finally
    CoUninitialize;
    end;
    except
    on E: Exception do
    begin
    Writeln(E.Classname, ':', E.Message);
    Readln;
    end;
    end;

    end.

    اینم نتیجه !
    kav.png

    روز خوش...
    Everything that has a beginning has an end. ... The End?



  21. #221
    کاربر دائمی
    تاریخ عضویت
    دی 1391
    محل زندگی
    شرق تهران
    سن
    33
    پست
    162

    نقل قول: شروع ساخت پروژه ی آنتی ویروس متن باز ایرانی ...

    یه بات چیه؟
    بات در حقیقت, یه بنامست که از الگوریتم هوش مصنوعی استفاده میکنه که
    1. گندکاری کنه به شیوه فجیح: تو نوشتن ویروسای خفن که به نیروگاهای هسته ای میفرستن از بات استفاده میشه
    2. مخفی کردن خودش با استفاده از یه الگوریتم خاص
    روشهای مقابله:
    1. برعکس کردن الگوریتم خود بات و شناسایی کردنش.
    تو این روش ما نمیدونیم چه باتی داره از چه الگوریتمی استفاده میکنه!
    2. پیروی کردن آنتی ویروس از یه الگوریتم خاص!
    تو این روش شاید(احتمال 99%) بات سعی کنه مارو بپیچونه!
    یه سری الگوریتم پیاده میشه که بازم شناسایی نشه
    این باتا بر حسب الگوریتم هوش مصنوعی هر لحضه ممکنه خودشونو تغییر بدن و یا شاید حتی الگوریتمشونو عوض کنن!
    یه کم تغییر میدن.
    راه نابودی:
    تکتک الگوریتمارو رو تموم فایلا پیاده میکنیم و چک میکنیم کدوم باته
    بعدش اون الگوریتمی که بات ازش پیروی میکردو برعکس میکنیم, بات بدبختو از کار میندازیم و بعدش از ring0 به کلی پاکش میکنیم!
    البته باید اینم بگم که تموم باتها حکم ویروسو ندارن!
    از بات تو ساخت بازی م استفاده میشه

  22. #222

    نقل قول: شروع ساخت پروژه ی آنتی ویروس متن باز ایرانی ...

    آقای عباسی عزیز از این که توجه داشتید ممنون .
    به نظرت اگر یک انتی ویروس با یک زبان سطح بالا مثل سی شارپ نوشته بشه بهتر نیست . چون که دات نت توابع قویتری داره و سی شارپ همه قابلیت های سی و سی پلاس را داره ؟
    نظر شما چیه ؟

  23. #223
    کاربر دائمی آواتار FastCode
    تاریخ عضویت
    تیر 1388
    محل زندگی
    /dev/null
    پست
    3,486

    نقل قول: شروع ساخت پروژه ی آنتی ویروس متن باز ایرانی ...

    اگر با همین شیوه پیش برید محصول نهاییتون میشه Microsoft Bob

  24. #224
    کاربر دائمی آواتار FastCode
    تاریخ عضویت
    تیر 1388
    محل زندگی
    /dev/null
    پست
    3,486

    نقل قول: شروع ساخت پروژه ی آنتی ویروس متن باز ایرانی ...

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

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

  25. #225

    نقل قول: شروع ساخت پروژه ی آنتی ویروس متن باز ایرانی ...

    آقای عباسی عزیز از این که توجه داشتید ممنون .
    به نظرت اگر یک انتی ویروس با یک زبان سطح بالا مثل سی شارپ نوشته بشه بهتر نیست . چون که دات نت توابع قویتری داره و سی شارپ همه قابلیت های سی و سی پلاس را داره ؟
    نظر شما چیه ؟
    شما با هر زبانی که آنتی ویروس بنویسی در نهایت نیاز به دسترسی به kernel mod رو دارید و البته باید از APi استفاده کنید که اون با زبان های سطح پایین نوشته شده ... مگر اینکه بخوایید خودتون با C#‎ بنویسید که ... ! ... :)

    یه چیز دیگه اینه که سرعت عملگرد زیاد و درگیری حافظه باید کم باشه در آنتی ویروس در غییر این صورت استفاده نکردن از آنتی ویروس به نفع تره تا استفاده کردنش
    نکته ی دیگه وابسته بودن C#‎ و کلا زبان های تحت .net به خود .net هست که این خیلی مشکل سازه ...
    نکته ی بعدی کرک شده این برنامه هاست که میشه با استفاده از چند ابزار کد برنامه های نوشته شده با این زبان ها رو بیرون کشید
    نکته ی بعدی اینه که به راحتی میشه در فایل های dll یا exe این نوع زبان ها نفوذ کرد و رشته ها رو تغییر و جایگذین کرد
    و نکته ی مهم تر و قابل بحث تر اینه که C#‎ و کلا زبان های .net نمیتونن کد زبان های سطح پایین رو آنالیز کنن .... به طور خلاصه نمیشه باهاش ویروس های اسمبلی یا سی و ... رو تحلیل کرد و داخل فایل های اجراییشون جستجو کرد ...
    پس این یه خطای بزرگ هست که از زبان های سطح بالا استفاده بشه ...
    زبان های سطح بالا چه جاوا و چه سی شارپ و چه ... همگی وابسته هستند ... پس بهتره از مستقیم ترین راه با وبستگی کم و کوتاه استفاده کنیم ... تا با قدرتی بیشتر پیش بریم .

  26. #226

    نقل قول: شروع ساخت پروژه ی آنتی ویروس متن باز ایرانی ...

    این کد رو ببینید و کامپایل کنید
    این کد برای مانیتور کردن یه پوشه هست ...
    سرعت خیلی بالایی داره چون در واقع کاری نمیکنه بجز مانیتور کردن ... همه ی کار ها رو سیستم عامل انجام میده ... همون کاری رو میکنه که یه آنتی ویروس باید انجام بده ... میتونید کامپایلش کنید و نتیجشو ببینید ...

    فایل هدر :

    //{{NO_DEPENDENCIES}}
    // Microsoft Visual C++‎ generated include file.
    // Used by DirMon2.rc
    //
    #define DLG_MAIN 9
    #define IDR_ICO_MAIN 102
    #define IDC_PATH 1001
    #define IDC_BROWSE 1002
    #define IDC_CHANGE 1003
    #define IDC_START 1004
    #define IDC_STOP 1005
    #define IDC_CLEAR 1006
    #define IDC_ABOUT 1007
    #define IDC_STATIC1 1008
    #define IDC_CUSTOM1 1009
    #define IDC_STATUS 1010

    // Next default values for new objects
    //
    #ifdef APSTUDIO_INVOKED
    #ifndef APSTUDIO_READONLY_SYMBOLS
    #define _APS_NEXT_RESOURCE_VALUE 103
    #define _APS_NEXT_COMMAND_VALUE 40001
    #define _APS_NEXT_CONTROL_VALUE 1010
    #define _APS_NEXT_SYMED_VALUE 101
    #endif
    #endif



    فایل اصلی :


    #include <windows.h>
    #include <windowsx.h>
    #include <commctrl.h>
    #include <tchar.h>
    #include <shlwapi.h>
    #include <shlobj.h>
    #include <objbase.h>
    #include <process.h>
    #include "resource.h"

    /** Prototypes ************************************************** ************/

    INT_PTR CALLBACK MainDlgProc(HWND, UINT, WPARAM, LPARAM);
    BOOL MainProc_OnInitDialog(HWND, HWND, LPARAM);
    void MainProc_OnCommand(HWND, int, HWND, UINT);
    BOOL Main_OnWindowPosChanging(HWND, LPWINDOWPOS);
    void Main_OnGetMinMaxInfo(HWND, LPMINMAXINFO);
    void MainProc_OnClose(HWND);
    void ShowErr(DWORD);
    void AddColumn(HWND, LPTSTR, int, int);
    void CheckThreadForExit(HWND);
    void __cdecl th_GetChangeThread(void *);

    /** Global variables ************************************************** ******/

    HINSTANCE g_hInstance;
    TCHAR lptPath[MAX_PATH];
    HWND hList;
    BOOL g_bInThread;
    HANDLE g_hThread;
    HIMAGELIST hImageList;

    //************************************************** **************************

    int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)
    {
    INITCOMMONCONTROLSEX icc;
    WNDCLASSEX wcx;

    g_hInstance = hInstance;

    icc.dwSize = sizeof(icc);
    icc.dwICC = ICC_WIN95_CLASSES;
    InitCommonControlsEx(&icc);

    wcx.cbSize = sizeof(wcx);
    if (!GetClassInfoEx(NULL, MAKEINTRESOURCE(32770), &wcx))
    return 0;

    wcx.hInstance = hInstance;
    wcx.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDR_ICO_MAIN));
    wcx.lpszClassName = _T("DirMonClass");
    if (!RegisterClassEx(&wcx))
    return 0;

    return DialogBox(hInstance, MAKEINTRESOURCE(DLG_MAIN), NULL, (DLGPROC)MainDlgProc);
    }

    //************************************************** **************************

    INT_PTR CALLBACK MainDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
    switch (uMsg)
    {
    HANDLE_MSG (hwnd, WM_INITDIALOG, MainProc_OnInitDialog);
    HANDLE_MSG (hwnd, WM_COMMAND, MainProc_OnCommand);
    HANDLE_MSG (hwnd, WM_CLOSE, MainProc_OnClose);
    HANDLE_MSG (hwnd, WM_WINDOWPOSCHANGED, Main_OnWindowPosChanging);
    HANDLE_MSG (hwnd, WM_WINDOWPOSCHANGING, Main_OnWindowPosChanging);
    HANDLE_MSG (hwnd, WM_GETMINMAXINFO, Main_OnGetMinMaxInfo);
    }

    return FALSE;
    }

    //************************************************** **************************

    BOOL MainProc_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
    {
    hList = GetDlgItem(hwnd, IDC_CHANGE);
    int list_index = 0;

    CreateWindowEx(0, STATUSCLASSNAME, NULL,
    WS_CHILD | WS_VISIBLE | SBARS_SIZEGRIP, 0, 0, 0, 0,
    hwnd, (HMENU)IDC_STATUS, g_hInstance, NULL);

    ListView_SetExtendedListViewStyle(hList, LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
    AddColumn(hList, _T("Folder Path"), 200, list_index++);
    AddColumn(hList, _T("Action"), 80, list_index);

    CoInitialize(0);
    SHAutoComplete(GetDlgItem(hwnd, IDC_PATH), SHACF_DEFAULT);

    return FALSE;
    }

    //************************************************** **************************

    void MainProc_OnClose(HWND hwnd)
    {
    CheckThreadForExit(hwnd);
    CoUninitialize();
    EndDialog(hwnd, 0);
    }

    //************************************************** **************************

    void MainProc_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
    {
    BROWSEINFO bi;
    TCHAR lpPath[MAX_PATH];

    switch(id)
    {
    case IDC_BROWSE:
    RtlZeroMemory(&bi, sizeof(bi));
    bi.hwndOwner = hwnd;
    bi.lpszTitle = _T("Specify Folder Path To Monitor");

    SHGetPathFromIDList(SHBrowseForFolder(&bi), lpPath);
    SetDlgItemText(hwnd, IDC_PATH, lpPath);

    break;

    case IDC_START:
    GetDlgItemText(hwnd, IDC_PATH, lptPath, MAX_PATH);
    if ( !PathIsDirectory(lptPath) )
    {
    MessageBox(hwnd, _T("Invalid Path."), _T("Error"), MB_ICONERROR);
    break;
    }
    if ( !g_bInThread )
    {
    g_bInThread = TRUE;
    SendDlgItemMessage(hwnd, IDC_STATUS, SB_SETTEXT, 0 | SBT_NOBORDERS, (LPARAM) _T("Monitoring Started"));
    EnableWindow(GetDlgItem(hwnd, IDC_PATH), FALSE);
    g_hThread = (HANDLE) _beginthread(th_GetChangeThread, 0, lptPath);
    }
    break;

    case IDC_STOP:
    if ( g_bInThread )
    {
    SendDlgItemMessage(hwnd, IDC_STATUS, SB_SETTEXT, 0 | SBT_NOBORDERS, (LPARAM) _T("Monitoring Stoped"));
    EnableWindow(GetDlgItem(hwnd, IDC_PATH), TRUE);
    InterlockedExchange((LONG *)&g_bInThread, FALSE);
    }
    break;

    case IDC_ABOUT:
    MessageBox(hwnd, _T("DirMon v1.0 ©2010\nCreated by Hoax3r"), _T("About"), MB_ICONINFORMATION);
    break;

    case IDC_CLEAR:
    ListView_DeleteAllItems(hList);
    break;
    }
    }

    //************************************************** **************************

    BOOL Main_OnWindowPosChanging(HWND hwnd, LPWINDOWPOS lpwpos)
    {
    HDWP hDwp;
    RECT rc;

    hDwp = BeginDeferWindowPos(9);
    if ( hDwp ){
    GetClientRect(hwnd, &rc);

    hDwp = DeferWindowPos(hDwp, GetDlgItem(hwnd, IDC_STATIC1), NULL,
    7, 10, rc.right - 60, 20, SWP_NOZORDER | SWP_NOREDRAW);

    hDwp = DeferWindowPos(hDwp, GetDlgItem(hwnd, IDC_PATH), NULL,
    7, 30, rc.right - 60, 20, SWP_NOZORDER | SWP_NOREDRAW);

    hDwp = DeferWindowPos(hDwp, GetDlgItem(hwnd, IDC_BROWSE), NULL,
    rc.right - 45, 30, 35, 20, SWP_NOZORDER | SWP_NOREDRAW);

    hDwp = DeferWindowPos(hDwp, GetDlgItem(hwnd, IDC_CHANGE), NULL,
    7, 60, rc.right - 18, rc.bottom - 138, SWP_NOZORDER | SWP_NOREDRAW);

    hDwp = DeferWindowPos(hDwp, GetDlgItem(hwnd, IDC_STATUS), NULL,
    0, 0, 0, 0, SWP_NOZORDER | SWP_NOREDRAW);

    hDwp = DeferWindowPos(hDwp, GetDlgItem(hwnd, IDC_START), NULL,
    7, rc.bottom - 68, 75, 32, SWP_NOZORDER | SWP_NOREDRAW);

    hDwp = DeferWindowPos(hDwp, GetDlgItem(hwnd, IDC_STOP), NULL,
    97, rc.bottom - 68, 75, 32, SWP_NOZORDER | SWP_NOREDRAW);

    hDwp = DeferWindowPos(hDwp, GetDlgItem(hwnd, IDC_CLEAR), NULL,
    187, rc.bottom - 68, 75, 32, SWP_NOZORDER | SWP_NOREDRAW);

    hDwp = DeferWindowPos(hDwp, GetDlgItem(hwnd, IDC_ABOUT), NULL,
    277, rc.bottom - 68, 75, 32, SWP_NOZORDER | SWP_NOREDRAW);

    EndDeferWindowPos(hDwp);

    RedrawWindow(hwnd, NULL, NULL, RDW_INVALIDATE | RDW_ALLCHILDREN |
    RDW_ERASE | RDW_NOFRAME | RDW_UPDATENOW);
    }

    return TRUE;
    }

    //************************************************** **************************

    void Main_OnGetMinMaxInfo(HWND hwnd, LPMINMAXINFO lpInfo)
    {
    if(lpInfo){
    lpInfo->ptMinTrackSize.x = 373;
    lpInfo->ptMinTrackSize.y = 473;
    }
    }

    //************************************************** **************************

    void ShowErr(DWORD LastErr)
    {
    LPTSTR lpvSysMsg;

    FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
    FORMAT_MESSAGE_FROM_SYSTEM, NULL, LastErr,
    MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT),
    (LPTSTR) &lpvSysMsg, 0, NULL);

    MessageBox(NULL, lpvSysMsg, _T("MsG"), MB_OK | MB_ICONERROR);

    HeapFree (GetProcessHeap(), 0, lpvSysMsg);
    }

    //************************************************** **************************

    void __cdecl th_GetChangeThread(void *param)
    {
    HANDLE hDir;
    DWORD dwRet = 0;
    DWORD iCount = 1;
    DWORD itemcount = 0;
    LPTSTR lpPath = (LPTSTR) param;
    TCHAR lpFilePath[MAX_PATH];
    LPTSTR lptAction;
    LVITEM item = {0};
    SHFILEINFO sinfo = {0};
    FILE_NOTIFY_INFORMATION Buffer[1024];

    if ( hImageList )
    ImageList_Destroy(hImageList);

    hImageList = 0;

    int flags = FILE_NOTIFY_CHANGE_SIZE | FILE_NOTIFY_CHANGE_SECURITY |
    FILE_NOTIFY_CHANGE_LAST_WRITE | FILE_NOTIFY_CHANGE_FILE_NAME |
    FILE_NOTIFY_CHANGE_DIR_NAME | FILE_NOTIFY_CHANGE_ATTRIBUTES ;

    hDir = CreateFile(lpPath, FILE_LIST_DIRECTORY,
    FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);

    if ( hDir != INVALID_HANDLE_VALUE )
    {

    item.mask = LVIF_TEXT | LVIF_IMAGE;
    hImageList = ImageList_Create(16, 16, ILC_MASK | ILC_COLOR16, iCount, iCount);

    while ( ReadDirectoryChangesW(hDir, &Buffer, sizeof(Buffer), TRUE, flags, &dwRet, NULL, NULL) )
    {
    if ( InterlockedExchange((LONG *)&g_bInThread, TRUE) != TRUE )
    break;

    switch(Buffer[0].Action)
    {
    case FILE_ACTION_ADDED: lptAction = _T("Created"); break;
    case FILE_ACTION_REMOVED: lptAction = _T("Deteled"); break;
    case FILE_ACTION_MODIFIED: lptAction = _T("Modifed"); break;
    case FILE_ACTION_RENAMED_OLD_NAME: lptAction = _T("Renamed"); break;
    case FILE_ACTION_RENAMED_NEW_NAME: lptAction = _T("Renamed"); break;
    }

    RtlZeroMemory(lpFilePath, MAX_PATH);
    PathAppend(lpFilePath, lpPath);
    PathAppend(lpFilePath, Buffer[0].FileName);

    if ( lstrcmpi(PathFindFileName(lpFilePath), _T("ntuser.dat")) != 0 &&
    lstrcmpi(PathFindFileName(lpFilePath), _T("ntuser.dat.log") ) != 0 &&
    lstrcmpi(PathFindFileName(lpFilePath), _T("ntuser.dat.log1") ) != 0 )
    {
    SHGetFileInfo(lpFilePath, 0, &sinfo, sizeof(SHFILEINFO), SHGFI_ICON | SHGFI_SMALLICON );

    item.iImage = ImageList_AddIcon(hImageList, sinfo.hIcon);
    DestroyIcon(sinfo.hIcon);

    item.iItem = itemcount;
    item.iSubItem = 0;
    item.pszText = lpFilePath;
    ListView_SetImageList(hList, hImageList, LVSIL_SMALL);
    ListView_InsertItem(hList, &item);

    item.iSubItem = 1;
    item.pszText = lptAction;
    ListView_SetItem(hList, &item);

    ImageList_SetImageCount(hImageList, ++iCount);
    }
    RtlZeroMemory(&Buffer, sizeof(Buffer));
    }

    CloseHandle(hDir);
    InterlockedExchange((LONG *)&g_bInThread, FALSE);
    }
    else
    ShowErr(GetLastError());
    }

    //************************************************** **************************

    void AddColumn(HWND listhandle, LPTSTR text, int width, int c)
    {
    LVCOLUMN clmn;

    memset(&clmn, 0, sizeof(LVCOLUMN));

    clmn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
    clmn.fmt = LVCFMT_LEFT;
    clmn.iSubItem = c;
    clmn.cx = width;
    clmn.pszText = text;
    clmn.cchTextMax = lstrlen(text);

    ListView_InsertColumn(listhandle, c, &clmn);
    }

    //************************************************** **************************

    void CheckThreadForExit(HWND hwnd)
    {
    DWORD dwExitCode = 0;

    GetExitCodeThread(g_hThread, &dwExitCode);

    if ( dwExitCode == STILL_ACTIVE )
    {
    TerminateThread(g_hThread, 1);
    InterlockedExchange((LONG *)&g_bInThread, FALSE);
    EnableWindow(GetDlgItem(hwnd, IDC_PATH), TRUE);
    g_hThread = NULL;
    }
    }

    //************************************************** **************************

  27. #227

    نقل قول: شروع ساخت پروژه ی آنتی ویروس متن باز ایرانی ...

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


  28. #228

    نقل قول: شروع ساخت پروژه ی آنتی ویروس متن باز ایرانی ...

    با سی شارپ انتی ویروس نمی نویسن.
    Native != Managed

  29. #229
    کاربر دائمی آواتار FastCode
    تاریخ عضویت
    تیر 1388
    محل زندگی
    /dev/null
    پست
    3,486

    نقل قول: شروع ساخت پروژه ی آنتی ویروس متن باز ایرانی ...

    در سی شارپ مدیریت حافظه به صورت خودکار انجام میشه بر خلاف ++c . وابستگی ++c به فایل توابع خود که در ابتدای هر برنامه لود میشن در اصل ایده دات نت هم از همینجا گرفته شده ولی با توابع فروان و قویتر و این میتونه یک مزیت باشه .
    این قراره مزیت حساب بشه؟من اینطور فکر نمیکنم.
    جست و جو کنید Custom Memory Allocator

  30. #230

    نقل قول: شروع ساخت پروژه ی آنتی ویروس متن باز ایرانی ...

    میشه از زبان های غیر Native هم استفاده کرد ولی فقط به عنوان User Interface برنامه و نه قسمت های حساس

    مدیریت حافظه !!! دیگه قرار نیست که اونطوری قدیمی کد بزنیم مثلا برای درایور ها الان M$ فریم ورک زده (WDF) و کارا راحت تر شده فقط باید دانش کافی رو داشته باشی تا بدونی چطوری ازشون استفاده کنی. در ضمن این کارا رو کسایی انجام میدن که بتونن حافظه رو مدیریت کنن چون توی Kernel-land گند زدن توی مدیریت حافظه یعنی تباهی

    شب خوش
    Everything that has a beginning has an end. ... The End?



  31. #231

    نقل قول: شروع ساخت پروژه ی آنتی ویروس متن باز ایرانی ...

    با تشکر از راهنمائی دوستان

    ما اگه بخواهیم یک فایل را برسی کنیم که ببینیم حاوی ویروس هست یا نه باید اون فایل را به زبان سیستم تبدیل کنیم و بعد اون را برسی کنیم یا باید به کد همون زبانی که باهاش نوشته شده تبدیل کنیم ؟

  32. #232

    نقل قول: شروع ساخت پروژه ی آنتی ویروس متن باز ایرانی ...

    ما اگه بخواهیم یک فایل را برسی کنیم که ببینیم حاوی ویروس هست یا نه باید اون فایل را به زبان سیستم تبدیل کنیم و بعد اون را برسی کنیم یا باید به کد همون زبانی که باهاش نوشته شده تبدیل کنیم ؟
    نه دیگه به چی تبدیلش کنی ؟!

    شما با #C هم می تونی انی کارو بکنی کافیه در ساده ترین حالت، یک Dis-assembler ساده طراحی کنی (که شاید برای #C هم باشه ولی من فعلاً چندنسخه کدباز فقط برای سی دیدم) بعد اون فایل مشکوک رو دیس اسمبل می کنی و توش دنبال دستورات تابلو می گردی :دی یعنی همون امضای ویروس !
    Everything that has a beginning has an end. ... The End?



  33. #233

    نقل قول: شروع ساخت پروژه ی آنتی ویروس متن باز ایرانی ...

    نقل قول نوشته شده توسط بهروز عباسی مشاهده تاپیک
    نه دیگه به چی تبدیلش کنی ؟!

    شما با #C هم می تونی انی کارو بکنی کافیه در ساده ترین حالت، یک Dis-assembler ساده طراحی کنی (که شاید برای #C هم باشه ولی من فعلاً چندنسخه کدباز فقط برای سی دیدم) بعد اون فایل مشکوک رو دیس اسمبل می کنی و توش دنبال دستورات تابلو می گردی :دی یعنی همون امضای ویروس !
    تشکر آقای عباسی
    با راهنمائی شما دارم ++C کار میکنم . محیط کد نویسی را Turboo C ++ IDE نصب کردم حالا موقعی که کامپلایل می کنم میگه قادر نیست فایل include را باز کنه (unable to open include file) لطفا راهنمایی کنید .
    در ضمن کار کردن با فایل ها در ++C خیلی سریتر هست ولی ایا ساخت دیتا بیس (برای نگهداری امضا ها ) هم راحت و سریع هست ؟

  34. #234

    نقل قول: شروع ساخت پروژه ی آنتی ویروس متن باز ایرانی ...

    نقل قول نوشته شده توسط hadiroosta مشاهده تاپیک
    تشکر آقای عباسی
    با راهنمائی شما دارم ++C کار میکنم . محیط کد نویسی را Turboo C ++ IDE نصب کردم حالا موقعی که کامپلایل می کنم میگه قادر نیست فایل include را باز کنه (unable to open include file) لطفا راهنمایی کنید .
    در ضمن کار کردن با فایل ها در ++C خیلی سریتر هست ولی ایا ساخت دیتا بیس (برای نگهداری امضا ها ) هم راحت و سریع هست ؟

    برای این کار بهتره از کامپاییلر های خود مایکروسافت استفاده کنی
    در مورد دیتا بیس هم ربطی به زبان یا ... نداره ... من الان از دیتا بیس sqlite استفاده کردم ... سرعت عالی و خوبی داره و پیشرفته هست
    البته بعدا میتونیم با دیتا بیس ساخته شده توسط خودمون کار کنیم
    و البته منظور از کار با فایل ها چی هست ؟

  35. #235

    نقل قول: شروع ساخت پروژه ی آنتی ویروس متن باز ایرانی ...

    برای دیتابیس باید باید از یک معماری خیلی دقیق و حساب شده استفاده کنی چون توی مقایسه ها فراخوانی های دیتابیس هم خیلی زیاده و هم باید خیلی سریع انجام بشه تا کاربر شاهد افت کارایی سیستم نباشه
    DBMS ای که عباس گفت(SQLite) برای این مناسبه برای مثال کسپرسکی و مکافی و فکر کنم اویرا از این سیستم استفاده می کنن.
    Everything that has a beginning has an end. ... The End?



  36. #236

    نقل قول: شروع ساخت پروژه ی آنتی ویروس متن باز ایرانی ...

    نقل قول نوشته شده توسط Abbas Naghdi مشاهده تاپیک
    برای این کار بهتره از کامپاییلر های خود مایکروسافت استفاده کنی
    منظورتون همون visual C++‎ IDE هست یا نسخه دیگه ای ؟

    نقل قول نوشته شده توسط Abbas Naghdi مشاهده تاپیک
    و البته منظور از کار با فایل ها چی هست ؟
    منظورم همان باز و بسته کردن و جستجوی فایل هاست چون زبانهای سطح بالا کد های نوشته شده را ابتدا به یک زبان میانی تبدیل می کنند (مثلا در VS به IL ) و بعد از ان زبان به زبان ماشین ترجمه میشه و این سرعت را نسبت به زبانهای میانی (مثل C++‎) کمتر میکنه . مگه همینطور نیست ؟

  37. #237

    نقل قول: شروع ساخت پروژه ی آنتی ویروس متن باز ایرانی ...

    به نظر من اگر قسمتی که فایل ها رو دی اسمبل می کنه و با دیتا بیس مقایسه میکنه را با C++‎‎‎ نوشته بشه و در قالب یک DLL در یک برنامه سطح بالا استفاده بشه میتونه قابل قبول تر باشه (از لحاظ سرعت به خاطر اینکه که با C++‎‎‎ نوشته شده و از لحاظ گرافیک که با یک زبان سطح بالا نوشته شده مثل C#‎‎‎)
    به طور مثال در C#‎ کار کردن با رجیستری خیلی راحته . و همچنین با WPF این زبان میشه گرافیک های خیلی بالایی تولید کرد . و در کل کنترل سیستم عامل با کلاسهای اون خیلی راحته .
    نظر شما چیه ؟

  38. #238
    کاربر دائمی آواتار FastCode
    تاریخ عضویت
    تیر 1388
    محل زندگی
    /dev/null
    پست
    3,486

    نقل قول: شروع ساخت پروژه ی آنتی ویروس متن باز ایرانی ...

    الان دیتابیس های خیلی بهتری اومدن که سرعت بیشتری در این نوع query ها دارند.
    مثل BDB یا voldemort یا cassandra

  39. #239

    نقل قول: شروع ساخت پروژه ی آنتی ویروس متن باز ایرانی ...

    الان دیتابیس های خیلی بهتری اومدن که سرعت بیشتری در این نوع query ها دارند.
    مثل BDB یا voldemort یا cassandra
    میشه بیشتر توضیح بدی !
    به کار میاد ؟
    این پایگاه داده ها یکم ناشناخته هستند .. !!!

  40. #240

    نقل قول: شروع ساخت پروژه ی آنتی ویروس متن باز ایرانی ...

    چچنتا سوال ...
    یه ویروس چه چیزی در سورس خودش داره که برنامه های دیگه ندارن ؟
    یه آنتی ویروس چطوری باید صورس یه فایل رو آنالیز کنه ؟
    یه فایل چطوری میتونه به ویروس آلوده بشه ؟
    یه فایل چطوری میتونه پپاککسازی بشه ؟

صفحه 6 از 7 اولاول ... 4567 آخرآخر

تاپیک های مشابه

  1. پروژه ساخت آنتی ویروس
    نوشته شده توسط pm_hamze در بخش پروژه‌های Open Source
    پاسخ: 96
    آخرین پست: دوشنبه 22 تیر 1394, 13:18 عصر
  2. چگونه در ساخت پروژه های متن باز مشارکت کنیم؟
    نوشته شده توسط MiniMicro در بخش توسعه‌ی لینوکس و نرم افزارهای آزاد
    پاسخ: 2
    آخرین پست: پنج شنبه 29 تیر 1391, 22:30 عصر
  3. کنسرسیوم مدیریت پروژه های متن باز
    نوشته شده توسط Identifier در بخش پروژه‌های Open Source
    پاسخ: 0
    آخرین پست: سه شنبه 26 اردیبهشت 1385, 19:39 عصر
  4. جامعه متن‌باز از پروژه openSUSE ناول استقبال کرد
    نوشته شده توسط zehs_sha در بخش توسعه‌ی لینوکس و نرم افزارهای آزاد
    پاسخ: 0
    آخرین پست: پنج شنبه 24 شهریور 1384, 19:39 عصر

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •