Antiotladka choralarini tahlili. Mashina kodi trassirovkasi. O’rganib chiqilishi lozim bo’lgan savollar: 1. Antiotladka choralarini tahlili 2. Mashina kodi trassirovkasi Javoblar: 1. Biz dasturiy mahsulotimizni ommaga namoyish etganda, dasturiy mahsulotimizning litsenzion ruxsatnomalarni yozishga odatlanganmiz: “Dasturiy mahsulotni kod qismiga o’tish, dekompilatsiya yoki disassimbleratsiya qilish taqiqlanadi”. Ko’pgina hollarda bu so’zlar yaxshi himoya bermay qo’yadi va bu innovatsiyamizni shunga o’xshagan hurujlar va raqobatbardoshliligini ta’minlashda texnik usullardan foydalanish talab qilinadi. Komputer himoyasi uchun antiotladkaning 5 usuli: 1. Otladchikning borligini tekshiruvchi o’rnatilgan funksiyalar Windows operatsion tizimi otladkadan himoyalanish uchun bir nechta oddiy tayyor instrumentlarni taqdim etadi. Antiotladkaning oddiy texnikasi o’ziga IsDebuggerPresent funksiyasini chaqirish xususiyatiga ega. Agar otladka qilayotgan shaxs otladkani foydalanuvchi rejimida amalga oshirayotgan bo’lsa, bu funksiya “TRUE” qiymat qaytaradi. Bu funksiya protsess yoki PEB(Process environment Block)ning operatsion blokiga yuklanadi, va unda qisman BeingDebugged maydoni bor. Bu faktdan foydalanib, DLL inyeksiyadan foydalanib, tekshirish jarayonidan oldin BeingDebuggedning qiymatini 0ga tenglashtirib qo’yish mumkin. Bunday tekshiruvlarni amalga oshirish uchun main funksiyasi yaxshi variant hisoblanmaydi, bu funksiya daisassembler jarayonida birinchi bo’lib tekshiriladigan funksiya hisoblanadi. 2. Potoklarni yashirish Windows 2000 versiyadan boshlab NtSetInformationThread funksiyasi ThreadHideDebugger nomli yangi flagga ega bo’ldi. Bu usul Windows OT oilasiga mansub operatsion tizimlar uchun antiotladkaning samarali usuliga aylandi. Bu flagi mavjud bo’lgan har bir potok otladka protsessiga o’zi haqida ma’lumot jo’natmay qo’yadi, xususan har bir to’xtalishlar nuqtalari haqida ham, shu qatorda u o’zini ixtiyoriy bir otladchikdan yashiradi. Asosiy potok uchun ThreadHideFromDebugger dan foydalanish otladchikni protsessga ulanish jarayonini anchagina qiyinlashtiradi. Windows Vista bu g’oyaning matiqiy davomini NtCreateThreadEx funksiyasi ko’rinishida taqdim qildi. U o’zida CreateFlags parametrini olib, THREAD_CREATE_FLAGS_HIDE_FROM_DEBUGGER flagini yoqadi. Bu flagi yoqilgan protsess o’zini otladchikdan berkitadi. 3. Flaglarni tekshirish Xatolarni tuzatish tizimning turli tuzilmalarida va jarayonlarida turli xil flaglarning qiymatini o'zgartirish orqali aniqlanishi mumkin. Windows NT tizim o'zgarishini disk raskadrovka va kuzatib borish uchun ishlatiladigan flaglar to'plami bilan NtGlobalFlag deb ataluvchi global o'zgaruvchini o'z ichiga oladi. Yuqoridagi PEB tuzilishi NtGlobalFlagning o'z maydonini o'z ichiga oladi. Disk raskadrovka paytida ushbu maydonning qiymati bir nechta maxsus flaglarni belgilash bilan farq qiladi. Ushbu flaglarni tekshirish xatolarga yo'l qo'yishni aniqlashga yordam beradi. Bekor qilishni aniqlash uchun ishlatilishi mumkin bo'lgan flagning yana bir tekshiruvi tuzoq bayrog'i (TF) tekshiruvidir. EFLAGS ro'yxatiga kiritilgan. TF1 bo'lsa, protsessor nosozlik jarayonini qo'llab-quvvatlaydigan yo'riqnomaning har bir bajarilishidan keyin INT 01h ("bir qadam" istisno) hosil qiladi. 4. To'xtash nuqtalarini aniqlash Breakpoints har qanday disk raskadrovka jarayonining muhim qismidir va bir marta aniqlangan bo'lsa, xatolarni tuzatuvchini bartaraf qilishimiz mumkin. Qaramaqarshi nuqtalarni aniqlashga asoslangan qarama-qarshi xatolarga qarshi taktika eng past o'tish davriga aylandi. Ikkita turdagi nuqtalar mavjud: dasturiy ta'minot va apparat. Software breakpoints, kodni ichiga int 3h yo'riqnomasini in'ektsiyalash orqali xato tuzatuvchisi tomonidan o'rnatiladi. Shunday qilib, xatolarni aniqlash usullari mos keladigan funktsiyaning summasini hisoblash asosida amalga oshiriladi. Bunday himoya bilan shug'ullanishning universal usuli yo'q - xaker kodni hisoblash uchun javobgar bo'lgan va barcha tegishli o'zgaruvchilar qaytariladigan qiymatlarini o'zgartirish uchun javobgar bo'lgan kodni topish kerak bo'ladi. Apparatni to'xtatish nuqtalari maxsus disk raskadrovka registri yordamida o'rnatiladi: DR0-DR7. Ularni qo'llash orqali, ishlab chiquvchi dasturni bajarish jarayonini to'xtatishi va nosozliklarni boshqaruvchiga o'tkazishni boshqarishi mumkin. Otladchikdan himoya rejimi bu registrlarni qiymatlarini tekshirish yoki qiymatlarini tashlab yuborish orqali SetThreadContext funksiyasidan foydalanib aktiv yo’lni tutishi mumkin. 5. Maxsus vaziyatni boshqarish: SEH Strukturalangan istisnolarni qo'llash yoki SEH (Strukturalangan istisnolarni qo'llash) ilovadan istisnolar haqida bildirishnomalar olish va ularni operatsion tizim o'rniga ishlashga imkon beruvchi mexanizmdir. SEH ishlovchilariga ishora qiluvchi ko'rsatmalar SEH ramkalari deb ataladi va ular to'plamda joylashgan. Agar istisno tashlansa, u stack ustida birinchi Ssh tasmasi tomonidan ishlanadi. Agar u nima qilish kerakligini bilmasa, u sistema ishlov beruvchisiga yetguncha, u suyakka keyingi qatorga o'tadi va hokazo. Dasturni disk raskadrovka paytida diskni tuzatuvchi int 3 soatdan keyin nazoratni ushlab turishi kerak, aks holda nazorat SEH ishlovchilariga o'tkaziladi. Bu disk raskadrovka vositalaridan himoya qilish uchun ishlatilishi mumkin: o'zingizning SEH ishlovchilaringizni yaratishingiz va uni yuqori qismiga qo'yishingiz va keyin int 3h hosil qilishingiz mumkin. Agar operatorimiz nazorat qilishni boshlasa, xato tuzatuvchi hozirda ishlamaydi, aks holda biz xatolarni tuzatishga qarshi harakat qila olamiz - biz xatolarni aniqlovchi topdik. 2.Trassirovka mexanizmini ishga tushirish Kuzatuv mexanizmini ishga tushirishning asosiy talabi Trace Modeni Trace Modega Qualify qualifier bo’lgan yoki bo'lmagan holda o'rnatish. Kuzatuv rejimi foydalanuvchi dasturini kuzatib borish variantlarini aniqlaydi va Qualify qualifier iz holatini belgilaydi. Tracerning quyidagicha rejimlari mavjud: Oddiy (Normal) Standart rejim, barcha foydalanuvchi dasturlari uchun trassirovka rejimini yoqadi. Asosiy dastur trassirovkasi (Trace Main) O'chirish ishlovchilaridan tashqari butun dastur uchun trassirovka rejimini yoqadi. Uzluksiz ishlovlar trassirovkasi (Trace INT) Chiqarish operatorlari uchun iz rejimini yoqadi. Qualify qualifikatorlariga mos ravishda, tracer qaysi ko'rsatmalarni va tegishli nosozliklarni tuzatish dasturini emulyatsiya qilish jarayonida kuzatuvchi tamponida yozilishini aniqlaydi. Qabul qilinadigan ma'lumotni ko'rsatib beradigan yo'riqnoma tanlangan saralash qatnashchilarining shartlarini qondirish bilan belgilanadi. Saralashning formati kesish nuqtalarining formatiga o'xshaydi. Agar barcha dasturlarni yozmoqchi bo'lsangiz, saralash bosqichlari qo'llanilmaydi (Qualify parametrini o'rnatmang). E'tiborni bekor qilish sukut bo'yicha o'chiriladi. Nazorat ma'lumotlarini qayd etish shartlarini belgilaydigan kuzatuv rejimi saralashlaridan farqli o'laroq, Trigger Mode va Forward Rate izni to'xtatish shartini belgilaydi. Trassirovkani ishlatish va to’xtatish rejimini sozlash Debug menyusidagi Trace buyrug'ini tanlang. Bunday holda, 1-rasmda ko'rsatilgandek, trassirovka dialog oynasi ko'rinishi kerak. Kuzatuv tartibi ochiladigan ro'yxatida kerakli trassirovka rejimini tanlang OK tugmasini bosing. Triggerlash rejimini o'rnatish uchun Debug menyusidagi Trace buyrug'ini tanlang. Bunday holda, 1-rsamda ko'rsatilgandek, izdoshlari aloqa qutisi ko'rinishi kerak. Trigger Mode (Ishga tushirish tartibi) oynasidagi kerakli trigger rejimini tanlang OK tugmasini bosing. Shartlarni aniqlash A/shartlari B Debug menyusidagi Trace buyrug'ini tanlang. Bunday holda, shakl 1-rasmda ko'rsatilgandek, trassirovka muloqot oynasi ko'rinishi kerak. Shart A/sharti Bni tanlang (Condition A/Condition B) Set Condition ni bosing. Qualifikatorlari o’rnatish uchun muloqot oynasi 2-rasmda ko’rsatilgan.