17
22. DLL 인인인

DLL 인젝션

  • Upload
    -

  • View
    604

  • Download
    0

Embed Size (px)

Citation preview

Page 1: DLL 인젝션

22. DLL 인젝션

Page 2: DLL 인젝션

1. 다른 프로세스에 의해 생성된 윈도우를 subclassing

2. 디버깅을 위해 필요한 경우 .

3. 다른 프로세스를 후킹하려는 경우 .

프로세스의 경계를 무너트리고 싶은 경우 ?

Page 3: DLL 인젝션

DLL in-jection

SetWindowLongPtr(hWnd, GWLP_WNDPROC, MySub-classProc);

Page 4: DLL 인젝션

DLL in-jection

실패

SetWindowLongPtr(hWnd, GWLP_WNDPROC, MySub-classProc);

Page 5: DLL 인젝션

DLL in-jection

실패다른 프로세스이기 때문

SetWindowLongPtr(hWnd, GWLP_WNDPROC, MySub-classProc);

Page 6: DLL 인젝션

DLL injection : registry

AppInit_DLLs- 공백을 구분자로 DLL 파일의 이름을 저장

LoadAppInit_DLLs- Globally enables or disables AppInit_DLLs.

User32.dll

HKEY_LOCAL_MACHINE\Software\Microsoft\ Windows NT\CurrentVersion\Windows

Page 7: DLL 인젝션

DLL injection : trojan

original trojan

Page 8: DLL 인젝션

DLL injection : debugger

원 래 하 던 작 업 기 계 어 ...

주 입 이 된 코 드 으 으 … ...

IP

Page 9: DLL 인젝션

DLL injection : debugger

원 래 하 던 작 업 기 계 어 ...

주 입 이 된 코 드 으 으 … ...

IP

Page 10: DLL 인젝션

DLL injection : hook

Hook 을 이용한 injectionHHOOK hHook = SetWindowsHookEx(WH_GETMESSAGE, GetMsgProc, hInstDll, 0);

Page 11: DLL 인젝션

DLL injection : hook

Unhook 함수

HHOOK hHook = SetWindowsHookEx(WH_GETMESSAGE, GetMsgProc, hInstDll, 0);BOOL UnhookWindowsHookEx(HHOOK hHook);

Page 12: DLL 인젝션

DLL injection : remote thread

홍 너무 쉬워

HANDLE CreateRemoteThread( HANDLE hProcess, PSECURITY_ATTRIBUTES psa, DWORD dwStackSize, PTHREAD_START_ROUTINE pfnStateAddr, PVOID pvParam, DWORD fdwCreate, PDWORD pdwThreadId);

Page 13: DLL 인젝션

DLL injection : remote thread

LoadLibrary 가 그대로 실행될까 ?

Wide Character Version?HANDLE hThread = CreateRemoteThread(hProcessRemote, NULL, 0, LoadLibraryW, L”C:\\MyLib.dll”, 0, NULL);

ANSI Character Version?HANDLE hThread = CreateRemoteThread(hProcessRemote, NULL, 0, LoadLibraryA, ”C:\\MyLib.dll”, 0, NULL);

Page 14: DLL 인젝션

DLL injection : remote thread

LoadLibaray 의 실제 주소를 획득

Wide Character VersionPTHREAD_START_ROUTINE pfnThreadRtn = (PTHREAD_START_ROUTINE) GetProcAddress(GetModuleHandle(TEXT(“Kernel32”)), “Loadli-braryW”);HANDLE hThread = CreateRemoteThread(hProcessRemote, NULL, 0, LoadLibraryW, L”C:\\MyLib.dll”, 0, NULL);

Page 15: DLL 인젝션

DLL injection : remote thread

사실은 문자열의 주소값

Wide Character VersionPTHREAD_START_ROUTINE pfnThreadRtn = (PTHREAD_START_ROUTINE) GetProcAddress(GetModuleHandle(TEXT(“Kernel32”)), “Loadli-braryW”);HANDLE hThread = CreateRemoteThread(hProcessRemote, NULL, 0, LoadLibraryW, L”C:\\MyLib.dll”, 0, NULL);

Page 16: DLL 인젝션

DLL injection : remote thread

VirtualAllocEx 과 VirtualFreeEx 를 사용하면 다른 프로세스 공간 상에 Vmemory Alloc 가능 .

ReadProcessMemory 와 WriteProcessMemory 를 사용하면…

이름만 봐도 알지 ?

Page 17: DLL 인젝션

Thank youCrePAS /Jung Dawoon