Инжектиране на DLL в нечие адресно пространство - Различни трикове в Delphi - Различни статии - Каталог

Инжектирането на DLL в чужд процес обикновено се изисква, ако трябва да изпълните някакъв код с по-високи привилегии или да промените логиката на приложение на трета страна, например можете да заснемете таблица за импортиране (IAT)

и заменете резултатите от някои функции, в резултат на което е възможно да скриете файлове, ключове в регистъра, процеси и да направите всичко, което въображението ви може да направи, от името на процеса, в който е вградена вашата DLL.

За да демонстрираме изпълнението, използваме простата библиотека ShowMe.dll, която ще записва в скрит, „системен“ текстов файл C:\Temp\Inject.dll всеки път, когато се зареди.

Инжектиране на DLL чрез системния регистър

Инжектиране на DLL с помощта на отдалечена нишка

Най-трудният за изпълнение, но най-гъвкавият и мощен метод за инжектиране на DLL е използването на отдалечени нишки. За да създадете отдалечена нишка, се използва API функцията CreateRemoteThread, тя отнема 7 параметъра, но ние се интересуваме само от 3 от тях. Първият параметър е манипулаторът на процеса, в който искаме да създадем нишка, той се връща от функцията OpenProcess (в нашия случай трябва да отворим процес с даден

hProc := OpenProcess ( PROCESS_ALL_ACCESS или PROCESS_VM_WRITE , true , P >) ;

lpStartAddress : = GetProcAddress ( GetModuleHandle ( 'kernel32.dll' ) , 'LoadLibraryA' ) ;

Задаваме третия и шестия параметър на 0, а втория на нула, седмият параметър е изходът (изход), в него ще бъде записан идентификаторът на създадената нишка.

pmem := VirtualAllocEx (hProc, нула, 255, MEM_COMMIT, PAGE_READWRITE);

WriteProcessMemory (hProc, pmem, DllName, Length (DllName), wrb)

Сега всичко е готово за създаване на отдалечена нишка. Ето работещ прототип на програмата за внедряване:

Описах подробно принципа на работа на функцията Load_DLL по-горе, тъмните коне са функциите GetPID и SetSeDebugPrivilege. Функцията GetPID просто търси процес с дадено име и връща неговия PID. Изброяването на процеси беше разгледано много подробно от tripsin във VR-prog14, така че няма да се спирам на тази точка.

Функцията SetSeDebugPrivilege получава привилегии за отстраняване на грешки (SeDebugPrivilege) по стандартен начин, това е необходимо, за да можете да разпределяте памет в системните процеси, така че можете да изпълните кода си от името на svchost.exe или winlogon.exe и това вече е наистина страхотно.

В прикачения към статията архив ще намерите пълната версия на програмата, с допълнителна функция - инжектиране на DLL във всички активни процеси.

Инжектиране на DLL с глобални кукички

Тук KProc е процедура за закачане, тя ще се извиква всеки път, когато се натисне клавиш на клавиатурата. В този случай той просто прехвърля контрола на следващия манипулатор, но никой не ви пречи да запишете това щракване във файл и да направите keylogger, писането на keylogger е извън обхвата на тази статия, но ако тази тема представлява интерес за някого, ще я разгледам в някоя от следващите статии.