Нақты режим бұзушыларына қарсы күрес
Бұзушының зерттеуінен қорғанудың екі тәсілі бар:
- бұзушыны анықтау және басқаруды бұзушыға қарсы бұтақ реакциясына беру;
- код фрагменттерімен бағдарламаны «қоқыстау», олар бұзушысыз қалыпты жұмыс істейді, ал бұзушы бар кезде апаттық жағдайға, компьютердің дұрыс жұмыс істемеуіне немесе бағдарламаның орындалу барысының бұрамлануына әкеледі.
Бұзушыны анықтау.
Нақты режим бұзушыларын анықтау жетерліктей оңай. Оларды анықтаудың екі негізгі тобын атап айтуға болады:
- процессордың аппараттық ерекшеліктерін қолдану, әсіресе командалар тізбегінің бары, сонымен бірге кейбір нұсқауларды орындағаннан кейін трассирлі үзудің жоғалуы;
- операциялық ортаның өзгеруін үзу векторын тексеру жолымен, Бағдарламаның жеке бөліктеріне кеткен уақытты тексеру, Бағдарламаны жіберу кезінде регистлердің алғашқы жағдайын тексеру және т.с.с. анықтау.
Бұзушылар комьютердің мынадай ресурстарын қолданады: INT1 сияқты үзулерді, INT 3 және TF трассировка жалауы. Мұның бәрі қорғалатын бағдарлама бұзушының зерттеуін анықтау үшін қолданылуы мүмкін. Мәселе мынада, Intel 80x86 сияқты процессорлар бір команданың трассировкасын «жоғалтады», егер оның алдындағы команда сегмент регистрінің мәнін өзгерткен болса, бұзу процесіндегі TF трассировкасының жалауының орнатылғандығын анықтауға болады.
486 тобындағы процессорларда бұзушыны команданы алдын ала таңдау буферін қолданып білуге болады. Таңдалған және сол тізбекте орналасқан команда кодының өзгеруі бағдарламаның орындалу барысына әсер етпейді.
Бұзушыны анықтаудың келесі тәсілін тек нашар сапалы бұзушыларға қарсы қолданамыз, мәселен CodeView немесе Turbo Debugger. Ол мынаған негізделген: бағдарламаны жүктеу барысында анықталған түрде регистрлердің инициализациясы жүреді. Бағдарламаны бұзушыға зерттеу аз емес қууларды міндетті етеді. CodeView және TD бірінші қуу кезінде AX, BX, CX, DX, SI, DI, BP регистрлерін нөлдейді. Екінші қуу кезінде CodeView бұл регистрлерді тағы да нөлге теңестіреді, ал Turbo Debugger алдындағы қуудан қалған «қоқысқа» мүлдем тиіспейді. Бағдарлама басында регистрлердің мәнін керектілермен салыстырып, бұзушыны анықтауға болады.
Нақты режимде бұзушының барында бағдарлама жұмысының бұрмалануы.
Бұған бірнеше тәсілдерді атап кетуге болады:
- контрольді нүктенің құрылуына және бағдарлама кодының өзгеруіне қарсы әрекет жасау;
- қолданушымен бірге интерфейстің бұзылуы, мысалы, пернетақтаны блоктау арқылы экранға нәтижені бұрмалау;
- код учаскесінің генерациясы, шифрлау, жүйені қорғаудағы басқа да қысқа бағдарламаларды шақыру сияқты жауакершілікті талап ететін әрекеттерді жүзеге асыру үшін бұзу (кейде тек бұзу ғана емес) үзулерін қолдану;
- орындалатын код аймағында стекті анықтау және оны бұлжытпай ауыстыру.
Достарыңызбен бөлісу: |