4 Amaliy mashg’ulot: Mavzu: Virtual protsessor ish tartibini o‘rganish Ishdan maqsad: Dasturiy ta'minotni himoya qilishda virtual protsessorni o'rganish
Nazariy qism Usulning mohiyati quyidagilardan iborat: ba'zi funktsiyalar, modullar yoki butun dastur ma'lum bir virtual protsessor ostida, potentsial tajovuzkorga noma'lum buyruqlar tizimi va arxitektura bilan tuzilgan. Amalga oshirish natijasida olingan kodga kiritilgan simulyator mavjud. Shunday qilib, himoyalangan fragmentlarni qayta qurish vazifasi simulyator arxitekturasini, u simulyatsiya qiladigan protsessorni o'rganishga, ikkinchisi uchun disassembler yaratishga va nihoyat, qismlarga ajratilgan kodni tahlil qilishga qisqartiriladi. Maqsadli mashinaning arxitekturasi bilan ishlashda yaxshi bilim va tajribaga ega bo'lgan mutaxassis uchun ham bu vazifa ahamiyatsiz emas. Boshqa tomondan, tajovuzkor virtual protsessor arxitekturasining tavsifiga yoki foydalanilgan simulyatorni tashkil etish bo'yicha ma'lumotlarga kirish huquqiga ega emas. Yorilish narxi sezilarli darajada oshadi. Nima uchun yuqori nazariy samaradorlikni hisobga olgan holda, bu usul hali ham keng qo'llanilmaydi? Ko'rinib turibdiki, ikkita asosiy sababga ko'ra. Birinchidan, usul o'ziga xos xususiyatlarga ega, bu uning potentsial qo'llanilishi doirasini toraytiradi - bu quyida muhokama qilinadi. Ikkinchidan, va, ehtimol, bu yanada jiddiy sababdir, usulni amalga oshirishning murakkabligi (va shuning uchun narxi) juda yuqori. Agar biz yangi yaratilgan tizim haqida ma'lumotlarning chiqib ketishining fundamental ehtimolini hisobga olsak, bu darhol uning samarasizligi va devalvatsiyasiga olib keladi, nima uchun xavfsizlik dasturlarini ishlab chiqaruvchilar ushbu usulni amalga oshirishga shoshilmayotgani aniq bo'ladi. Ammo shuni ta'kidlash kerakki, ba'zi o'zgarishlar va cheklovlar bilan bu usul hali ham StarForce3, NeoGuard, VMProtect va boshqalar kabi eng yangi mahsulotlarda qo'llaniladi ... paydo bo'lgan ilovalar, hali ham zaif tomonlariga ega bo'lsa-da, usulning yuqori samaradorligini tasdiqlaydi.
Usulni amalga oshirish Usulning kamchiliklaridan biri uni amalga oshirishning yuqori narxidir, ammo uni sezilarli darajada kamaytirish mumkin. Ushbu usulni amalga oshiradigan xavfsizlik tizimi yuqori darajadagi tildan kompilyatorga asoslangan bo'lishi mumkin. Har qanday kompilyatorda faqat bitta mashinaga bog'liq bosqich mavjud - kod ishlab chiqarish, qoida tariqasida, siz boshqa bosqichlarda bog'liqlikdan xalos bo'lishingiz mumkin. Agar kompilyator dastlab multiplatforma sifatida ishlab chiqilgan bo'lsa, u odatda boshqa maqsadli platformaga qayta konfiguratsiya jarayonini iloji boricha soddalashtiradi. Misol uchun, bunga maqsadli mashinaning o'ziga xos tavsifi asosida avtomatik ravishda kod generatorini yaratish orqali erishish mumkin. Bunday holda, ishlab chiquvchilar faqat platformani o'zgartirish uchun ushbu tavsifni o'zgartirishi kerak. Ammo sizda o'zingizning kompilyatoringiz bo'lmasa ham, siz erkin tarqatiladigan ochiq manbadan foydalanishingiz mumkin, masalan, GCC. Va foydalanuvchining tavsiflangan himoya tizimi bilan ishlashini iloji boricha osonlashtirish uchun uni MSVC kabi mashhur ishlab chiqish muhitiga joylashtirish mexanizmlari bilan jihozlash mumkin. Bunday holda, bunday kompleksning ishlash sxemasi rasmda ko'rsatilganidek ko'rinishi mumkin. 1.
Guruch. 1. Dasturiy ta'minotni himoya qilish sxemasi
Shunga ko'ra, shu tarzda himoyalangan mahsulotning ishlashi rasmdagi diagramma bo'yicha davom etadi. 2.
Guruch. 2. Himoyalangan dasturiy mahsulotning sxemasi
Kompilyatordan foydalanishning o'ziga xos xususiyatlari virtual protsessor uchun bir qator maxsus talablarni qo'yadi, ammo ularning barchasini osongina amalga oshirish mumkin. Bir nechta talablar mavjud - siz shunchaki virtual mashinaga, xotiraga nisbatan tashqi kirish imkoniyatini, shuningdek tashqi funktsiyalarni chaqirish qobiliyatini ta'minlashingiz kerak - bu himoyalangan va himoyalanmagan kodning o'zaro ta'siri uchun zarurdir. Aks holda, virtual protsessorning arxitekturasi butunlay o'zboshimchalik bilan bo'lishi mumkin va u qanchalik murakkab va original bo'lsa, himoya darajasi shunchalik yuqori bo'ladi.
Kompilyatorning o'zi, kod ishlab chiqarish bosqichini o'zgartirishdan tashqari, uning imkoniyatlarini olish uchun o'zgartirilishi kerak:
• Virtual protsessorga nisbatan ichki va tashqi xotiraga qo‘ng‘iroqlarni farqlash (jumladan, funksiya chaqiruvlari)
• Simulyator orqali himoyalangan funksiyani chaqirib, haqiqiy protsessorda ishlaydigan har bir himoyalangan funksiya uchun qobiq deb ataladigan narsani yarating. Oxirgi imkoniyat batafsilroq tavsiflangan bo'lishi kerak. Shakldagi diagrammada aks ettirilganidek. 2, himoyalangan funktsiyalarning funksionalligi simulyatorni chaqirish orqali amalga oshiriladi, bu himoyalangan funktsiyalardan qaysi biri talqin qilinishi kerakligini ko'rsatadi. Biroq, bundan oldin himoyalangan funksiya uchun parametrlarni tayyorlaydigan maxsus kodni bajarish kerak - ularni virtual protsessor arxitekturasiga mos keladigan tarzda haqiqiy registrlar va xotiradan virtualga "ko'chirish". Bularning barchasi bizning kompilyatorimiz tomonidan yaratilgan maxsus funktsiyalar - "qobiqlar" tomonidan boshqariladi. Chig'anoqlar, o'z navbatida, virtual registrlar va xotiraga kirish uchun maxsus simulyator funktsiyalaridan foydalanadi. Odatda, bizning kompilyatorimiz yuqori darajadagi o'ramlarni ishlab chiqaradi, bu esa, o'z navbatida, foydalanuvchi tomonidan o'z loyihasining himoyalanmagan qismini qurish uchun foydalanadigan standart kompilyator tomonidan kompilyatsiya qilinadi. Shunday qilib, himoyalanmagan moduldan himoyalangan funktsiyaga qo'ng'iroq rasmda ko'rsatilgandek ko'rinishi mumkin. 3.
Guruch. 3. Himoyalangan funksiyani chaqirish sxemasi
Albatta, virtual protsessor usulini o'ziga xos tarzda amalga oshirish tavsiflanganidan biroz farq qilishi mumkin, shuningdek, u bilan himoyalangan mahsulotning ishlash sxemasi. Shunga qaramay, tavsiflangan variant juda qulay va bundan tashqari, nisbatan sodda. Himoyalangan mahsulotning yuragi simulyatordir.
U himoyalangan mahsulotning har qanday tuzilishiga kiritiladi. Biroq, biz uni amalga oshirishni batafsil ko'rib chiqmaymiz, chunki buning uchun deyarli hech qanday maxsus talablar yo'q - u faqat virtual protsessorimiz arxitekturasini, shu jumladan tashqi xotiraga kirish operatsiyalarini taqlid qilishi kerak. Biroq, shuni ta'kidlash kerakki, uni qo'llashning o'ziga xos xususiyatlarini hisobga olgan holda, simulyatorni yangi virtual arxitekturalarga qayta sozlash jarayonini imkon qadar avtomatlashtirish kerak. Usulning kamchiliklari uning afzalliklarining natijasidir:
• Virtual muhitga uzatiladigan kod tezligi dastlabki koddan bir necha barobar past (virtual protsessor va simulyator arxitekturasiga qarab, taxminan 10-50) • Himoyalangan dasturning hajmi, qoida tariqasida, himoyalanmagan dasturning hajmidan biroz yuqoriroq bo'ladi. Biroq, oxirgi kamchilik ahamiyatsiz, tk. hajmi biroz kattalashadi va ba'zi hollarda hatto kamayishi mumkin. Birinchi kamchilik asosiy hisoblanadi va usuldan foydalanishga aniq cheklovlar qo'yadi.