kcrong 2015. 2. 16. 11:49

DLL 인젝션 기술은 사용 목적의 선악에 구분 없이 오래 사용되어 왔다.

여기저기 다양한 곳에서 DLL인젝션이 이용되는 것을 볼 수 있다. 마우스 커서를 화려하게 바꿔주는 윈도우 쉘 익스텐션에서 부터 광범위 하게 이용된다.




프로세스가 DLL을 메모리에 로드하게 만들기 위해 kernel32.dll 의 LoadLibrary() 를 이용한다.


HMODULE LoadLibrary(

LPCSTR lpFileName

);


 lpFileName 파라미터는 단순히 로드하려는 DLL의 경로를 나타낸다. 그런데 로드하려는 DLL 경로 문자열의 포인터가 파라미터로 전달되는 LoadLibraryA를 원격 프로세스가 호출하게 만들어야 한다. 그렇게 하려면 먼저 LoadLibraryA의 주소를 구하고 로드할 DLL의 이름을 써 넣어야 한다. 그리고 CreateRemoteThread() 함수를 호출한다. lpStartAddress 파라미터에는 LoadLibraryA 의 주소를, lpParameter 파라미터에는 로드할 DLL경로의 주소를 전달한다. CreateRemoteThread() 함수가 실행되면 마치 원격 프로세스 자신이 DLL 로드를 요청한 것처럼 LoadLibraryA가 호출된다.


---------------소스 참고---------