ÄÚµå´Â ¸®¹ö½ºÄھ ÀÖ´Â ¼Ò½ºÀÔ´Ï´Ù.
BOOL InjectDll(DWORD dwPID, LPCTSTR szDllName)
{
HANDLE hProcess, hThread;
LPVOID pRemoteBuf;
DWORD dwBufSize = lstrlen(szDllName) + 1;
LPTHREAD_START_ROUTINE pThreadProc;
if (!(hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID)))
return FALSE;
pRemoteBuf = VirtualAllocEx(hProcess, NULL, dwBufSize, MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(hProcess, pRemoteBuf, (LPVOID)szDllName, dwBufSize, NULL);
pThreadProc = (LPTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(L"kernel32.dll"), "LoadLibraryA");
hThread = CreateRemoteThread(hProcess, NULL, 0, pThreadProc, pRemoteBuf, 0, NULL);
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hThread);
CloseHandle(hProcess);
return TRUE;
}
µð¹ö±ëÀ» ÇØº» °á°ú OpenProcess(), virtualAllocEx(), WriteProcessMemory(), GetProcAddress(), CreateRemoteThread() ÇÔ¼öµé ÀüºÎ 0À» ¸®ÅÏÇÏÁö ¾Ê°í Á¤»óÀûÀ¸·Î ½ÇÇàÀÌ µÇ´Â°ÍÀ» È®ÀÎÇß½À´Ï´Ù. ±×·±µ¥ ¸·»ó procexp¸¦ ÅëÇØ¼ dllÀÎÁ§¼ÇµÇ¾ú´ÂÁö È®ÀÎÀ» ÇØº¸¸é ÀüÇô µÇÁö°¡ ¾Ê³×¿ä.... µµµ¥Ã¼ ¹«¾ùÀÌ ¹®Á¦Àϱî¿ä? ¤Ð¤Ð dllÀÎÁ§ÅͶû Ÿ°Ù µÑ´Ù 32bitÀÔ´Ï´Ù. ¸®¹ö½ºÄھ ÀÖ´Â ÄÚµå¶û Â÷ÀÌÁ¡À» ¸»ÇÏÀÚ¸é dllÆÄÀÏÀÇ °æ·Î¶û, GetModuleHandle("kernel32.dll")¿¡¼ LÀ» ºÙ¿©¼ GetModuleHandle(L"kernel32.dll")·Î ¹Ù²Û°ÍÀÔ´Ï´Ù...
µµµ¥Ã¼ ¿Ö ¾ÈµÇ´Â °É±î¿ä ¤Ð¤Ð |