Инжектирането на код е обичайно за Windows. Приложенията "инжектират" парчета от собствения си код в друг работещ процес, за да променят поведението си. Тази техника може да се използва за добро или зло, но по един начин може да причини проблеми.
Кодовото инжектиране обикновено се нарича инжектиране на DLL, тъй като инжектираният код често е във формата на файл с DLL (библиотека за динамични връзки). Приложенията обаче могат да инжектират и други видове кодове, които не са DLL в процес.
Кодовото инжектиране се използва за осъществяване на всякакви трикове и функционалност на Windows. Докато легитимни програми го използват, то се използва и от злонамерен софтуер. Например:
Тази техника се използва постоянно от голямо разнообразие от приложения на Windows. Това е единственият реален начин да се изпълнят различни задачи. В сравнение с модерна мобилна платформа като iOS на Apple или Android на Google, настолните компютри на Windows са толкова мощни, защото ако предлагат този вид гъвкавост на разработчиците.
Разбира се, с цялата тази сила идва известна опасност. Инжектирането на кода може да причини проблеми и грешки в приложенията. Google заявява, че потребителите на Windows, които имат код, инжектиран в браузъра им Chrome, са с 15% по-голяма вероятност да увредят Chrome, поради което Google се опитва да блокира това. Microsoft отбелязва, че внедряването на код може да се използва от злонамерени приложения, за да се намесват в настройките на браузъра, което е една от причините, поради които вече е блокирана в Edge.
Microsoft дори дава инструкции за проверка дали DLL на трети страни са заредени в Microsoft Outlook, тъй като те причиняват толкова много катастрофи в Outlook.
Като служител на Microsoft го постави в блог за разработчици от 2004 г.:
DLL инжекцията никога не е безопасна. Вие говорите за разпръскване на код в процес, който никога не е бил проектиран, построен или тестван от автора на процеса, и кооптиране или създаване на нишка, за да стартирате този код. Рискувате да създадете проблеми, свързани с времето, синхронизацията или ресурсите, които не са съществували преди това, или да изостряте проблемите, които са били там.
С други думи, инжектирането на код е нещо като мръсна рана. В един идеален свят ще има по-безопасен начин да се постигне това, което не предизвика потенциална нестабилност. Въпреки това, инжектирането на код е само нормална част от платформата за приложения на Windows днес. Непрекъснато се случва във фонов режим на компютъра ви с Windows. Може да го наречете необходимо зло.
Можете да проверите за инжектиране на код на вашата система с мощното приложение Process Explorer на Microsoft. Това всъщност е усъвършенствана версия на мениджъра на задачите, която е снабдена с допълнителни функции.
Изтеглете и изпълнете Process Explorer, ако искате да направите това. Кликнете върху Изглед> Изглед с долен панел> DLL или натиснете Ctrl + D.
Изберете процес в горния екран и погледнете в долния панел, за да видите DLL-тата, които са заредени. Колоната "Име на фирмата" предоставя полезен начин за филтриране на този списък.
Например, нормално е да видите различни DLL, направени от "Microsoft Corporation" тук, тъй като те са част от Windows. Също така е нормално да видите DLL, направени от същата компания като въпросния процес - "Google Inc." в случая на Chrome в екранната снимка по-долу.
Също така можем да открием няколко DLL, създадени от "AVAST Software" тук. Това показва, че софтуерът Avast antimalware на нашата система инжектира код в "Chrome" като "библиотеката за филтриране на скриптове Avast".
Няма много какво да направите, ако намерите система за инжектиране на код в системата си - освен да деинсталирате програмния код за инжектиране, за да предотвратите причиняването на проблеми. Ако например Chrome се срива редовно, може да искате да видите дали има програми, които да инжектират код в Chrome, и да ги деинсталирате, за да се избегне нарушаването на процесите на Chrome.
Кодовото инжектиране не променя основното приложение на вашия диск. Вместо това чака заявлението да се изпълни и той инжектира допълнителен код в този работещ процес, за да промени начина, по който работи.
Windows включва разнообразни интерфейси за програмиране на приложения (API), които могат да се използват за инжектиране на код. Процесът може да се прикрепи към целевия процес, да разпредели паметта, да напише DLL или друг код в тази памет и след това да инструктира целевия процес да изпълни кода. Windows не пречи на процесите на вашия компютър да се намесват помежду си по този начин.
За повече информация относно техническата информация вижте тази публикация в блога, в която се обяснява как разработчиците могат да инжектират DLL и този вид на други видове инжектиране на код в Windows.
В някои случаи някой може да промени основния код на диск - например, като замени DLL файл, който се доставя с компютърна игра с модифициран, за да позволи измама или пиратство.Това технически не е "инжектиране на код". Кодът не се инжектира в работещ процес, но програмата вместо това се подлъгва в зареждането на различен DLL със същото име.
Image Credit: Lukatme / Shutterstock.com.