Кіріспе

Операциялық жүйені өзгерту әдістері Компьютерлік бағдарламалауда "құю" термині операциялық жүйенің, қолданбалардың немесе басқа бағдарламалық компоненттердің мінез-құлқын функция шақыруларын немесе бағдарламалық компоненттер арасында жіберілетін хабарларды немесе оқиғаларды тұтқындау арқылы өзгерту немесе кеңейту үшін қолданылатын әдістердің кең ауқымын қамтиды. Мұндай функцияларды, оқиғаларды немесе хабарламаларды қолға алған кодты ілгек деп атайды. Айналымдық кластағы жалпы кодты субкластағы бапталған кодпен кеңейтуге болатын Шаблон әдісі үлгісінде ілмекті әдістер ерекше маңызды. Бұл жағдайда әрбір ілгек әдісі абстрактілі класта бос іске асырумен анықталады, бұл әр нақты кіші класта әр түрлі іске асыруды қамтамасыз етуге мүмкіндік береді. Құрастыру көптеген мақсаттарда, соның ішінде жөндеу және функционалдылықты кеңейту үшін қолданылады. Мысалға, қолданбаға жетуден бұрын пернетақта немесе тышқан оқиғасы туралы хабарламаларды немесе пайдалануды бақылау немесе қолданбаның немесе басқа компоненттің қызметін өзгерту үшін операциялық жүйелік шақыруларды ұстап алуды жатқызуға болады. Ол сондай-ақ стандарттау бағдарламаларында кеңінен қолданылады, мысалы, 3D ойындарындағы кадр жылдамдығын өлшеу, онда шығыс пен кіріс ілмектер арқылы жасалады. Құрастыруды зиянды код та пайдалана алады. Мысалы, руткиттер, өздерін көрінбеуге тырысатын бағдарламалық жасақтамалар, басқа жағдайда олардың бар екендігін ашатын API шақыруларының шығысын жасамалау арқылы, көбінесе ілмектеу әдістерін қолданады.

Әдістер

Әдетте ілгектер бағдарламалық жасақтама орындалып жатқан кезде енгізіледі, бірақ ілгек салу - бұл қолданбаны бастамас бұрын да қолдануға болатын тактика. Бұл екі әдіс төменде егжей-тегжейлі сипатталған.

Қайнар көзді өзгерту

Құрастыруға бағдарламаны іске қосу алдында орындалатын файлдың немесе кітапхананың көзін кері инжиниринг әдістері арқылы өзгерту арқылы қол жеткізуге болады. Бұл әдетте функцияның қоңырауларын бақылау немесе оларды толығымен ауыстыру үшін қолданылады. Мысалы, бөлшектеуші арқылы модульдегі функцияның кіру нүктесін табуға болады. Одан кейін оны басқа кітапхана модулін динамикалық жүктеу үшін өзгертуге болады, содан кейін ол жүктелген кітапханада қажетті әдістерді орындайды. Егер қажет болса, тағы бір ұқсас тәсіл, ол арқылы ілесуді жүзеге асыруға болады, ол орындалатын файлдың импорт кестесін өзгерту арқылы. Бұл кесте қосымша кітапхана модульдерін жүктеу үшін, сондай-ақ қолданба функцияны шақырғанда қандай сыртқы кодты шақыратындығын өзгерту үшін өзгертілуі мүмкін. Функцияларды ілудің баламалы әдісі - wrapper кітапханасы арқылы функцияларды шақыруды ұстап алу. Wrapper - бұл бағдарлама жүктейтін кітапхананың нұсқасы, ол орнататын бастапқы кітапхананың барлық бірдей функциялары бар. Яғни, барлық қол жетімді функциялар түпнұсқа мен ауыстыру арасында бірдей. Бұл wrapper кітапханасын бастапқы кітапхананың кез келген функционалдығын шақыру үшін немесе оны логиканың мүлдем жаңа жиынтығымен ауыстыру үшін жобалауға болады.

Орындау уақытын өзгерту

Операциялық жүйелер мен бағдарламалық қамтамасыз ету орындалу кезінде оқиғалық ілгектерді оңай енгізуге мүмкіндік береді. Бұл ымдарды орнату процесіне жеткілікті рұқсат берілген жағдайда қол жетімді. Мысалы, Microsoft Windows пайдаланушыларға диалогтар, жылжыту жолақтары мен мәзірлер мен басқа да элементтер үшін жүйелік оқиғалар мен қолданбалық оқиғаларды өңдеуге немесе өзгертуге арналған ілмектерді енгізуге мүмкіндік береді. Сонымен қатар ол ілмекке пернетақта мен тышқан оқиғаларын енгізуге, алып тастауға, өңдеуге немесе өзгертуге мүмкіндік береді. Linux NetFilter арқылы ядродағы желілік оқиғаларды өңдеу үшін ілгектерді ұқсас түрде қолдануға болатын тағы бір мысал береді. Мұндай функционалдық қамтамасыз етілмеген жағдайда, тіркелудің арнайы түрі процестер жасаған кітапхана функцияларын шақыруды тұтқындауға арналған. Функцияларды ілу мақсатты функцияның алғашқы бірнеше кодтық нұсқауларын инъекцияланған кодқа көшу үшін өзгерту арқылы жүзеге асырылады. Ортақ кітапханалық тұжырымдаманы қолданатын жүйелерде үзіліс векторлы кестесі немесе импорт дескрипторлы кестесі жадында өзгертілуі мүмкін. Негізінде бұл тактикалар бастапқы кодты өзгерту идеясын қолданады, бірақ оның орнына процесстің жадында орналасқан нұсқаулар мен құрылымдарды өзгертеді.

Linux жүйесі

Студенттік зерттеу жобасы, ол суреттеуді пайдаланады. Бағдарламалық жасақтаманың бір бөлігіне басқа процестің орындалуын бақылауға және басқаруға мүмкіндік беретін функционалдық. LD PRELOAD-ты ортақ кітапханалық қоңырауларды қосу үшін пайдалану.

Emacs

Emacs Hooks Құрамында Emacs-ті баптаудың маңызды механизмі бар. Құс - белгілі бір нақты жағдайда шақырылатын функциялардың тізімін қамтитын Lisp айнымалысы. (Бұл ілгекпен жүгіру деп аталады.)

OS X және iOS

Cydia Substrate - jailbroken iOS құрылғылары үшін фреймворк, ол әзірлеушілерге кез келген басқа фреймворкке немесе қосымшаға қосылуға мүмкіндік береді. harpoon - орындалу уақытында функцияларды жалғау үшін OS X кітапханасы.

Терең API-ге қосылу

x86 API Hooking x86 архитектурасы үшін әртүрлі API Hooking әдістері туралы мақала.