Какво е инжектиране на код в Windows?
Инжектирането на кода е често срещано в Windows. Приложенията "инжектират" парчета от собствения си код в друг работещ процес, за да променят поведението си. Тази техника може да се използва за добро или зло, но така или иначе може да предизвика проблеми.
Инжектирането на код също се нарича DLL инжектиране, защото инжектираният код често е под формата на DLL (динамична библиотека). Приложенията могат също така да инжектират други типове кодове, които не са DLL в процес.
За какво се използва инжектиране на код
Инжектирането на кода се използва за изпълнение на всякакви трикове и функционалност на Windows. Докато легитимните програми го използват, то се използва и от зловреден софтуер. Например:
- Антивирусните програми често инжектират кода в уеб браузърите. Те могат да го използват за наблюдение на мрежовия трафик и например за блокиране на опасно уеб съдържание.
- Злонамерените програми могат да добавят код към уеб браузъра ви, за да проследяват по-добре браузъра ви, да крадат защитена информация като пароли и номера на кредитни карти и да променят настройките на браузъра ви.
- WindowBlinds на Stardock, който тематизира вашия работен плот, инжектира код, за да променя начина на изчертаване на прозорците.
- Stardock's Fences инжектира код, за да промени начина на работа на работния плот на Windows.
- AutoHotkey, която ви позволява да създавате скриптове и да им присвоите горещи клавиши за цялата система, инжектира код, за да постигне това.
- Графичният драйвер е подобен на инжекционните DLL на NVIDIA, за да изпълни различни задачи, свързани с графиката.
- Някои програми инжектират DLL, за да добавят допълнителни опции в менюто към приложението.
- Инструментите за измама на PC игри често инжектират код в игрите, за да променят поведението им и да получат несправедливо предимство пред други играчи.
Кодовата инжекция е лоша?
Тази техника се използва постоянно от голямо разнообразие от приложения в Windows. Това е единственият реален начин за постигане на различни задачи. В сравнение със съвременна мобилна платформа като iOS на Apple или Android на Google, работният плот на Windows е толкова мощен, защото ако предлага подобна гъвкавост на разработчиците.
Разбира се, с цялата тази сила идва някаква опасност. Инжектирането на кода може да предизвика проблеми и грешки в приложенията. Google казва, че потребителите на Windows, които имат код, инжектиран в браузъра на Chrome, са с 15% по-склонни да претърпят сривове в Chrome, поради което Google работи върху това. Microsoft отбелязва, че инжектирането на код може да се използва от злонамерени приложения за подправяне на настройките на браузъра, което е една от причините, поради които вече е блокиран в Edge.
Microsoft дори предоставя инструкции за проверка дали DLL файловете на трети страни са заредени в Microsoft Outlook, тъй като те причиняват толкова много сривове в Outlook.
Както служителят на Microsoft го постави в блог на разработчиците от 2004 г .:
DLL инжекцията никога не е безопасна. Говорите за разбиване на код в процес, който никога не е бил проектиран, построен или тестван от автора на процеса, и коопериране или създаване на нишка за изпълнение на този код. Рисквате да създадете проблеми с времето, синхронизацията или ресурсите, които не са били налице преди или да изострят проблеми, които са били там.
С други думи, инжектирането на кода е нещо като мръсен хак. В един идеален свят ще има по-безопасен начин да се постигне това, което не е довело до потенциална нестабилност. Въпреки това, инжектирането на код е само нормална част от платформата за приложения на Windows днес. Постоянно се случва във фонов режим на вашия компютър с Windows. Може да го наречете необходимо зло.
Как да проверяваме за инжектирани DLL файлове
Можете да проверите за инжектиране на код на вашата система с мощната програма на Microsoft за Process Explorer. Това е основно усъвършенствана версия на Task Manager, снабдена с допълнителни функции.
Изтеглете и стартирайте Process Explorer, ако искате да направите това. Щракнете върху View> Lower Pane View> DLLs или натиснете Ctrl + D.
Изберете процес в горната част на прозореца и погледнете в долната част на прозореца, за да видите заредените DLL файлове. Графата „Име на фирма“ предоставя полезен начин за филтриране на този списък.
Например, нормално е да видите различни DLL файлове, направени от “Microsoft Corporation” тук, тъй като те са част от Windows. Също така е нормално да виждате DLL файловете, направени от същата компания като въпросния процес - „Google Inc.“ в случай на Chrome на екрана по-долу.
Можем също така да открием няколко DLL файлове, направени от “AVAST Software” тук. Това показва, че антивирусният софтуер Avast на нашата система инжектира код като „библиотеката за филтриране на скриптове на Avast“ в Chrome.
Не можете да направите много, ако откриете инжектиране на код на вашата система, освен да деинсталирате инжекционния код на програмата, за да предотвратите проблеми. Ако например Chrome срине редовно, може да искате да видите дали има програми за инжектиране на кода в Chrome и да ги деинсталирате, за да им попречи да променят процесите на Chrome.
Как работи инжектирането на код?
Вмъкването на код не променя подлежащото приложение на вашия диск. Вместо това той изчаква приложението да се изпълнява и инжектира допълнителен код в този работещ процес, за да промени начина, по който функционира.
Windows включва разнообразни интерфейси за приложно програмиране (API), които могат да се използват за инжектиране на код. Процесът може да се прикрепи към целевия процес, да разпредели паметта, да напише DLL или друг код в тази памет и след това да инструктира целевия процес да изпълни кода. Windows не пречи на процесите на компютъра да се намесват по този начин.
За повече техническа информация, разгледайте този блог пост, като обясните как разработчиците могат да инжектират DLL и този поглед върху други видове инжектиране на код в Windows.
В някои случаи някой може да промени основния код на диска - например, като замени DLL файл, който идва с компютърна игра с модифициран, за да позволи измама или пиратство. Това технически не е "инжектиране на код". Кодът не се инжектира в работещ процес, но програмата вместо това се подвежда да зарежда различен DLL със същото име.
Кредит за снимката: Lukatme / Shutterstock.com.