Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding
You last visited: Today at 12:34

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



D3D Hook Problem

Discussion on D3D Hook Problem within the General Coding forum part of the Coders Den category.

Reply
 
Old   #1
 
ZackBlack's Avatar
 
elite*gold: 0
Join Date: Aug 2010
Posts: 334
Received Thanks: 79
D3D Hook Problem

Hi,
ich habe jetzt versucht nen D3D Hook zu schreiben, nachdem ich das Tutorial von purple diamond gelesen habe: . Leider hab ich echt keine Ahnung was ich hier falsch mache. Bevor ich vor die DllMain Funktion extern "C" hinzugefügt habe, lies sich die Dll nicht mal injecten. Jetzt funktioniert das, allerdings wird kein Rechteck gezeichnet. Die Adresse hab ich auch wie im Tutorial mit IDA bekommen. Wäre wirklich sehr nett wenn sich das jemand anschauen könnte. Danke.
Code:
#include <Windows.h>
#include <cstdio>
#include <d3d9.h>
#include <d3dx9.h>

#pragma once
#pragma comment(lib, "d3d9.lib")
#pragma comment(lib, "d3dx9.lib")

typedef HRESULT (__stdcall* EndScene_t)(LPDIRECT3DDEVICE9);
EndScene_t pEndScene;

const D3DCOLOR txtBlack = D3DCOLOR_ARGB(255,255,255,255); // Hoffentlich schwarz ;)

void *DetourFunc(BYTE *src, const BYTE *dst, const int len) //Gamedeception Hook Funktion
{
	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);
}


HRESULT __stdcall hkEndScene(LPDIRECT3DDEVICE9 pDevice) //Die neue Funktion, danach wird wieder zur normalen returnt.
{
	DrawRect(pDevice, 10, 10, 200, 200, txtBlack); //Rechteck zeichnen.
	return pEndScene(pDevice);

}

void InitHook() //Wird in einem neuen Thread gestartet.
{
	HMODULE hModule = NULL;
	while(!hModule)
	{
		hModule = GetModuleHandleA("d3d9.dll"); //Handle zur Dll holen, wird nicht gebraucht, stellt aber sicher das d3d9 läuft.
		Sleep(100); //Warten und dann wieder prüfen obs läuft.
	}

	pEndScene = (EndScene_t)DetourFunc((PBYTE) 0x7543279F, (PBYTE)hkEndScene, 5); //Hier wird gehookt ^^
}

extern "C"
int WINAPI DllMain(HINSTANCE hInst, DWORD reason, LPVOID reserverd)
{
	switch(reason)
	{
	case DLL_PROCESS_ATTACH:
		CreateThread(0, 0, (LPTHREAD_START_ROUTINE)InitHook, 0, 0, 0);
		break;
	}
	return true;
}
mfg,
ZackBlack
ZackBlack is offline  
Old 11/01/2011, 20:59   #2


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
Quote:
void InitHook()
Ein Thread hat den Typ DWORD WINAPI InitHook(LPVOID param).


Quote:
const D3DCOLOR txtBlack = D3DCOLOR_ARGB(255,255,255,255);
Schwarz wäre 255, 0, 0, 0.
Außerdem reicht hier das RGB Makro, denn die Zeichen-Methode mit Clear unterstützt keine Transparenz.

Hast du daran gedacht, die EndScene Adresse anzupassen?
Versuch doch mal durch MessageBoxen erstmal zu testen, ob dein Hook überhaupt aufgerufen wird.
MrSm!th is offline  
Thanks
1 User
Old 11/01/2011, 21:57   #3
 
xNopex's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
Quote:
Versuch doch mal durch MessageBoxen erstmal zu testen, ob dein Hook überhaupt aufgerufen wird.
Dich mögen zahllose Blitze treffen und brutzeln

>>
xNopex is offline  
Thanks
1 User
Old 11/01/2011, 22:51   #4
 
ZackBlack's Avatar
 
elite*gold: 0
Join Date: Aug 2010
Posts: 334
Received Thanks: 79
Vielen Dank für die Antworten. Ich werde das dann wahrscheinlich erst übermorgen testen können. Auf die Idee mit MessageBox und Debug String bin ich nicht gekommen, ich wollte das mit Breakpoints machen, hab ich dann aber nicht geschafft das zu debuggen.. werde das mit der Debug String Funktion machen, danke. Edit: Fast den Thanksbutton vergessen xD
ZackBlack is offline  
Old 11/02/2011, 01:29   #5
 
elite*gold: 0
Join Date: Apr 2006
Posts: 6,597
Received Thanks: 1,830
Quote:

Versuch doch mal durch MessageBoxen erstmal zu testen, ob dein Hook überhaupt aufgerufen wird.
das hab ich mal bei meinem ersten globalen keyboard hook gemacht. Ja kann ich dir nur empfehlen lol
Medix is offline  
Old 11/02/2011, 01:40   #6
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
in diamonds tut wird ganz am ende "foundbygordon" vorgestellt.
die solltest du benutzen, dann gehts auch...
Code:
tempadd = dwFindPattern((DWORD)hModule, 0x128000, (PBYTE)"\xC7\x06\x00\x00\x00\x00\x89\x86\x00\x00\x00\x00\x89\x86", "xx????xx????xx");
memcpy(&VTableStart, (void*)(tempadd+2), 4);
dwEndScene = VTableStart[42];
pEndScene = (EndScene_t) DetourFunc((PBYTE) dwEndScene, (PBYTE)hkEndScene, 5);
Mfg
SilverDeath
Dr. Coxxy is offline  
Thanks
1 User
Old 11/02/2011, 01:53   #7


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
Quote:
Originally Posted by xNopex View Post
Dich mögen zahllose Blitze treffen und brutzeln

>>
Nein. Ich mag MessageBoxen lieber.

Und die VTable Methode hat auch ihre Nachteile, ist aber einer statischen Adresse deutlich vorzuziehen.
MrSm!th is offline  
Old 11/02/2011, 03:15   #8
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
ich mag züge:

Code:
void add_log(char* format, ...)
{
	HANDLE filehandle;
	DWORD dwReadBytes;
	char buffer[2048];
	char writebuffer[2048];
	va_list args;
	va_start(args, format);
	vsprintf (buffer, format, args);
	filehandle = CreateFile(L"IchMagZuege.txt", GENERIC_WRITE, 0, 0, OPEN_ALWAYS, 0, 0);
	SetFilePointer(filehandle, 0, 0, FILE_END);
	char date[18];
	_strdate(date);
	date[8] = ' ';
	_strtime(date+9);
	sprintf_s(writebuffer, 2048, "Log Added (%s): %s\r\n", date, buffer);
	WriteFile(filehandle, writebuffer, strlen(writebuffer), &dwReadBytes, 0);
	CloseHandle(filehandle);
}
Dr. Coxxy is offline  
Old 11/02/2011, 11:09   #9


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
Mit Standard-C++ würdes du das ganze in der Hälfte der Zeilen schaffen.

Btw. habe ich deswegen MessageBoxen empfohlen, weil sie den Thread blocken.
So kann man zb. auch genau sehen, wann was passiert und in Ruhe alles auswerten, bis man dann weiter drückt.
Das bringt weder OutputDebugString noch ein LogFile.
MrSm!th is offline  
Thanks
1 User
Old 11/02/2011, 12:25   #10
 
ZackBlack's Avatar
 
elite*gold: 0
Join Date: Aug 2010
Posts: 334
Received Thanks: 79
Mir der VTabel Methode funktioniert es problemlos, Danke.
ZackBlack is offline  
Old 11/02/2011, 14:56   #11
 
Xenox3's Avatar
 
elite*gold: 169
Join Date: Jun 2010
Posts: 663
Received Thanks: 1,138
Quote:
Quote:
Zitat:
void InitHook()
Ein Thread hat den Typ DWORD WINAPI InitHook(LPVOID param).
Das wirst du nie durchsetzen können

Ich glaube dieser Satz steht in jedem Thema, welches sich mit "D3D-Hack-Problem" betitelt.
Xenox3 is offline  
Old 11/02/2011, 17:53   #12


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
Bei jedem Hack Problem um genau zu sein.
MrSm!th is offline  
Old 11/02/2011, 18:28   #13
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
hey, ich benutze auch strikt DWORD WINAPI und kann es nicht ausstehen wenn andere da einfach void hinklatschen...
nervt fast so sehr wie die leute, die keine geschweiften klammern bei if (...) einzeilencodebefehlen benutzen-.-
Dr. Coxxy is offline  
Old 11/02/2011, 20:40   #14


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
Da bin ich dann wohl schuldig, zumindest, wenn es um simple Funktionsaufrufe geht und keine komplexen if-Abfragen oder komplexe Funktionsaufrufe ;O
Sehe kein Problem bei
Code:
if(a > 10)
    a = 10
Wenn man weiß, was man tut, ist es ja nichtmal so tragisch, da es eh keine Probleme verursachen kann, solange man wenigstens die Calling Convention einhält.
Aber das Problem ist halt, dass es irgendwelche Leute, die mal Tutorials (meist für Warrock Hacks) veröffentlicht haben, aus Faulheit mit void gemacht haben und es dann alle Anfänger so gelernt haben und glauben, es sei richtig :<
Und da sie eben nicht wissen, dass es eigentlich falsch ist, eignen sie sich so direkt nen schlechten Stil an.

Aber naja, ist ja hier nicht das Thema.
MrSm!th is offline  
Reply

Tags
d3d hook problem


Similar Threads Similar Threads
D3D Hook WriteMem Problem
02/01/2011 - General Coding - 45 Replies
Hallo Epvp, Hab ein problem bei der WriteMem Funktion, aus dem D3D Hooking Tutorial von purple.d1amond. die Funktion sieht folgendermaßen aus: void WriteMem(DWORD dwOffset, DWORD dwValue, int len) { unsigned long Protection;
Urban WR D3D Hook PROBLEM!!
06/01/2010 - WarRock - 11 Replies
Hi, Bei dem Urban WR D3D Hook Hack ( http://www.elitepvpers.com/forum/warrock-hacks-bots -cheats-exploits/589000-warrock-urban-wr-d3d-hook- undetected-30-05-2010-a.html ) habe ich ein Problem. Ich habe alles entpackt und extrahiert aber wenn ich den Injector öffne steht da " Auf das angegebene Gerät , bzw. den Pfad oder die Datei kann nicht zugegriffen werden. Sie verfügen eventuell nicht über ausreichende Berechtigungen, um auf das Element zugreifen zu können" !!!! Ich bin aber Administrator...
[C++]D3D hook Problem
11/09/2009 - C/C++ - 28 Replies
#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
C++ hook Problem
10/19/2009 - C/C++ - 15 Replies
Also ich habe mir einen Keyboardhook geschrieben und habe das programm gestartet und es wieder beendet ohne den hook unzuhooken und nun geht meine tastatur nicht mehr (auch im bios nicht mehr) tja ich denke ,dass der hook immernoch läuft und ich bräuchte so eine art hook manager . Oder einfach ein stückcode,das mir alles unhooked . mein code : void MsgLoop() { MSG message;
BiG problem With hook edx33
07/28/2009 - Silkroad Online - 8 Replies
I hook edx33 and now 80 % of my programs no start :rtfm: and too unhook don't start im into 64X bit vista windows pls fast reply how to fix them



All times are GMT +2. The time now is 12:34.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.