DLL Inject / Programm stürzt ab!



  • Hallo Community,

    habe hier ein DLL-Inject, aber mein Spiel stürzt am Ende dummerweise ab!
    Ich kann den Fehler nicht finden.

    CODE:

    // 007_Inject.cpp : Definiert die exportierten Funktionen für die DLL-Anwendung.
    //
    
    #include "stdafx.h"
    
    char const path[] = "C:\007_Inject.dll";
    
    void GetCorrectOutPuts();
    
    int main()
    
    {
    	HANDLE hWnd, hProcess, AllocAdress, hRemoteThread;
    	DWORD PID;
    
    	hWnd = FindWindow(0, _T("Nightfire"));
    	if (hWnd == NULL)
    	{
    		std::cout << "FEHLER bei hWnd" << std::endl;
    		system ("PAUSE");
    	}
    	GetWindowThreadProcessId((HWND)hWnd, &PID);
    	hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, PID);
    		if (hProcess == NULL)
    	{
    		std::cout << "FEHLER bei hProcess" << std::endl;
    		system ("PAUSE");
    		}
    	AllocAdress = VirtualAllocEx(hProcess,0, strlen(path) + 1, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    		if (AllocAdress == NULL)
    	{
    		std::cout << "FEHLER bei Alloc" << std::endl;
    		system ("Pause");
    		}
    	WriteProcessMemory(hProcess,(void*)AllocAdress, (void*)path, strlen(path) + 1, 0);
    
    	hRemoteThread=CreateRemoteThread(hProcess, 0, 0, (LPTHREAD_START_ROUTINE) GetProcAddress(GetModuleHandleA("kernel32.dll"),"LoadLibrary"), AllocAdress, 0, 0);
    		if (hRemoteThread == NULL)
    	{
    		std::cout << "FEHLER bei hWnd" << std::endl;
    		system ("Pause");
    		}
    	LoadLibrary(_T("007_Inject.dll"));
    
    	WaitForSingleObject (hRemoteThread, INFINITE);
    
    	VirtualFreeEx(hProcess, AllocAdress, strlen(path) + 1, MEM_DECOMMIT);
    
    	CloseHandle(hProcess);
    	return (0);
    
    };
    

    Und die .dll Datei (die noch nichts macht, außer eine MessageBox):

    // dllmain.cpp : Definiert den Einstiegspunkt für die DLL-Anwendung.
    #include "stdafx.h"
    
    BOOL APIENTRY DllMain( HMODULE hModule,
                           DWORD  ul_reason_for_call,
                           LPVOID lpReserved
    					 )
    
    {
    	switch (ul_reason_for_call)
    	{
    	case DLL_PROCESS_ATTACH:
    				{
    		MessageBox(NULL, _T("TEST"), NULL, MB_OK);
    
    		}
    	case DLL_THREAD_ATTACH:
    	case DLL_THREAD_DETACH:
    	case DLL_PROCESS_DETACH:
    		break;
    	}
    	return TRUE;
    }
    


  • Ich habe mal weiter geschaut und ich bin jetzt schonmal soweit, dass ich jetzt:

    AllocAdress = VirtualAllocEx(hProcess,0, strlen(path) + 1, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    

    anzweifle.

    Ich habe als zweiten Parameter eine 0 angewendet. Dieser steht aber für lpAdress. Jetzt würde ich gerne wissen, ob es eine Funktion gibt, die diese Adresse im Speicher analysiert. EntryMemoryWrite oder so. Gibt es sowas?

    Mit freundlichen Grüßen!

    Gedanke verworfen!! (Additional) 😃 😃



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x) in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Was mir da als erstes schon mal auffällt: Du ladest LoadLibrary. LoadLibrary gibt es aber nicht. Du musst die A oder W Variante wählen.



  • In DllMain dürfen höchstens Funktionen aus kernel32.dll aufgerufen werden
    (von den Win32-DLLs), da sonst das Locking in LoadLibraryA() / LoadlibraryW()
    gestört wird (es können sehr schwer debug-bare Fehler auftreten), s. MSDN-Artikel
    zu DllMain. Also kein MessageBox()-Aufruf in DllMain()!



  • THEREAVER schrieb:

    Was mir da als erstes schon mal auffällt: Du ladest LoadLibrary. LoadLibrary gibt es aber nicht. Du musst die A oder W Variante wählen.

    Kommt darauf an wie sein Projecteinstellungen aussehen.



  • nö.



  • Klar das es nur die A / W Varianten gibt.
    Doch seine IDE wird im dies je nach Projecteinstellungen ersetzen !



  • GetProcAddress(GetModuleHandleA("kernel32.dll"),"LoadLibrary"
    

    das kann NIE klappen, egal was eingestellt ist!



  • Elexarie schrieb:

    Ich kann den Fehler nicht finden.

    Der Remotethread springt nach/beim Verlassen von LoadLibrary ( ➡ __stdcall ) ins Nirwana.



  • THEREAVER schrieb:

    GetProcAddress(GetModuleHandleA("kernel32.dll"),"LoadLibrary"
    

    das kann NIE klappen, egal was eingestellt ist!

    Das habe ich nie geschrieben !



  • Sorry habe nicht geschaut wie er es aufruft. !


Anmelden zum Antworten