본문 바로가기

리버싱 핵심원리/03. DLL Injection

(3)
03-04. DLL Ejection 1. DLL Ejection 동작 원리 앞에서 소개했던 DLL Injection의 동작 원리는 다음과 같다. 대상 프로세스가 LoadLibrary() API를 호출하도록 만드는 것 마찬가지로 DLL Ejection의 동작 원리는 다음과 같다. 대상 프로세스가 FreeLibrary() API를 호출하도록 만드는 것 즉 CreateRemoteThread()의 lpStartAddress에 FreeLibrary() API의 주소를 넘겨주고 lpParameter 에 Ejection할 DLL의 핸들을 넘겨주면 된다. 참고로 Windows Kernel Object에는 Reference Count 라는 것이 있다. 예를 들어 LoadLibrary("a.dll");를 10번 호출하면 a.dll 에 대한 Reference..
03-01. Windows 메세지 후킹 1.메세지 훅 Windows는 GUI를 제공하고, 이는 Event Driven 방식으로 동작한다. 우리가 키보드/마우스를 이용하여 메뉴 선택, 버튼 선택 등을 할 때의 작업이 모두 Event이다. Windows는 이런 Event가 발생할 때 응용 프로그램으로 미리 정의된 Message를 보낸다. 이 Message를 중간에서 가로채는 것이 Message Hooking이다. (자세한 내용은 찰스 펫졸드의 『Programming Windows』를 참고) 2. SetWindowsHookEx() Message Hooking은 SetWindowsHookEx() API를 통해 간단히 구현할 수 있다. HHOOK SetWindowsHookExA( int idHook, HOOKPROC lpfn, HINSTANCE hmo..
03-03. DLL Injection 1. DLL Injection DLL Injection이란 실행 중인 다른 프로세스에 특정 DLL 파일을 강제로 삽입(Inject)하는 것이다. 실제로는 다른 프로세스에게 LoadLibrary() API를 호출하게 하여 사용자가 원하는 DLL을 로딩하는 것이다. 2. DLL Injection 구현 방법 원격 스레드 생성(CreateRemoteThread() API 이용) 레지스트리 이용(AppInit_DLLs 값 이용) 메시지 후킹(SetWindowsHookEx() API 이용) 3. CreateRemoteThread() 3.1 InjectDll.cpp #include "windows.h" #include "tchar.h" BOOL SetPrivilege(LPCTSTR lpszPrivilege, BOOL..