Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding
You last visited: Today at 13:19

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

Advertisement



D3D-Hook Absturz

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

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Nov 2008
Posts: 17
Received Thanks: 0
Unhappy 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.
gametester123 is offline  
Old 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.
ms​ is offline  
Old 12/06/2009, 19:22   #3
 
elite*gold: 0
Join Date: Nov 2008
Posts: 17
Received Thanks: 0
ah, danke werds gleich mal versuchen..
gametester123 is offline  
Old 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.
gametester123 is offline  
Old 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
ms​ is offline  
Old 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)
gametester123 is offline  
Old 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, ...
ms​ is offline  
Old 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?
gametester123 is offline  
Old 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.
ms​ is offline  
Old 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??
gametester123 is offline  
Old 12/06/2009, 20:21   #11
 
^darkwing's Avatar
 
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 EndScene5); 
^darkwing is offline  
Old 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 View Post
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.
ms​ is offline  
Old 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
gametester123 is offline  
Old 12/07/2009, 03:10   #14


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Quote:
Originally Posted by gametester123 View Post
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 View Post
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.
MrSm!th is offline  
Old 12/07/2009, 15:34   #15
 
^darkwing's Avatar
 
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.
^darkwing is offline  
Reply

Tags
d3d, endscene, hook


Similar Threads 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.


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.