Dll injector 순서
1. 대상 프로세스 핸들 구하기
hProcess = OpenProcess()
HANDLE WINAPI OpenProcess(
_In_ DWORD dwDesiredAccess,
_In_ BOOL bInheritHandle,
_In_ DWORD dwProcessId
);
2. 대상 프로세스 메모리에 인젝션할 DLL 경로 쓰기
pRemoteBuf = VirtualAllocEx()
LPVOID WINAPI VirtualAllocEx(
_In_ HANDLE hProcess,
_In_opt_ LPVOID lpAddress,
_In_ SIZE_T dwSize,
_In_ DWORD flAllocationType,
_In_ DWORD flProtect
);
WriteProcessMemory()
BOOL WINAPI WriteProcessMemory(
_In_ HANDLE hProcess,
_In_ LPVOID lpBaseAddress,
_In_ LPCVOID lpBuffer,
_In_ SIZE_T nSize,
_Out_ SIZE_T *lpNumberOfBytesWritten
);
3. LoadLibraryA() API 주소 구하기
hMod = GetModuleHandle("kernel32.dll")
pThreadProc = (LPTHREAD_START_ROUTINE)GetProcAddress()
FARPROC WINAPI GetProcAddress(
_In_ HMODULE hModule,
_In_ LPCSTR lpProcName
);
=>kernel32.dll의 주소는 대상 프로세스가 아니라 Injector.exe의 kernel32.dll의 주소
-> windows OS 특성상 OS 핵심 DLL은 고유한 주소가 있다.
4. 대상 프로세스에 원격 스레드 실행
hThread = CreateRemoteThread()
HANDLE WINAPI CreateRemoteThread(
_In_ HANDLE hProcess,
_In_ LPSECURITY_ATTRIBUTES lpThreadAttributes,
_In_ SIZE_T dwStackSize,
_In_ LPTHREAD_START_ROUTINE lpStartAddress,
_In_ LPVOID lpParameter,
_In_ DWORD dwCreationFlags,
_Out_ LPDWORD lpThreadId
);
'Reversing' 카테고리의 다른 글
TEB (0) | 2012.11.13 |
---|---|
TLS (0) | 2012.11.13 |
안티 디버거 기술 (0) | 2012.11.12 |
Anti Reversing (0) | 2012.11.12 |
VS++ 2008 DLL 파일 생성 방법 (0) | 2012.11.06 |