DLL 이젝션(DLL Ejection)은 프로세스에 강제로 삽입한 DLL을 빼내는 기법이다. 기본 동작 원리는 CreateRemoteThread API를 이용한 DLL 인젝션(Injection)의 동작원리와 같다.
DLL 이젝션 동작 원리
CreateRemoteThread() API를 이용한 DLL 인젝션의 동작원리는 아래와 같다.
대상 프로세스로 하여금 LoadLibrary() API를 호출하도록 만드는 것
마찬가지로 DLL 이젝션의 동작 원리도 아래와 같다.
대상 프로세스로 하여금 FreeLibrary() API를 호출하도록 만드는 것
즉 CreateRemoteThread()의 IpStartAddress 파라미터에 FreeLibrary() API 주소를 넘겨주고, IpParameter 파라미터에 이젝션할 DLL의 HANDLE을 넘겨두면 된다.
DLL 이젝션 실습
notepad에 인젝션된 myhack.dll을 이젝션해보도록 하자.
파일을 준비한다.
파워쉘에서 이젝션을 확인한다.
Process Explorer를 통해 확인하면 myhack.dll이 안 보이는 것을 볼 수 있다.
'Reversing > 리버싱 핵심 원리' 카테고리의 다른 글
[리눅스 핵심 원리] 23장, DLL 인젝션 (0) | 2021.12.02 |
---|---|
[리버싱 핵심 원리] 27장, Code 인젝션 (0) | 2021.12.02 |
[리버싱 핵심 원리] 21장, Windows 메시지 후킹 (0) | 2021.11.24 |
[리버싱 핵심 원리] 19장, UPack 디버깅 - OEP 찾기 (0) | 2020.11.19 |
[리버싱 핵심 원리] 18장, UPack PE 헤더 상세 분석 (0) | 2020.11.15 |