|
You last visited: Today at 13:19
Advertisement
D3D-Hook Absturz
Discussion on D3D-Hook Absturz within the General Coding forum part of the Coders Den category.
12/06/2009, 19:03
|
#1
|
elite*gold: 0
Join Date: Nov 2008
Posts: 17
Received Thanks: 0
|
D3D-Hook Absturz
Hi Leute,
ich hab ein kleines Problem mit meinem D3D-Hook, wenn ich die DLL in Counter Strike, oder irgend eine andere D3D-Anwendung injecte stürzt das Programm sofort ab.
Die EndScene Adresse in der D3D9.dll habe ich schon gefunden:
Hier der Source Code:
Code:
#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;
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)0x74A447AF,(PBYTE)hkEndScene, 5);
}
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
}
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);
}
Wenn der Code funktionieren würde, sollte links oben ein pinkes Viereck zu sehen sein, nur leider macht er das nicht.
Ich hoffe ihr könnt mir helfen, danke schon mal im vorraus.
|
|
|
12/06/2009, 19:18
|
#2
|
elite*gold: 115
Join Date: Oct 2007
Posts: 9,390
Received Thanks: 12,345
|
Du kannst nicht einfach die absolute Adresse von EndScene nehmen, weil sie von dem Handle der d3d9.dll abhängig ist und diese nach jedem Programmstart unterschiedlich ist. Stattdessen musst du das Handle auslesen (was du ja schon machst) und dazu dann das Offset von EndScene addieren.
|
|
|
12/06/2009, 19:22
|
#3
|
elite*gold: 0
Join Date: Nov 2008
Posts: 17
Received Thanks: 0
|
ah, danke werds gleich mal versuchen..
|
|
|
12/06/2009, 19:28
|
#4
|
elite*gold: 0
Join Date: Nov 2008
Posts: 17
Received Thanks: 0
|
Ich habs jetzt so geändert:
pEndScene = ( EndScene_t )DetourFunc((PBYTE)(DWORD)hModule+0x74a447af,(PBYT E)hkEndScene, 5);
nua leider stürzt das Programm nach der Injection immer noch ab.
|
|
|
12/06/2009, 19:31
|
#5
|
elite*gold: 115
Join Date: Oct 2007
Posts: 9,390
Received Thanks: 12,345
|
0x74a447af beschreibt ja auch die absolute Adresse.
Handle + Offset = absolute Adresse
|
|
|
12/06/2009, 19:35
|
#6
|
elite*gold: 0
Join Date: Nov 2008
Posts: 17
Received Thanks: 0
|
wie komme ich von der absoluten Adresse auf die des Offsets? (sry steh grad irgendwie voll auf der leitung)
|
|
|
12/06/2009, 19:43
|
#7
|
elite*gold: 115
Join Date: Oct 2007
Posts: 9,390
Received Thanks: 12,345
|
Indem du das Handle von d3d9.dll von der Adresse abziehst. 
Das Offset wäre dann in deinem Fall irgendwas wie 0x047AF, 0x147AF, 0x247AF, ...
|
|
|
12/06/2009, 19:52
|
#8
|
elite*gold: 0
Join Date: Nov 2008
Posts: 17
Received Thanks: 0
|
So müsste es dann richtig sein:
DWORD dwEndScene
dwEndScene=0x74A447AF-(DWORD)hModule
pEndScene = ( EndScene_t )DetourFunc((PBYTE)dwEndScene,(PBYTE)hkEndScene, 5);
oder irre ich mich da?
|
|
|
12/06/2009, 20:09
|
#9
|
elite*gold: 115
Join Date: Oct 2007
Posts: 9,390
Received Thanks: 12,345
|
Das davor war richtig, nur dass du das 0x74A447AF durch das Offset ersetzen musst.
|
|
|
12/06/2009, 20:18
|
#10
|
elite*gold: 0
Join Date: Nov 2008
Posts: 17
Received Thanks: 0
|
Offset=absolute Adresse (0x74A447AF) minus Handle (HModule)
pEndScene = ( EndScene_t )DetourFunc((PBYTE)(DWORD)hModule+Offset,(PBYTE)hk EndScene, 5);
das ist ja dann wieder 0x74A447AF? oder doch nicht??
|
|
|
12/06/2009, 20:21
|
#11
|
elite*gold: 0
Join Date: Sep 2009
Posts: 148
Received Thanks: 31
|
PHP Code:
DWORD dwOffset dwOffset = 0x74A447AF - (DWORD)hModule cout << dwOffset; //Offset aufschreiben oder merken z.B. 0x1CE0B
Einmal machen, dann weißt das Offset. Danach:
PHP Code:
pEndScene = ( EndScene_t )DetourFunc((PBYTE)((DWORD)hModule+0x1CE0B),(PBYTE)hk EndScene, 5);
|
|
|
12/06/2009, 20:55
|
#12
|
elite*gold: 115
Join Date: Oct 2007
Posts: 9,390
Received Thanks: 12,345
|
Quote:
Originally Posted by gametester123
Offset=absolute Adresse (0x74A447AF) minus Handle (HModule)
pEndScene = ( EndScene_t )DetourFunc((PBYTE)(DWORD)hModule+Offset,(PBYTE)hk EndScene, 5);
das ist ja dann wieder 0x74A447AF? oder doch nicht??
|
Du vergisst, dass das Handle nach jedem Programmstart unterschiedlich ist. Die absolute Adresse war nur in dem einen Fall 0x74A447AF.
Nur das Offset bleibt immer gleich.
|
|
|
12/06/2009, 21:09
|
#13
|
elite*gold: 0
Join Date: Nov 2008
Posts: 17
Received Thanks: 0
|
ich habs jetzt so:
DWORD dwOffset;
dwOffset = 0x74A447AF - (DWORD)hModule;
pEndScene = ( EndScene_t )DetourFunc((PBYTE)(DWORD)hModule+dwOffset,(PBYTE) hkEndScene, 5);
als dwOffset kommt 77219759 raus. (kann das sein?)
wenn ichs wieder injecte dann stürzt es immer noch ab..
//EDIT
dwOffset ist Dezimal in Hex ist das dann 49A47AF
|
|
|
12/07/2009, 03:10
|
#14
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
|
Quote:
Originally Posted by gametester123
ich habs jetzt so:
DWORD dwOffset;
dwOffset = 0x74A447AF - (DWORD)hModule;
wenn ichs wieder injecte dann stürzt es immer noch ab..
|
Quote:
Originally Posted by Disconnect
Du vergisst, dass das Handle nach jedem Programmstart unterschiedlich ist. Die absolute Adresse war nur in dem einen Fall 0x74A447AF.
Nur das Offset bleibt immer gleich.
|
|
|
|
12/07/2009, 15:34
|
#15
|
elite*gold: 0
Join Date: Sep 2009
Posts: 148
Received Thanks: 31
|
Bei mir ändert sich die Adresse des ModulHandles nach jedem Systemneustart ;x
Also muss es einen anderen Grund geben. Ich tippe mal auf die Injection.
|
|
|
 |
|
Similar Threads
|
pc absturz
05/25/2010 - Technical Support - 2 Replies
also ich bin grad am spielen dann stürzt mein pc ab dann auf ein mal sartet er sich neu dann kommt immer wen ich ih starte reboot and select proper boot device or insert boot media in selected boot device and press a key
|
Absturz
04/04/2010 - Technical Support - 7 Replies
hey leute ich und mein freund sind dabei einen privat server zu erstellen.Leider stürzt er bei mir immer ab aber bei meinem freund nicht.Wir haben beide vista 32 bit. Hat jemand ne lösung?
|
ICQ 5.1 Erlaubnisanfrage - Absturz - weg
09/25/2008 - Off Topic - 5 Replies
Hey,
habe gerade mein ICQ gestartet, waren auch 2 Anfragen bei, als ich die geöffnet habe, stürzte ICQ leider ab. Jetzt sind die weg, allerdings waren das vermutlich sehr wichtige Anfragen .. :)
Kann man sich die irgendwo nochmal angucken? Weil so langsam zehrt ICQ an meiner nervlichen Verfassung.
Grüße
|
Absturz vom pc
08/02/2008 - Technical Support - 9 Replies
Hallo weis jemand was das bedeutet ?
STOP: 0x0000007E ?
mfg
|
Absturz
07/24/2008 - Metin2 - 10 Replies
Hallo!
Ich war letztens mitten im Spiel und plötzlich erscheint ein Fenster, wo 6 Fragezeichen in 2 3er Gruppen stehen (??? ???) und darunter Ja Nein. Wenn ich jetzt irgendetwas drücke schließt sich dsa kleine Fenster und Metin2 auch.
Woran liegt das????:confused::(
|
All times are GMT +1. The time now is 13:19.
|
|