Download - DLL 인젝션
22. DLL 인젝션
1. 다른 프로세스에 의해 생성된 윈도우를 subclassing
2. 디버깅을 위해 필요한 경우 .
3. 다른 프로세스를 후킹하려는 경우 .
프로세스의 경계를 무너트리고 싶은 경우 ?
DLL in-jection
SetWindowLongPtr(hWnd, GWLP_WNDPROC, MySub-classProc);
DLL in-jection
실패
SetWindowLongPtr(hWnd, GWLP_WNDPROC, MySub-classProc);
DLL in-jection
실패다른 프로세스이기 때문
SetWindowLongPtr(hWnd, GWLP_WNDPROC, MySub-classProc);
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
DLL injection : trojan
original trojan
DLL injection : debugger
원 래 하 던 작 업 기 계 어 ...
주 입 이 된 코 드 으 으 … ...
IP
DLL injection : debugger
원 래 하 던 작 업 기 계 어 ...
주 입 이 된 코 드 으 으 … ...
IP
DLL injection : hook
Hook 을 이용한 injectionHHOOK hHook = SetWindowsHookEx(WH_GETMESSAGE, GetMsgProc, hInstDll, 0);
DLL injection : hook
Unhook 함수
HHOOK hHook = SetWindowsHookEx(WH_GETMESSAGE, GetMsgProc, hInstDll, 0);BOOL UnhookWindowsHookEx(HHOOK hHook);
DLL injection : remote thread
홍 너무 쉬워
HANDLE CreateRemoteThread( HANDLE hProcess, PSECURITY_ATTRIBUTES psa, DWORD dwStackSize, PTHREAD_START_ROUTINE pfnStateAddr, PVOID pvParam, DWORD fdwCreate, PDWORD pdwThreadId);
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);
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);
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);
DLL injection : remote thread
VirtualAllocEx 과 VirtualFreeEx 를 사용하면 다른 프로세스 공간 상에 Vmemory Alloc 가능 .
ReadProcessMemory 와 WriteProcessMemory 를 사용하면…
이름만 봐도 알지 ?
Thank youCrePAS /Jung Dawoon