윈도우
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. 재부팅