reversing

DLL 인젝션

코끼리_땃쥐 2023. 1. 2. 13:32
반응형

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을 (창을 가진) 프로세스에게 강제로 인젝션합니다.

 

반응형