Прост HLLc вирус
HLLO - Презапис на езика на високо ниво. Такъв вирус замества програмата с тялото си. Така програмата се унищожава и когато потребителят се опита да стартира програмата, вирусът се стартира и „заразява“ допълнително.
HLLC - Езиков спътник на високо ниво. Повечето от тези вируси датират от древната древност (преди 6-7 години), когато потребителите са имали DOS и са били много мързеливи. Тези вируси търсят файла и без да го променят, създават копие от себе си, но с разширение .COM. Ако мързеливият потребител напише само име на файл в командния ред, тогава първият DOS търси COM файл, стартира вирус, който първо си върши работата и след това стартира EXE файла. Има и друга модификация на HLLC - по-модерна: Вирусът преименува файла, запазвайки името, но променяйки разширението - от EXE, да речем, OBJ или MAP. Вирусът замества оригиналния файл с тялото си. По този начин потребителят стартира вирус, който след извършване на акта на възпроизвеждане стартира необходимата програма - всички са доволни.
Работа с файлове - вирусът комуникира с тях доста активно:
1. Връзка с файла: процедура AssignFile (var F; Име на файл: низ);
Например: AssignFile (F1, ’klizma.exe’);
2. Отваряне на файл за четене: процедура Reset (var F [: File; RecSize: Word]);
Например: Нулиране (F1);
3. Четене на информация от файл в буфер: процедура BlockRead (var F: File; var Buf; Count: Integer [; var AmtTransferred: Integer]);
Тук buf е масив, например. Buf: Array [1.65535] от Char;
Пребройте - колко байта искате да прочетете
Например: BlockRead (F1, Buf, 1024);
4. Записване от буфера във файл: процедура BlockWrite (var f: File; var Buf; Count: Integer [; var AmtTransferred: Integer]);
Почти същото като предходното.
5. Отваряне на файл за запис, целият запис ще се извърши в края на файла: Приложение (F: Файл);
6. Отваряне на файл за презаписване:
процедура Rewrite (var F: File [; Recsize: Word]); След това съдържанието на файла се нулира.
7. Потърсете файл. Не можем без него, трябва да търсим жертва J. функция FindFirst (const Path: string; Attr: Integer; var F: TSearchRec): Integer;
Attr - файлови атрибути, например faAnyFile - всеки файл, faArchive - архивиран, faHidden - скрит.
F - променлива от типа TsearchRec, в нея delphi изтласква всички характеристики на намерения файл.
Например: FindFirst (‘* .exe’, faAnyFile, sr);
Sr.Name - име на намерения файл
Sr.Size - неговият размер.
За да търсите следващия същия файл, напишете FindNext (Sr);
Ако файлът бъде намерен, процедурите FindFirst и FindNext връщат 0 (нула). Ето един съвет: можете да създадете интересен цикъл във вашия вирус:
Резултат: = FindFirst (‘* .exe’, faAnyFile, sr);
Докато резултат = 0 правя
Започнете
// Напишете процедурата за заразяване тук
FindNext (sr);
Край;
8. Затваряйки файла, всички наши извращения с него се запазват: процедура CloseFile (var F: File);
9. Преместване на рамка за четене: процедура Seek (var F; N: Longint);
Нека го обясня по-ясно: да кажем, че трябва да прочетете парче от 1000 байта от файл с 3000 байта, така че последният байт да попадне в буфера; ясно е, че четенето трябва да започне (и след това да се задълбочиJ) не от 0, а от 1000 байта! Затова пишем: Търси (F1,1000); И след това BlockRead (...);
10. Понякога, ако нещо не се получи, е важно да бъдете информирани за това. Да предположим, че искате да знаете дали четенето от файл е успяло. Веднага след BlockRead пишем: IF Ioresult = 0 тогава ... Ако нула, тогава всичко е успешно, ако не, се връща код за грешка. Тази техника е възможна само ако !
11. Когато е необходимо да прекратите програмата, без наистина да изненадате потребителя (например при HLLO вируси, когато няма програма за стартиране на J), аз лично наричам добрия стар стек препълване: