2015-01-17 3 views
-1

저는 최근에 C++을 배웠고 충분한 프로그램을 만들 수있는 단계에 있습니다.DLL 인젝터 문제

현재 내가 선택한 프로세스에 하나의 DLL을 삽입하려고하는데 문제가 발생합니다. 문제가 발생하기 때문에 제대로 작동하지만 DLL이 없어도 주입 된 것처럼 작동합니다. .

도와주세요.

내 출처 :

#include <iostream> 
#include <Windows.h> 
#include <TlHelp32.h> 

using namespace std; 
bool InjectDLL(DWORD ProcessID); 

char FileToInject[] = "DLL.dll"; 
char ProcessName[] = "ac_client.exe"; 
typedef HINSTANCE (*fpLoadLibrary)(char*); 

int main() 
{ 
    DWORD processId = NULL; 

    PROCESSENTRY32 pe32 = {sizeof(PROCESSENTRY32)}; 
    HANDLE hProcSnap; 

    while(!processId) 
    { 
     system("CLS"); 
     cout << "|Coded by Proton|" << endl; 
     cout << "Waiting for AssaultCube ..." << endl; 
     hProcSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 

     if(Process32First(hProcSnap, &pe32)) 
     { 
      do 
      { 
       if(!strcmp(pe32.szExeFile, ProcessName)) 
       { 
        processId = pe32.th32ProcessID; 
        break; 
       } 
      } 
      while(Process32Next(hProcSnap, &pe32)); 
     } 
     Sleep(1000); 
    } 


    while(!InjectDLL(processId)) 
    { 
     system("CLS"); 
     cout << "DLL failed to inject." << endl; 
     Sleep(1000); 
    } 

    cout << "DLL Injected." << endl << endl; 
    cout << "Closing Injector in 5 seconds ..." << endl; 

    CloseHandle(hProcSnap); 
    Sleep(5000); 

    return 0; 
} 

bool InjectDLL(DWORD ProcessID) 
{ 
    HANDLE hProc; 
    LPVOID paramAddr; 

    HINSTANCE hDll = LoadLibrary("KERNEL32"); 

    fpLoadLibrary LoadLibraryAddr = (fpLoadLibrary)GetProcAddress(hDll, "LoadLibraryA"); 

    hProc = OpenProcess (PROCESS_ALL_ACCESS, false, ProcessID); 

    char dllPath[250] = "C:\\"; 

    strcat(dllPath, FileToInject); 

    paramAddr = VirtualAllocEx(hProc, 0, strlen(dllPath)+1, MEM_COMMIT, PAGE_READWRITE); 
    bool memoryWritten = WriteProcessMemory(hProc, paramAddr, dllPath, strlen(dllPath)+1, NULL); 

    CreateRemoteThread(hProc, 0, 0, (LPTHREAD_START_ROUTINE)LoadLibraryAddr, paramAddr, 0, 0); 

    CloseHandle(hProc); 

    return memoryWritten; 
} 

정말 고마워요!

+1

놀랍게도이 다른 질문의 코드와 같습니다 : http://stackoverflow.com/q/12138841/103167 –

답변

1

CreateRemoteThread의 반환 값을 무시하지 마십시오.

스레드 핸들을 사용하여 실행 중인지 확인하고 (시간 제한이있는 WaitForSingleObject) 종료 한 경우 반환 코드를 확인하십시오.

+0

이 도움이되었지만 오류가 발생했습니다. 게시 할 수 있고 코드를 작성한 후에이 작업을 수행하는 것으로 보입니다. ? – HueHueKing

+0

@JoshNazarino 아니! 아무도 당신의 코드 교정 보모가 될 것입니다. –