15-амалий иш: Antiotladka choralarini tahlili. Mashina kodi trasirovkasi.
Ishdan maqsad: Antiotladka choralarini tahlili va mashina kodi trasirovkasini o’rganish.
Nazariy qism 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: 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.
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.
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.
To'xtash nuqtalarini aniqlash
Breakpoints har qanday disk raskadrovka jarayonining muhim qismidir va bir marta aniqlangan bo'lsa, xatolarni tuzatuvchini bartaraf qilishimiz mumkin. Qarama-qarshi 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.