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. 재부팅
'윈도우' 카테고리의 다른 글
ZwResumeThread() 후킹 (0) | 2019.10.28 |
---|---|
스텔스 프로세스 (0) | 2019.10.28 |
API hooking (0) | 2019.10.24 |
윈도우 관련 볼 것들 (0) | 2019.10.24 |
window code injection (0) | 2019.10.23 |