DirectX DLL Problem



  • Hallo liebe Community!

    Ich bin momentan dabei mich etwas mit der DLL und DirectX Entwicklung auseinanderzusetzen. Nun bin ich leider auf einen Fehler gestoßen nachdem ich ein Tutorial befolgt habe und ich hoffe, das ihr mir helfen könnt 🙂 . Hier mal mein Code:

    #pragma once
    #pragma comment(lib, "d3d9.lib")
    #pragma comment(lib, "d3dx9.lib")
    
    #include <windows.h>
    #include <cstdio>
    #include <d3d9.h>
    #include <d3dx9.h>
    
    typedef HRESULT(__stdcall* EndScene_t)(LPDIRECT3DDEVICE9);
    EndScene_t pEndScene;
    
    LPDIRECT3DDEVICE9 pDevice;
    
    const D3DCOLOR txtPink = D3DCOLOR_ARGB(255, 255, 0, 255);
    
    int WINAPI DllMain(HINSTANCE hInst, DWORD reason, LPVOID reserved)
    {
    	switch (reason)
    	{
    	case DLL_PROCESS_ATTACH:
    		CreateThread(0, 0, (LPTHREAD_START_ROUTINE)InitHook, 0, 0, 0);
    		break;
    
    	}
    	return true;
    }
    
    void InitHook()
    {
    	HMODULE hModule = NULL;
    	while (!hModule)
    	{
    		hModule = GetModuleHandleA("d3d9.dll");
    		// Handle zur DLL holen
    		Sleep(100);
    		// 100ms warten
    		pEndScene = (EndScene_t)DetourFunc((PBYTE)0x7543279F, (PBYTE)hkEndScene, 5);
    		DrawRect(pDevice, 10, 10, 200, 200, txtPink);
    	}
    }
    
    void *DetourFunc(BYTE *src, const BYTE *dst, const int len) // credits to gamedeception
    			{
    				BYTE *jmp = (BYTE*)malloc(len + 5);
    				DWORD dwback;
    				VirtualProtect(src, len, PAGE_READWRITE, &dwback);
    				memcpy(jmp, src, len);
    				jmp += len;
    				jmp[0] = 0xE9;
    				*(DWORD*)(jmp + 1) = (DWORD)(src + len - jmp) - 5;
    				src[0] = 0xE9;
    				*(DWORD*)(src + 1) = (DWORD)(dst - src) - 5;
    				VirtualProtect(src, len, dwback, &dwback);
    				return (jmp - len);
    			}
    
    HRESULT __stdcall hkEndScene(LPDIRECT3DDEVICE9 pDevice)
    {
    	return pEndScene(pDevice);
    }
    
    void DrawRect(LPDIRECT3DDEVICE9 Device_t, int X, int Y, int L, int H, D3DCOLOR color)
    {
    	D3DRECT rect = { X, Y, X + L, Y + H };
    	Device_t->Clear(1, &rect, D3DCLEAR_TARGET, color, 0, 0); // bei Google gibt’s näheres
    }
    

    und die Fehlermeldungen:

    Fehler	1	error C2065: 'InitHook': nichtdeklarierter Bezeichner	c:\users\moin354\desktop\hacks\1337 hack test\main.cpp	22	1	1337 hack test
    Fehler	2	error C2065: 'hkEndScene': nichtdeklarierter Bezeichner	c:\users\moin354\desktop\hacks\1337 hack test\main.cpp	38	1	1337 hack test
    Fehler	3	error C3861: "DetourFunc": Bezeichner wurde nicht gefunden.	c:\users\moin354\desktop\hacks\1337 hack test\main.cpp	38	1	1337 hack test
    Fehler	4	error C3861: "DrawRect": Bezeichner wurde nicht gefunden.	c:\users\moin354\desktop\hacks\1337 hack test\main.cpp	39	1	1337 hack test
    

    Wenn ihr mir helfen würdet wäre ich sehr dankebar 🙂 .

    MfG moin354

    P.S: Ja, es ist ein hack und ich werde ihn nur offline für mich nutzen. Also bitte kein gehate^^



  • In C/C++ kannst du Funktionen erst verwenden wenn sie bekannt sind. Das heißt

      1. du ziehst die Funktion vor
    void InitHook()
    {
        //...
    }
    
    int WINAPI DllMain(HINSTANCE hInst, DWORD reason, LPVOID reserved)
    {
        // ...
    }
    
    • oder 2) Du machst dem Compiler die Signatur der Funktion bekannt
    void InitHook();
    
    int WINAPI DllMain(HINSTANCE hInst, DWORD reason, LPVOID reserved)
    {
        // ...
    }
    
    void InitHook()
    {
        //...
    }
    

    Wobei du dir aber überlegen solltest ob du dir nicht erst die Grundlagen der Programmierung aneignest bevor du dich ans "Hacken" machst. 😉



  • Vielen dank für die Antwort, hab es total übersehen da mich die Anleitung etwas verwirrt hatte, obwohl ich dachte das ich mitlerweile mindestens die Endspur der Grundlagen erreicht habe^^. Naja aufjedenfall vielen dank für die Antwort 🙂

    MfG moin354


Log in to reply