DLL 인젝션이란 실행 중인 다른 프로세스에 특정 DLL파일을 강제로 삽입하는 것입니다.
DLL 인젝션 구현 방법
다른 프로세스에게 dll 인젝션을 하기 위해 아래와 같이 크게 세가지 방법이 존재합니다.
- 원격 스레드 생성 (CreateRemoteThread() API)
- 레지스트리 이용(AppInit_DLLs 값)
- 메시지 후킹(SetWindowsHookEx() API)
CreateRemoteThread()
1. 대상 프로세스 핸들을 구한다
2. 대상 프로세스 메모리에 인젝션할 DLL 경로를 써준다.
3. LoadLibraryW() API 주소를 구한다.
4. 대상 프로세스에 원격 스레드(Remote Thread)를 실행한다.
AppInit_DLLs
DLL 인젝션을 하기 위한 두번째 방법은 레지스트리(Registry)를 이용하는 것입니다.
Windows 운영체제에서 기본으로 제공하는 AppInit_DLLs와 LoadAppInit_DLLs 라는 이름의 레지스트리 항목이 있습니다.
AppInit_DLLs항목에 인젝션을 원하는 DLL 경로 문자열을 쓰고 LoadAppInit_DLLs항목의값을 1로 변경한 후 재부팅하면, 실행되는 모든 프로세스에 해당 DLL을 인젝션 해줍니다.
SetWindowsHookEx()
DLL 인젝션을 하기 위한 세번째 방법은 메시지 후킹을 이용하는 것 입니다. SetWindowsHookEx() API를 이용하여 메시지 훅을 설치하면 OS에서 hookprocedure를 담고 있는 DLL을 (창을 가진) 프로세스에게 강제로 인젝션합니다.
'reversing' 카테고리의 다른 글
인젝터를 만들어 보았다. (0) | 2023.01.24 |
---|---|
notepad.exe 프로세스 숨기기 성공 !! (0) | 2023.01.12 |
Base Relocation Table (0) | 2022.12.14 |
IAT & EAT (0) | 2022.12.12 |
PE File Format 중요 멤버 간단정리 (0) | 2022.12.05 |
댓글