시스템 해킹

 1576, 1/79 회원가입  로그인  
   wlgns5721
   dll인젝션이 왜 안되는 걸까요....

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=1819 [복사]


코드는 리버스코어에 있는 소스입니다.

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")로 바꾼것입니다...

도데체 왜 안되는 걸까요 ㅠㅠ

  Hit : 3656     Date : 2016/08/30 01:39