|
You last visited: Today at 17:37
Advertisement
d3d9.dll endscene
Discussion on d3d9.dll endscene within the General Coding forum part of the Coders Den category.
10/04/2010, 17:52
|
#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?
|
|
|
10/04/2010, 18:46
|
#2
|
elite*gold: 20
Join Date: Jan 2006
Posts: 539
Received Thanks: 228
|
Endscene wird nicht exportiert. Du musst das Interface im Direct3DCreate anpassen.
|
|
|
10/04/2010, 18:58
|
#3
|
elite*gold: LOCKED
Join Date: Aug 2006
Posts: 3,292
Received Thanks: 866
|
Quote:
Originally Posted by rEdoX
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 ;<
|
|
|
10/04/2010, 19:06
|
#4
|
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.
|
|
|
10/04/2010, 19:07
|
#5
|
elite*gold: LOCKED
Join Date: Aug 2006
Posts: 3,292
Received Thanks: 866
|
Quote:
Originally Posted by minecrawler
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
|
|
|
10/04/2010, 20:18
|
#6
|
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.
|
|
|
10/04/2010, 20:23
|
#7
|
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
|
|
|
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
Man findet Funktionen doch auch nicht per String Search o.ô
|
Ich meinte damit Alt+T also Search->Search.
Quote:
Originally Posted by MrSm!th
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
|
|
|
10/04/2010, 21:10
|
#9
|
elite*gold: 20
Join Date: Jan 2006
Posts: 539
Received Thanks: 228
|
Quote:
Originally Posted by MrSm!th
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
|
|
|
10/04/2010, 21:42
|
#10
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
|
Quote:
Originally Posted by rEdoX
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
|
|
|
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
|
|
|
10/04/2010, 23:20
|
#12
|
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);
|
|
|
10/05/2010, 08:15
|
#13
|
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
|
|
|
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 -.-'
|
|
|
10/08/2010, 16:17
|
#15
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
|
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
|
|
|
 |
|
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.
|
|