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.
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.
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.
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.
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.
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::(