Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding
You last visited: Today at 17:37

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

Advertisement



d3d9.dll endscene

Discussion on d3d9.dll endscene within the General Coding forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: LOCKED
Join Date: Aug 2006
Posts: 3,292
Received Thanks: 866
d3d9.dll endscene

Huhu,

In meiner d3d9.dll scheint es keine endscene zu geben, ich habe mit IDA unter Functions den String "endscene" gesucht und er sagt mir jedes mal "string not found...".

Ich hab mir jetzt auch schon eine aus'm Jahr 2002 geladen und IDA findet da komischer weiße auch nichts.

Hat wer vllt nen lösungs vorschlag?
scenebase is offline  
Old 10/04/2010, 18:46   #2
 
rEdoX's Avatar
 
elite*gold: 20
Join Date: Jan 2006
Posts: 539
Received Thanks: 228
Endscene wird nicht exportiert. Du musst das Interface im Direct3DCreate anpassen.
rEdoX is offline  
Thanks
1 User
Old 10/04/2010, 18:58   #3
 
elite*gold: LOCKED
Join Date: Aug 2006
Posts: 3,292
Received Thanks: 866
Quote:
Originally Posted by rEdoX View Post
Endscene wird nicht exportiert. Du musst das Interface im Direct3DCreate anpassen.
Danke dir erstmal für die Antwort, nur hab ich echt keine Ahnung wie ich das anstellen soll ;<
scenebase is offline  
Old 10/04/2010, 19:06   #4

 
マルコ's Avatar
 
elite*gold: 1329
Join Date: Jun 2009
Posts: 1,873
Received Thanks: 960
Du hast doch irgendwie ein Interface gemacht...jezz nimmst du die Parameter und änderst sie ab
Wenn du was nimma brauchst: Destructor und gut is.
マルコ is offline  
Old 10/04/2010, 19:07   #5
 
elite*gold: LOCKED
Join Date: Aug 2006
Posts: 3,292
Received Thanks: 866
Quote:
Originally Posted by minecrawler View Post
Du hast doch irgendwie ein Interface gemacht...jezz nimmst du die Parameter und änderst sie ab
Wenn du was nimma brauchst: Destructor und gut is.
nein eben nicht :P da ich endscene hooken will bzw. es probieren
scenebase is offline  
Old 10/04/2010, 20:18   #6
 
rEdoX's Avatar
 
elite*gold: 20
Join Date: Jan 2006
Posts: 539
Received Thanks: 228
Du musst Direct3DCreate9 hooken und das Interface, welches übergeben wird ändern. Mit Hilfe von Google solltest Du weiter Infos finden.
rEdoX is offline  
Old 10/04/2010, 20:23   #7


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Man findet Funktionen doch auch nicht per String Search o.ô

Naja, für die EndScene gibts ne sehr beliebte Taktik, nämlich eine Pattern Search nach der VTable von ööhm...nun hab ich den Namen der Klasse vergessen, die D3D Klassennamen sind alle so lang... <.<

Jedenfalls solltest du die Funktion eben per Pattern Search suchen.

Hier mal der Code, den habe ich irgendwann mal so übernommen, da er ganz gut passt ;O
Credits gehen an jemanden von GD, soweit ich weiß.

Code:
bool bDataCompare(const BYTE* pData, const BYTE* bMask, const char* szMask)
{
	for(;*szMask;++szMask,++pData,++bMask)
		if(*szMask=='x' && *pData!=*bMask )
			return false;
	return (*szMask) == NULL;
}


DWORD dwFindPattern(DWORD dwAddress,DWORD dwLen,BYTE *bMask,char * szMask)
{
	for(DWORD i=0; i < dwLen; i++)
	{
		if( bDataCompare( (BYTE*)( dwAddress+i ),bMask,szMask) )
			return (DWORD)(dwAddress+i);
	}
	return 0;
}

void HookD3D()
{
	HMODULE hModule = NULL;
	while(!hModule)
	{
		hModule = GetModuleHandleA("d3d9.dll") ;
		Sleep(100) ;
	}

	DWORD* vmt = 0 ;
	DWORD FoundPattern = dwFindPattern((DWORD)hModule,
		0x128000, 
		(PBYTE)"\xC7\x06\x00\x00\x00\x00\x89\x86\x00\x00\x00\x00\x89\x86", 
		"xx????xx????xx") ;

	vmt = (DWORD*)(FoundPattern+2);

	EndSceneAddress = vmt[42] ; //endscene ist die 42. funktion in der vtable
}
Quote:
Du musst Direct3DCreate9 hooken und das Interface, welches übergeben wird ändern. Mit Hilfe von Google solltest Du weiter Infos finden.
Das finde ich persöhnlich unschön, da man dann die Dll injecten muss, bevor das D3D Device erstellt wird und man hat mehrere Hooks + viel mit dem Stack und Lowlevel Kram zutun.
Ich mag zwar Lowlevel Kram, aber auf Dauer ist die Methode mit der Pattern Search doch komfortabler ;O
MrSm!th is offline  
Thanks
2 Users
Old 10/04/2010, 20:43   #8
 
elite*gold: LOCKED
Join Date: Aug 2006
Posts: 3,292
Received Thanks: 866
Quote:
Originally Posted by MrSm!th View Post
Man findet Funktionen doch auch nicht per String Search o.ô
Ich meinte damit Alt+T also Search->Search.

Quote:
Originally Posted by MrSm!th View Post
Code:
bool bDataCompare(const BYTE* pData, const BYTE* bMask, const char* szMask)
{
	for(;*szMask;++szMask,++pData,++bMask)
		if(*szMask=='x' && *pData!=*bMask )
			return false;
	return (*szMask) == NULL;
}


DWORD dwFindPattern(DWORD dwAddress,DWORD dwLen,BYTE *bMask,char * szMask)
{
	for(DWORD i=0; i < dwLen; i++)
	{
		if( bDataCompare( (BYTE*)( dwAddress+i ),bMask,szMask) )
			return (DWORD)(dwAddress+i);
	}
	return 0;
}

void HookD3D()
{
	HMODULE hModule = NULL;
	while(!hModule)
	{
		hModule = GetModuleHandleA("d3d9.dll") ;
		Sleep(100) ;
	}

	DWORD* vmt = 0 ;
	DWORD FoundPattern = dwFindPattern((DWORD)hModule,
		0x128000, 
		(PBYTE)"\xC7\x06\x00\x00\x00\x00\x89\x86\x00\x00\x00\x00\x89\x86", 
		"xx????xx????xx") ;

	vmt = (DWORD*)(FoundPattern+2);

	EndSceneAddress = vmt[42] ; //endscene ist die 42. funktion in der vtable
}
Danke, werd ich mal ausprobieren
scenebase is offline  
Old 10/04/2010, 21:10   #9
 
rEdoX's Avatar
 
elite*gold: 20
Join Date: Jan 2006
Posts: 539
Received Thanks: 228
Quote:
Originally Posted by MrSm!th View Post
Das finde ich persöhnlich unschön, da man dann die Dll injecten muss, bevor das D3D Device erstellt wird und man hat mehrere Hooks + viel mit dem Stack und Lowlevel Kram zutun.
Ich mag zwar Lowlevel Kram, aber auf Dauer ist die Methode mit der Pattern Search doch komfortabler ;O
Um zu verstehen was hinter all dem steck ist ein Hook auf das erstellen des Devices am besten, da man dann die Zusammenhänge auch selber ziehen kann (z.b. verstehen wieso dieser Pattern zum gewünschten Ergebnis führt).

Patter Search finde ich persönlich unschön, ist einfach zuviel Overhead. Wobei es zwei gravierende Vorteile hat: Erstens lässt sich das Device auch nach dem erstellen Hooken und zweitens ist es Spiel unabhängig.

Meine persönliche Lieblings Methode ist es den Pointer auf das Interface zu finden und diesen dann zu Verwenden. Ist zwar Spielabhängig, aber für mich die einzig "saubere" Methode. Wenn man bei Hooks überhaupt von sauber sprechen kann
rEdoX is offline  
Old 10/04/2010, 21:42   #10


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Quote:
Originally Posted by rEdoX View Post
Um zu verstehen was hinter all dem steck ist ein Hook auf das erstellen des Devices am besten, da man dann die Zusammenhänge auch selber ziehen kann (z.b. verstehen wieso dieser Pattern zum gewünschten Ergebnis führt).

Patter Search finde ich persönlich unschön, ist einfach zuviel Overhead. Wobei es zwei gravierende Vorteile hat: Erstens lässt sich das Device auch nach dem erstellen Hooken und zweitens ist es Spiel unabhängig.

Meine persönliche Lieblings Methode ist es den Pointer auf das Interface zu finden und diesen dann zu Verwenden. Ist zwar Spielabhängig, aber für mich die einzig "saubere" Methode. Wenn man bei Hooks überhaupt von sauber sprechen kann
Ist natürlich Geschmackssache.

Was den Overhead angeht, kann ich das aber nicht verstehen, ich finde es da eher auf Dauer zu viel Arbeit, sowas immer neu zu suchen und wie du schon sagst, es hat den Vorteil, dass Dlls im Nachhinein auch noch hooken können, was für mich zb. ganz entscheident ist, vor allem, da ich Dlls manchmal nicht direkt am Start laden lassen kann.
Ob man das erstellen des Devices besser nachvollziehen kann und erst Recht, warum die Pattern Search zum Ergebnis führt, wenn man die D3DCreateDevice oder wie sie heißt hookt, um dann an den Pointer zu kommen und dann wieder an nen Pointer, um dann zur EndScene Adresse zu kommen... :/
Sei mal dahingestellt, kommt auf den Anwender an Das ist eher der Fall, wenn man sich das im Debugger auch mal ansieht, was man da hookt

Naja, bei mir hat die Hook Methode nicht ganz geklappt, ist natürlich kein Argument, da es sicher nach n bisschen Debug Zeit geklappt hätte, aber ich mags eben bequehmer und ich kenne und verstehe ja die Theorie, die dahinter steckt
MrSm!th is offline  
Old 10/04/2010, 21:48   #11
 
elite*gold: LOCKED
Join Date: Aug 2006
Posts: 3,292
Received Thanks: 866
So ich habe jetzt einfach mal ein bisssle rumprobiert und irgendwie gibt's da ein kleines Problem, ich wollte mir zum Test einfach mal die Addy in einer MessageBox ausgeben lassen.

Code:
void HookD3D()
{
	HMODULE hModule = NULL;
	while(!hModule)
	{
		hModule = GetModuleHandleA("d3d9.dll") ;
		Sleep(100) ;
	}

	DWORD* vmt = 0 ;
	DWORD FoundPattern = dwFindPattern((DWORD)hModule,
		0x128000,
		(PBYTE)"\xC7\x06\x00\x00\x00\x00\x89\x86\x00\x00\x00\x00\x89\x86",
		"xx????xx????xx") ;

	vmt = (DWORD*)(FoundPattern+2);

	//EndSceneAddress = vmt[42]; //endscene ist die 42. funktion in der vtable
     MessageBox(0, "INJECTED", (char*)vmt[42], 0); // so geht es nicht, nur wenn ich da einen normalen Text hinschreibe wie z.b. "HI".
}
Das ganze na klar als .dll und ich injecte es zum Test in Fifa 11.
Wie komme ich jetzt an die Addy? :O
scenebase is offline  
Old 10/04/2010, 23:20   #12


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Ähm...kannst du die Sprache überhaupt?

Hast du nicht noch vor kurzem nach Grundlagen gefragt?
Warum fängst du jetzt mit D3D an? o.ô

Du kannst nicht einfach DWORD in char* casten, das hätte auch in nem Crash enden können.

Code:
buf[10];
sprintf(buf,"%X",vmt[42]);
MessageBoxA(0,buf,0,0);
MrSm!th is offline  
Thanks
1 User
Old 10/05/2010, 08:15   #13
 
P-a-i-n's Avatar
 
elite*gold: 0
Join Date: Nov 2009
Posts: 1,258
Received Thanks: 396
FiFa ist doch von EA da kannste auch die "RendDX9.dll" nehmen, da ist auch alles drin wie EndScene findest du im Startpfad von der exe die DLL
da sind dann auch alle weitern Drawbefehle drin die Fifa aufruft
wie Viewdistance,Drawhud,Playermanager,Sky etc aufjedenfall kannste mit in dieser DLL total das Spiel verändern wie den Rasenfärben etc
da brauchste nicht wenn du das vorhast mit den Stridelogger arbeiten und alles in DIP umfärben was auch geht

aber wie gesagt die DLL haben nur EA-Spiele

hab mal für die ein bild gemacht, die Zeile die makiert ist dieses "DrawSkyDome" ist z.B für NoSky kannst auch den Himmel umfärben damit
das ist nur als Bsp gedacht wie du FiFA noch so verändern kannst, ich vergehe mich zurzeit an BFH daher weiß ich das, dazu mußte dir aber den Rendererpointer holen oder du schreibst dir eine eigene Klasse bzw Structur



Wie schon gesagt, ich zeig ir nur wie du dann noch eine Sachen verändern kannst ohne es dir schwer zumachen
daher versuch dich dran EA-Spiele sind die besten zum Lernen, da die RDX9.dll vieles vorgibt
P-a-i-n is offline  
Thanks
1 User
Old 10/08/2010, 16:05   #14
 
elite*gold: LOCKED
Join Date: Aug 2006
Posts: 3,292
Received Thanks: 866
So, danke dir erstmal P-a-i-n.

Nur hab ich jetzt nen Problem, sobald ich Injecte stürzt mein Spiel ab (egal ob mafia2,fifa,crossfire).

Mein code der DLL sieht so aus:


€: Liegt nicht an der Draw Rect funktion, komisch -.-'
scenebase is offline  
Old 10/08/2010, 16:17   #15


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Code:
#pragma once
ist unnötig in cpp files, braucht man nur in headern o.ô

warum nimmt kaum einer MS Detours, das ist viel sicherer und man muss keine Länge angeben o.ô

Code:
drawRectangle(int x, int y, int width, int height, int r, int g, int b)
{
	D3DCOLOR Color;
	D3DRECT Rectangle = { x, 
						  y, 
						  x + width, 
						  y + height 
						}; 

	Color = D3DCOLOR_XRGB(r, g, b);

	getDevice()->Clear(1, &Rectangle, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, Color, 0,  0);
geht bei mir

credits gehen an den autor des d3d menüs, aus dessen code ich das habe
MrSm!th is offline  
Thanks
1 User
Reply


Similar Threads Similar Threads
D3D EndScene Hook Tutorial Frage
10/03/2011 - General Coding - 5 Replies
Hey, ich habe mir das Tutorial von purple.d1amond angeschaut, und habe als Test ( da ich noch nie ne D3D Funktion gehooked habe ) mal den Source aus dem Tut abgetippt und wollte ihn testen. Ich habe die .dll anschließend mit Winject in den Prozess von wow injected. Doch es passiert nichts, da wo eigentlich ein Rechteck sein sollte ( oben Rechts ) ist nichts :D ) Habe ich was falsch gemacht ? : #include "stdafx.h" #include <windows.h> #include <cstdio> #include <d3d9.h> #include...
d3d9.dll EndScene ?
07/19/2010 - General Coding - 7 Replies
Hey, ich wollte mal fragen ob es noch möglich ist die Funktion EndScene aus der d3d9.dll zu hooken. Weil bei mir findet IDA die Funktion EndSene nicht... Ich hab Windows 7 64 bit Professional. (In der d3d10.dll ist auch keine Funktion die EndSene heißt) mfG
d3d9 Help?
01/20/2010 - General Coding - 1 Replies
I need help on Operation 7 EU my chames are bugged Wehn i take it one, the Gun/Scope is full with the Chames so u cant sniping -.- anyone can help me? PLZ :D My code (not full only define and my chames code): #define Player ((uiStride == 28))



All times are GMT +1. The time now is 17:38.


Powered by vBulletin®
Copyright ©2000 - 2025, 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 ©2025 elitepvpers All Rights Reserved.