Кіріспе

Бұл термин табиғи тілде қолданылған сияқты. Бағдарламалық жасақтауда, кодты түсіну қиын ету – адамдар мен компьютерлерге түсінігі келмейтін бастапқы немесе машиналық кодты жасау амалы. Табиғи тілдегі түсінікті қиындату сияқты, бұл мәлімдемелерді құрастыру үшін қажетсіз, күрделі жолдарды қолдануы мүмкін. Бағдарламашылар кодтың мақсатын (қауіпсіздіктің нашарлауын пайдаланып), логикасын немесе оның ішінде жасырылған мәнді жасыру үшін оны әдейілеп түсініксіз етуі мүмкін. Мұның басты себебі – өзгертулерді болдырмау, кері инженерия жасауға қарсы тұру, тіпті кодты оқыған адамға қиын жұмбақ немесе ойын құру болуы мүмкін. Бұл қолмен немесе автоматтандырылған құралдар арқылы жасалуы мүмкін, бірақ өнеркәсіпте автоматтандырылған құралдарға көбірек басымдық беріледі.

Шолу

Кейбір тілдердің архитектурасы мен ерекшеліктері оларды басқаларына қарағанда жасыруды жеңілдетуі мүмкін. C, C++ және Perl бағдарламалау тілдері – жасыруға оңай болатын тілдердің мысалдары. Хаскелл құрылымы жағынан мүлдем өзгеше болғанына қарамастан, оны да жасыруға болады. Тілді жасыруға мүмкіндік беретін қасиеттер бірден көзге көрінбейді.

Автоматтандырылған құралдар

Кодты жасыруды орындауға немесе оған көмектесуге арналған әртүрлі құралдар бар. Оларға ғалымдар жасаған тәжірибелік зерттеу құралдары, хобби құралдары, кәсіпқойлар жазған коммерциялық өнімдер және ашық кодты бағдарламалық жасақтама кіреді. Кодты түсіндіру құралдары да бар, олар кері түрлендіруді орындауға тырысады. Көптеген коммерциялық жасыру шешімдері Java және .NET пайдаланатын бағдарламаның бастапқы кодын немесе платформадан тәуелсіз байт-кодын түрлендіру арқылы жұмыс істейді, бірақ компиляцияланған бинарлық файлдармен тікелей жұмыс істейтін құралдар да бар. Python мысалдарының кейбірін Python бағдарламалау бойынша ресми жиі қойылатын сұрақтардан (FAQ) және басқа да жерлерден табуға болады. x86 32 ISA үшін movfuscator C компиляторы кодты жасыру үшін тек mov командасын ғана қолданады.

Көңіл көтеру

Жасырын кодты жазу мен оқу – қиын мәселе. Көптеген бағдарламалау сайыстары ең шығармашылықпен жасырын код жазғандарды марапаттайды, мысалы, Халықаралық жасырын C тілі байқауы және Obfuscated Perl байқауы. Perl бағдарламашылары өздерінің қолтаңбаларында қысқа жасырын Perl бағдарламаларын пайдалануы мүмкін. Олар JAPH ("Жай ғана Perl хакері") деп аталады.

Криптографиялық

Криптографтар кодты жасыру идеясын зерттеді, сонда кері инженерия арқылы кодты криптографиялық тұрғыдан қиын етуге болады. Бұл, ажырату мүмкін емес жасыру ұсыныстарының көптеген нұсқаларында формалдануға ие, егер қауіпсіз құру мүмкін болса, криптографияның көптеген басқа түрлерін, соның ішінде ешкім қалай жасауды білмейтін жаңа түрлерін құруға мүмкіндік беретін криптографиялық негізгі құрал. (Қара қорап жасыру деп аталатын күшейтілген түсінік, жалпы жағдайда мүмкін емес екені белгілі.)

Жасырындықтың кемшіліктері

Бұлқыту бағдарламаны оқуды, жазуды және кері инженериялауды қиын және уақытты көп талап ететін етеді, бірақ оны толығымен мүмкін емес ете бермейді. Ол бағдарламашылар үшін құрастыру процесіне уақыт пен күрделілік қосады. Бағдарламалық жасақтама бұлқытылғаннан кейін туындаған мәселелерді түзетуді өте қиын етеді. Егер код енді қолдау көрсетілмейтін болса, хоббиерлер бағдарламаны сақтап, өзгерістер енгізіп немесе оны жақсырақ түсінуге тырысуы мүмкін. Бұлқыту соңғы пайдаланушыларға кодпен пайдалы әрекеттер жасауды қиындатады. Белгілі бір бұлқыту түрлері (мысалы, тек жергілікті бинарлық код емес, қажет болған жағдайда веб-серверден кішкентай бинарлық файлдарды жүктеу арқылы жұмыс істейтін код) өнімділікті төмендетуі және/немесе интернет қосылымын қажет етуі мүмкін.

Құпия кодты пайдаланушыларды хабардар ету

Кейбір антивирустық бағдарламалар, мысалы AVG AntiVirus, пайдаланушыларына кодты қолмен жасырынған веб-сайтқа өткенде ескерту береді, себебі жасырудың мақсатының бірі қауіпті кодты жасыру болуы мүмкін. Дегенмен, кейбір әзірлеушілер файл мөлшерін азайту немесе қауіпсіздікті арттыру үшін кодты жасыруды қолдануы мүмкін. Көптеген пайдаланушылар антивирустық бағдарламаларының, әсіресе сенімді компаниялардан келген жағдайларда, зиянсыз код туралы ескертулер беретінін күтпейді, сондықтан мұндай мүмкіндік пайдаланушыларды заңды бағдарламалық қамтамасыз етуді пайдаланудан тоқтатуы мүмкін. Mozilla және Google өздерінің қосымшалар дүкендерінде жасырын кодты қамтитын браузер кеңейтімдеріне жол бермейді.

Көшірмелеу және copyleft лицензиялары

Көшірмелік лицензиялық шарттарды айналып өтуге болады ма, жоқ па деген пікірталас туды, мысалы, автор бастапқы кодты ашық етуге құштар болмаған жағдайларда, оны түсініксіз күйде жариялау арқылы. Бұл мәселе GNU General Public License-де "өзгерістер енгізуге арналған қалаулы нысанды" ұсыну талабы арқылы шешіледі. GNU сайтында "Тұмандалған 'бастапқы код' нағыз бастапқы код емес және бастапқы код ретінде қарастырылмайды" делінген.

Декомпиляторлар

Декомпилятор орындалатын файлдан немесе кітапханадан бастапқы кодты кері инженериялай алады. Декомпиляция кейде «ортадағы адам» деп аталатын дәстүрлі криптографиялық шабуылға ұқсас «соңғы адам» (mite) шабуылы деп аталады. Бұл бастапқы кодты пайдаланушыға ұсынады, бірақ бұл кодты оқу көбінесе қиынға соғады. Декомпилирленген кодта кездейсоқ функциялар мен айнымалылар атаулары, қате айнымалы түрлері болуы мүмкін, сондай-ақ бастапқы кодтан өзгеше логика қолданылуы ықтимал (компилятордың оңтайландыруының нәтижесінде).

Үлгілік бұрмалау

Модельді бүркемелеу – машиналық оқыту моделінің ішкі құрылымын жасыру тәсілі. Бүркемелеу модельді «қара жәшікке» айналдырады. Бұл түсіндірілетін ЖА-ға (Жалған Интеллектке) қарсы келеді. Модельге оқу деректерін беруден бұрын, кездейсоқ шу қосу үшін бүркемелеу модельдерін қолдануға болады. Бұл жеке және топтық үлгілердің қасиеттері туралы сезімтал ақпаратты жасырады.