ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • DLL injection
    windows system 2013. 12. 24. 11:33
    DLL 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) )를 호출하도록 한다.

     

    pThreadProc 

     

     

     

    pRemoteBuf

     

    injection할 dll의 절대경로를 victim process memory내에 write한다.

    pRemoteBuf는 write한 buffer의 주소를 가지는 변수이다.

     

     

     

    -AppInit _DLLs 값

     

    User32.dll이 프로세스에 로딩될 때 AppInit_DLLs항목을 읽어서 값이 존재하면 LoadLibrary()API를 사용하여 사용자 DLL을 로딩한다.

     

    -SetWindowsHookEx() API

     

    Hook 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
Designed by Tistory.