본문 바로가기

High Level Technique/Reversing

DLL Ejection

DLL Ejection



DLL Ejection은 프로그램이 실행되는데 DLL파일이 함께 사용되는데, 해당 프로그램에서 사용되는 DLL을 빼내는 것을 말합니다.

다만, 사용자가 강제로 넣은 것만 뺄 수 있습니다. 





Injection에서는 LoadLibrary()를 호출하도록 했지만, Ejection에서는 FreeLibrary()를 호출하도록 합니다.


Ejction도 마찬가지로 CreateRemoteThread()를 사용합니다. 다만 인자로 넘겨주는 값이 달라집니다.


lpStartAddress에 FreeLibrary() 주소를 넣어주고, lpParameter에 Ejection할 DLL의 Handle을 넣어줍니다.


Ejector.cpp





처음 Injection을 합니다. k3y6reak.dll 파일이 정상적으로 Injection된 것을 알 수 있습니다.



다음으로 Ejection을 합니다.




k3y6reak.dll 파일이 사라진 것을 알 수 있습니다.




Kernel Object에는 reference count가 있습니다. LoadLibrary("A.dll")을 10번 호출하면 count가 10이 되며, 나중에 해제할 때도 마찬가지로 FreeLibrary("A.dll")도 10번을 해주어야 합니다.

'High Level Technique > Reversing' 카테고리의 다른 글

Code Injection  (0) 2016.07.15
DLL Load Using PE Patch  (0) 2016.07.14
DLL Injection  (0) 2016.07.06
Windows Massage Hooking  (0) 2015.12.29
.reloc section 제거  (1) 2015.12.21