-
DLL injectionwindows system 2013. 12. 24. 11:33DLL injection
실행중인 다른 프로세스에 특정 DLL파일을 강제로 삽입하는 것
삽입된 DLL은 해당 프로세스의 메모리에 대한 정당한 접근권한을 갖는다.
DLL injection 구현방법-CreateRemoteThread() API
-AppInit_DLLs 값
-SetWindowsHookEx() API
-수작업 패치
-CreateRemoteThread() API
http://msdn.microsoft.com/en-us/library/windows/desktop/ms682437(v=vs.85).aspx
CreateRemoteThread(hProcess, //hProcess
NULL, //lpThreadAttributes
0, //dwStackSize
pThreadProc //lpStartAddress
pRemoteBuf, //lpParameter
0, //dwCreationFlags
NULL); //lpThreadId
hProcess(notepad.exe)가 pThreadProc( => LoadLibraryW(pRemoteBuf) )를 호출하도록 한다.
pThreadProcpRemoteBufinjection할 dll의 절대경로를 victim process memory내에 write한다.
pRemoteBuf는 write한 buffer의 주소를 가지는 변수이다.
-AppInit _DLLs 값User32.dll이 프로세스에 로딩될 때 AppInit_DLLs항목을 읽어서 값이 존재하면 LoadLibrary()API를 사용하여 사용자 DLL을 로딩한다.
-SetWindowsHookEx() APIHook Function
http://msdn.microsoft.com/en-us/library/windows/desktop/ff468842(v=vs.85).aspx
-SetWindowsHookEx() API를 이용하여 message Hook을 설치하면, 어떤 프로세스에서 해당 메시지(WH_KEYBOARD)가 발생했을 때 운영체제가 해당 DLL파일(g_hInstance)을 해당 프로세스에 강제로 injection하고 등록된 hook procedure(KeyboardProc)을 호출한다.
-수작업 패치
Import Directory Table에 추가할 dll 즉, IMAGE_IMPORT_DESCRIPTOR 를 삽입한다.
새로운 dll을 injection하기 위해 IMAGE_IMPORT_DESCRIPTOR 구조체를 추가한다.
여기에 새로운 자료구조, INT, Name, IAT를 추가한다.
Name에는 char값
OriginalFirstThunk, FirstThunk 엔 pointer(RVA)값,
'windows system' 카테고리의 다른 글
TLS, TEB, PEB, SEH (0) 2014.01.08 IAT(Import Address Table) , EAT(Export Address Table) (0) 2013.12.28 CreateProcess API (0) 2013.12.23 calling convention (0) 2013.12.22 PE File 구조체 (0) 2013.12.22