DLL Injection działa na windows 7, a na windows 10 nie działa

0

Hej, kiedyś na windows 7 napisałem kod injectujący plik DLL do procesu exe i to wciąż działa na windows 7. Przetestowałem na windows 10 i zupełnie nie działa, w takim sensie, że mam wrażenie tak jakby ten DLL w ogóle nie był wstrzykiwany do procesu, mimo że dostaję pozytywny komunikat o wstrzyknięciu. GetLastError zwraca 0. Co jest nie tak? Co potrzeba zmienić w tym kodzie pod kątem windows 10?

DWORD CInject::RunApplication(const char *pathApp)
{
	STARTUPINFO startupInfo;
	PROCESS_INFORMATION procInfo;
	ZeroMemory(&startupInfo,sizeof(startupInfo));
	startupInfo.cb = sizeof(startupInfo);

	if(CreateProcess(pathApp,NULL,NULL,NULL,FALSE,NULL,NULL,NULL,&startupInfo,&procInfo))
		return procInfo.dwProcessId;

	return 0;
}

bool CInject::InjectDLL(DWORD processID, const char *pathDLL)
{
	if(processID)
	{
		FILE *file = fopen(pathDLL,"r+");
		if(file)
		{
			fclose(file);

			LPVOID kernel;
			LPVOID handleLibrary;
			HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,processID);
			if(hProcess)
			{
				kernel = (LPVOID)GetProcAddress(GetModuleHandle("kernel32.dll"),"LoadLibraryA");
				handleLibrary = VirtualAllocEx(hProcess,NULL,strlen(pathDLL),MEM_RESERVE | MEM_COMMIT,PAGE_READWRITE);
				WriteProcessMemory(hProcess,(LPVOID)handleLibrary,pathDLL,strlen(pathDLL),NULL);
				CreateRemoteThread(hProcess,NULL,NULL,(LPTHREAD_START_ROUTINE)kernel,(LPVOID)handleLibrary,NULL,NULL);
				CloseHandle(hProcess);
				return true;
			}
		}
	}
	return false;
}

CInject inject;
		DWORD processID = inject.RunApplication("Process.exe");
		if (processID)
		{
			if (inject.InjectDLL(processID, "biblioteka.dll") == true) {

				DWORD lastError = GetLastError();
				char spr[128];
				sprintf(spr, "DLL Injected... (LastError: %d)\n", lastError);
				PrintMessage(spr);
			}
			else
				PrintMessage("Could not inject DLL File\n");
		}
			

Kod ten uruchamia proces i od razu wstrzykuje do niego DLL. Otrzymuję komunikat: DLL Injected... (LastError: 0)
A w rzeczywistości plik nie załadował się do procesu na Windows 10. Windows 7 jest OK. Jak to naprawić?

2

Zapomniałeś o zerze na końcu łańcucha znakowego:

handleLibrary = VirtualAllocEx(hProcess, NULL, strlen(pathDLL) + 1, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(hProcess, (LPVOID)handleLibrary, pathDLL, strlen(pathDLL) + 1, NULL);
FILE *file = fopen(pathDLL,"r+");
       if(file)
       {
           fclose(file);

Użyj po prostu GetFileAttributes.

1 użytkowników online, w tym zalogowanych: 0, gości: 1