22018, 1/1101 회원가입  로그인  
   gksqlcthxm
   dll인젝션 코드가 맞는거같은데 제대로 인젝션이 안되내요

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


인터넷이나 나뭇잎책으로 수십번 보며 비교를 했는데
더이상 틀린곳이 없는거 같은데 인젝션이 안됩니다.
에러나 워닝도 없고 그냥 끝까지 실행은 되는데 인젝션 기능이 안되요
다른 프로그래밍 카페에서도 도움을 청했는데 해결을 못하여 혹시나해서 질문 드립ㄴ다!

void injection(DWORD dwPid, LPCTSTR szDllPath)
{
        HANDLE hProcess, hThread;
        HMODULE hKernel32;
        LPTHREAD_START_ROUTINE pThreadProc;
        LPVOID pLibbuf;
        //PROCESSENTRY32 pe = { sizeof(pe) }; // 추가로 시도해본 것

        int nLen= strlen(szDllPath)+1;
        //pe.th32ProcessID = dwPid; // 추가로 시도해본 것

        if ( !(hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPid)) )
        {
                printf("failed");
        }
                
        pLibbuf = VirtualAllocEx(hProcess, NULL, nLen, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
        WriteProcessMemory(hProcess, pLibbuf, (LPVOID)szDllPath, nLen, NULL);
        hKernel32 = GetModuleHandle("kernel32.dll");
        pThreadProc = (LPTHREAD_START_ROUTINE)GetProcAddress(hKernel32, "LoadLibraryA");  
        hThread = CreateRemoteThread(hProcess, NULL, 0, pThreadProc, pLibbuf, 0, NULL);
        WaitForSingleObject(hThread,INFINITE);
CloseHandle(hThread);
CloseHandle(hProcess);

}

메인함수

        DWORD dwPid;
        char dll_path[20];

        printf("프로세스 ID를 입력하세요");
        scanf("%d",&dwPid);
                
        printf("dll경로를 입력하세요");
        scanf("%s",dll_path);

                injection(dwPid,dll_path);

  Hit : 9705     Date : 2017/06/13 07:24



    
해쿨러 보통 이런건 윈도XP에서 하셔야 잘됩니다 아니면 사용하고 계신 OS상에서 관리자권한으로 injector를 실행시켜보셔요 그렇게 확인을 해보셨다면 소스코드에서의 문제는 다 잡으셨을겁니다 그다음에는 환경에서의 문제를 확인해보셔야합니다 2017/06/13  
gksqlcthxm 말씀해주신 os,권한 말고 어떤 환경이 있나요...... 2017/06/13  
해쿨러 제가 말한 환경이 그걸 얘기한거였습니다 그리고 injector코드에 각 스텝이 실패했을 때 예외처리하는 코드가 없는데, 각각 함수 실행에서 에러코드가 리턴되는지 확인하고 어느 함수에서 제대로 동작하지 않아서 인젝션이 안되는건지 하나씩 보셔야합니다 2017/06/13  
gksqlcthxm GetLastError함수로 if ( !(hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPid)) )
이부분 확인하니 87번이엇나 인자값 에러라고 나왔는데 도무지 틀린 부분이 없는거 같아서 미치겟습니다 앞에 두 인자는 100% 확실하니 dwPid가 문제라는건데 injection함수말고 dll이나 프로세스 목록을 출력할때도 dwPid인자를 메인함수에서처럼 똑같이 전달햇는데 injection함수에서만 오류가 나니 답답해서 미치겠네요.
2017/06/13  
gksqlcthxm 디버깅시엔 WriteProcessMemory(hProcess, pLibbuf, (LPVOID)szDllPath, nLen, NULL); 함수가 실행되면 szDllPath 즉 입력한 dll의 경로가 pLibbuf에 들어가야 정상인가요?
pLibbuf를 찾아가보면 dll경로가 없는데 이게 문제인지.
2017/06/13  
rabbitlycat int nLen= strlen(szDllPath)+1;
에서 +1을 빼세염
2017/06/14  
gksqlcthxm msdn에서도 +1 하라 그러고 다른 분들이나 책에서도 다 +1이 있길래 말씀듣고 빼봤더니 되네요 이유는 모르겠지만 감사합니다 2017/06/15