[C++]D3D hook Problem

10/25/2009 19:14 ms​#16
Quote:
Originally Posted by iMaxxx View Post
Also ich muss erstmal DIRECT3DDEVICE9 eine gültige Adresse zuweisen...
Du musst DrawRect() nur in der richtigen Funktion callen, wie in deinem zweiten Code. In InitHook() hat sie nichts verloren. Gezeichnet wird nur im Detour.

Quote:
Originally Posted by iMaxxx View Post
d3d9.dll Handle + EndScene Offset = EndScene Adresse...
Richtig. Das Handle kann sich nach dem Neustart verändern aber das Offset ist immer gleich, solange die d3d9.dll unverändert bleibt.

Quote:
Originally Posted by iMaxxx View Post
Doch was soll denn an dem Thread (InitHook()) falsch sein?
Sorry, aber dass verstehe ich nicht ganz=(
Meiner Meinung nach ist da alles richtig. ;o
Ob DetourFunc() das macht was es machen soll weiß ich aber nicht. Wenn du die Funktion aber aus einem Tutorial hast, wirds schon stimmen. :o
10/25/2009 23:39 Bot_interesierter#17
Quote:
Originally Posted by iMaxxx View Post
Also ich muss erstmal DIRECT3DDEVICE9 eine gültige Adresse zuweisen...
d3d9.dll Handle + EndScene Offset = EndScene Adresse...
Doch was soll denn an dem Thread (InitHook()) falsch sein?
Sorry, aber dass verstehe ich nicht ganz=(
Wenn du die DrawRect Funktion in der EndScene aufrufst musst du pDevice keine Adresse mehr zuweisen, ich war nur etwas davon irritiert das du pDevice auch selbst definiert hast und nie einen wert zugewiesen hast.

Was deine InitHook Funktion angeht, die calling convention entspricht nicht der von CreateThread geforderten, das kann zu vielen unschönen Problemen führen, also mach es lieber gleich richtig wie auf [Only registered and activated users can see links. Click Here To Register...] beschrieben.

Dein EndScene Detour ist übrigens soweit richtig, ob die EndScene Adresse Stimmt musst du allerdings selbst testen, vielleicht benutzt du besser die Methode die Disconnect in dem D3D Hooking Thread gepostet hat.
10/25/2009 23:46 Lawliet#18
Schön:)Dann muss ich nur noch das Offset zu meinem Handle addieren...
Mal sehen!
10/31/2009 19:55 Lawliet#19
Code:
#pragma once
#pragma comment(lib, "d3d9.lib")
#pragma comment(lib, "d3dx9.lib")

#include <windows.h>
#include <cstdio>
#include <d3d9.h>
#include <d3dx9.h>



//LPDIRECT3DDEVICE9 pDevice;
const D3DCOLOR txtPink = D3DCOLOR_ARGB(255, 255, 0, 255); // Alpha, Rot, Grün, Blau
void InitHook();
void *DetourFunc(BYTE *src, const BYTE *dst, const int len);
typedef HRESULT(__stdcall* EndScene_t)(LPDIRECT3DDEVICE9);
void DrawRect (LPDIRECT3DDEVICE9 Device_t, int X, int Y, int L, int H, D3DCOLOR color);
EndScene_t pEndScene;
//dort habe ich angefangen
ID3DXFont *pFont;


      
HRESULT __stdcall hkEndScene(LPDIRECT3DDEVICE9 pDevice)
{
DrawRect (pDevice, 10, 10, 200, 200, txtPink);
return pEndScene(pDevice);
}




int WINAPI DllMain(HINSTANCE hInst,DWORD reason,LPVOID reserved)
{
        switch(reason)
        {
        case DLL_PROCESS_ATTACH:
                // Hier kommt unser Code rein
			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) (DWORD)hModule + 0x871A0/*0x4FDD71CC*/,(PBYTE)hkEndScene, 5);
		//DrawRect (pDevice, 10, 10, 200, 200, txtPink);
		//Meins:
		//int zahl = 1;
		//int zahl2 = 0;
		//if(zahl > zahl2, zahl2++)
		//{
		//	D3DXCreateFont(pDevice, 14, 0, FW_NORMAL, 1, 0, DEFAULT_CHARSET,  OUT_DEFAULT_PRECIS, 
//ANTIALIASED_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Arial", &g_pFont );
//		}



}
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);
}



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
}

Bitte geht nochmal genau drüber und schaut ob noch irgend ein Fehler zu finden ist=)
10/31/2009 23:08 ^darkwing#20
Quote:
Originally Posted by iMaxxx View Post
Code:
pEndScene = ( EndScene_t )DetourFunc((PBYTE)((DWORD)hModule + 0x871A0)[B]/*0x4FDD71CC*/[/B],(PBYTE)hkEndScene, 5);
//  wtf? --> /*0x4FDD71CC*/
Bitte geht nochmal genau drüber und schaut ob noch irgend ein Fehler zu finden ist=)
Ein bischen Eigeninitiative würde nicht schaden..
11/01/2009 16:54 Lawliet#21
Quote:
Originally Posted by ^darkwing View Post
Ein bischen Eigeninitiative würde nicht schaden..
Was meinst du damit?
11/02/2009 18:49 c0nr4id3r#22
Schon mal getestet, ob die DLL überhaupt funktioniert? Ich hab mit CodeBlocks und dem MingW das Problem gehabt, dass die DLL gar nicht lief, die Lösung war ein extern "C".
11/02/2009 21:56 Bot_interesierter#23
Quote:
Originally Posted by c0nr4id3r View Post
Schon mal getestet, ob die DLL überhaupt funktioniert? Ich hab mit CodeBlocks und dem MingW das Problem gehabt, dass die DLL gar nicht lief, die Lösung war ein extern "C".
Dazu solltest du auch sagen das das extern "C" vor die DllMain gehört :P
11/03/2009 16:54 c0nr4id3r#24
Das hät er schon noch slebst gemerkt :D
11/03/2009 21:05 Lawliet#25
ja
11/06/2009 17:45 c0nr4id3r#26
Geht es?
11/07/2009 14:18 Lawliet#27
Habe es noch nicht versucht (keine Zeit...)...
Aber ich denke das der Fehler er in diese Zeile liegt o0
pEndScene = ( EndScene_t )DetourFunc((PBYTE) (DWORD)hModule + 0x871A0/*0x4FDD71CC*/,(PBYTE)hkEndScene, 5);
11/08/2009 18:16 c0nr4id3r#28
Also bei mir klappt der Hook so wie im Tutorial beschrieben:
Code:
pEndScene = ( EndScene_t )DetourFunc((PBYTE) 0x4FDD71B0,(PBYTE)hkEndScene, 5);
Das Offset ist bei mi richtig, musst deins nur anpassen.
11/09/2009 16:42 Lawliet#29
ok ich werds versuchen!