Орындаушы файлдардың бастапқы жазуы (заголовок).
Зақымдалмаған файл туралы ақпарат ретінде алдын-ала орындаушы файлдағы бастапқы жазудың форматын сақтау керек. Бұл үшін орындаушы файлдардың форматы туралы DOS келіссөзін білу керек. Екі формат түрі бар: .соm және .ехе. ТР-4(және жоғары) кез-келген программа тек қана .ехе файлында ғана берілуі (оттранслирована), сондықтан бұл форматта тоқталамыз.
.ехе-файлдың басында бастапқы жазу орналасады, онда дисктік файлды жұмысқа дайын программаға өзгертуге керекті бүкіл ақпарат сақталады. Бастапқы жазуының алғашқы 28 байт келесі мәліметтер құрылымына сәйкес келеді:
Type
HeadExeType=record
Sing:Word; {ехе файлдың белгісі}
PartPag: Word; {Файлдың соңындағы толық емес сектордың бөлігі}
PageCnt: Word;{Толық емес секторды қоса отырып секторлардың саны}
ReloCnt: : Word;{Орын ауыстыру кестесіндегі секторлар саны}
HdrSize: Word;{Параграфтардағы батапқы жазудың ұзындығы }
MinMem: Word;{Дөңбешіктің минималды өлшемі (параграфтарда)}
MaxMem: Word;{Дөңбешіктің максималды өлшемі (параграфтарда)}
Reloss: Word;{SS стек сегментінің бастапқы мәні}
ExeSP: Word;{ SP стек сегментінің бастапқы мәні }
ChkSum: Word;{файлдағы барлық сөздердің қадағалаушы суммасы}
ExeIP: Word;{программаның еңгізу нүктесінің жылжуы}
ReloCS: Word;{CS сегмент кодының бастапқы мәні}
TablOff: Word;{орын ауыстыру кестесінің бірінші элементінің жылжуы}
Overlay: Word;{оверлей нөмірі немесе негізгі программаға 0}
End; {HeadExe}
Оверлей-бұл оверлей буфері деп аталатын жад бөлшегіне белгілі-бір уақыт аралығында керекті әр түрлі оверлей (перекрывающие) модульдері еңгізіледі жедел жадыны пайдалану тәсілі. Бұл жағдайда да барлық оверлей модульдері жұмысқа дайын түрінде дискте сақталады, ал жедел жадыда әр мезетте тек бір белсенді модуль немесе бірнеше белсенді емес модульдер сақталады.
Қалған бастапқы жазу элементтері орын ауыстыру кестесін қамтиды. Бұл кесте жүктелетін программа адрестерін настройкасына арналады. Кесте файлдың басында Tabloff байттан басталады да, келесі түрдің ReloCnt төртбайтты эллементін қамтиды:
Type
ReloTablItem=record
ItemSeg:Word;{орын ауыстыратын адрестің сегменті}
ItemOfs:Word; {орын ауыстыратын адрестің жылжуы}
ехе-файлының белгісі sign бетінде “MZ” ($5A4D астынды) символы ретінде сақталады. Кез-келген ехе-файлы бұл белгіден басталу керек.
HdrSize беті бүкіл бастапқы жазудың ұзындығын параграфтарда қамтиды (яғни әр-біреуінің ұзындығы 16 байттан тұратын жад бөлігінде).
PartPag және PageCnt беттері жадқа еңгізілетін ехе-файлының бөлігінің жалпы ұзындығын келесі формула арқылы анықтайды:
L=( PageCnt + 1 )*512 + PartPag – HdrSize * 16
Программаны еңгізген кезде қалған файл бөлігі (ехе-файлының ұзындығы L + H rSize * 16-дан үлкен болуы мүмкін) есептелінбейді (1-суретке қараңыз). Әдетте ТР жүйемен құралған файлдың қалдығында (егер қалдық қалса) ендірілген олтадчикпен не оверлеймен пайдаланылатын ақпаратты құрайды.
Сурет-1 Сурет-2 Сурет-3
(Осында сурет-1 – зақымдалмаған файл; сурет-2 – вирус файлдың соңында; сурет-3 – вирус файлдың ортасында)
Ехе-вирустардың көбі өз программасын файлдың соңында орналастырады. Бұл программа жадқа ену үшін және басқару оған берілу үшін вирус PartPag, PageCnt, ReloCS, ExeIP (нүкте адресі; осыған еңгізу соңының беттерінің басқаруы беріледі) (мүмкін басқа беттерді де) беттерін өзгертеді . Осы ендіру тәсілі бойынша жадқа еңгізілетін файлдың жалпы ұзындығы келесідегідей болуы шарт:
ExeSize = FileSize+VirusSize, осында FileSize – бұл ехе-файлдың жалпы ұзындығы, ал VirusSize – вирус программасының ұзындығы. Файл қалдығында оверлейлер сақталынуы мүмкін болғандықтан ( немесе өзін-өзі босату программасының архиві), ExeSize-дың ұзындығы тым үлкен бола алады, осындай жағдайда программа жадқа ене алмайды немесе дұрыс істей алмайды. Кейбір шала жазылған вирустар бұл жағдайға көңіл аудармайды және өзін-өзі тез көрсетеді, өйткені зақымдалған программалар өз жұмысын тоқтатады.
Жаңа ғана қарастырылған оверлей мағынасы келесі мәнді қамтиды.
Overlay – бұл әрдайым есте сақтау құрылғысындағы (мысалы, дискте) арнайы бөлігінде болатын және жадқа белгілі уақыт аралығында еңгізілетін программа бөлігі. Ал оның орнына,әдетте, жадта бар программалардың басқа оверлей бөлшектері жазылады.
Оверлейді пайдалану үлкен программаларға шағын жад мөлшерлеріне енуді тез әрекеттің орнына қамтамасыз етеді.
Вирусты ендірудің екінші тәсілі – еңгізілетін программаның басына дейін және файлдың бастапқы жазудан кейін вирустың жалғасады. (сурет-3)
Осындай ену тәсілі ехе-файлды толығымен емес ендіруді мүмкін қылады, ал еңгізілген программаның ұзындығы тек вирус кодының ұзындығына ұзартылады. Осы тәсілдің іске асуы күрделілеу болады, өйткені вирус негізгі программаға басқаруды берудің алдында программалық сегменті (PSP) префиксінің 256 байтын ол вирус кодының соңына апаруы керек, себебі PSP міндетті түрде программа тақырыбының алдында болу керек- керісінше жағдайда программаның PSP-мен маңызды байланысы немесе программаның өзіндік қатыстық адресациясы бұзылады.Сонымен қатар, зақымдалу прцессінің барысында ол орын аустыру кестесіжәне абсолютті адрестің әрбір элементінің ImemOfs аймағын бұл элементпен көрсетілген VirusSize ұзындыққа арттырады. DOS стандартты жүктеуішінен айырмашылығы, вирус жүктелетін программаны емес, оның файлдық бейнесін (яғни әр түрлі кластерлердегі программа бөліктерінің орналасуын) түзетуге мәжбүр болады.
Орташа қиындығы бар ехе-программаларында орын аустыру кестелеріндегі элементтердің саны бірнеше жүздіктерді құрайтын болғандықтан вирустың кестенің настройкасын жасау процессі программаны іске қосу уақытын біршама ұзартады, оны қолданушы аңғаруы мүмкін. Көбею этапында вирустар мүмкіндігінше өз әрекеттің нәтижесін қолданушыдан жасырады, сондықтан ехе-файлдар файлдың бастапқы жағында жалғанған вирустармен зақымдалу сирек кездеседі.
3-тәсіл –бұл вирустың орындаушы программаның денесіне тікелей ендірілуі. Практикада бұл үнемі программа жұмысының логикасын бұзуын білдіреді, сол себепті сондай вирус тез анықталады.
Нәтиже: Жоғарыда айтылғанның бәрі мынандай нәтижеге әкеледі- кез келген вирус ехе-файлды зақымдау үшін бағытталған, ол файлдың соңына өз кодын жалғап оның бастапқы жазылуын өзгертеді. Яғни, программаның зақымдалуын қадағалау және вирусты алып тастау үшін қандай да бір жерде файлдың бастапқы жазылуын және оның ұзындық эталонын сақтап белгілі бір уақыт сайын нақты бастапқы жазылуы мен ұзындығын мәндер эталонымен салыстырып отыру керек.
Ескерту: Кейбір вирустар олардың программасы орналасқан дисктік секторларға жасалған кез келген қатынауды қадағалайды да бұл секторлардың зақымдалмаған көшірмелерін «алдап береді» («подсовывают»). Осындай вирустарды («көрінбейтін вирустар» деп атайды) стандартты DOS функцияларына қатынау арқылы таба алмаймыз. Олармен күресу үшін BIOS-үзілісіне тікелей $13 (сыртқы жадының функциясы) қатынау пайдаланылады. Бұл ойдың мысалы ANTIVIR программасында қарастырылған.