윈도우

dll injection 방법

youngsouk 2019. 10. 18. 08:14

CreateRemoteThread

1. OpenProcess() 함수로 dll injection할 프로세스 HANDLE 구하기

2. VirtualAllocEx() 함수를 통해 dll injection할 프로세스에 메모리 할당

3. WriteProcessMemory()함수를 통해 로드할 dll dll이름을 입력한다.

4. LoadLibraryW함수의 주소를 구한다. - kernel32.dll 은 프로그램마다 시작 위치가 똑같다. 

5. CreateRemoteThread()함수를 통해 원격 스레드를 생성시켜 거기서 LoadLibraryW함수를 실행시켜 우리가 원하는 dll 로드

 

4번 에서 우리는 LoadLibrary()함수로 쓰는데 LoadLibraryW함수의 주소를 구하는 이유는

http://javahawk.egloos.com/v/10863964

이 글에 따르면 LoadLibrary() 는 매크로로 정의되어있고 즉 LoadLibraryW는 유니코드 버전 LoadLibraryA는 유니코드가 아닌 버전이다.


registry(레지스트리) 사용

1. AppInit_DLLs 레지스트리에 원하는 DLL 경로

2. LoadAppInit_DLLs를 1로 변경

3. 재부팅