Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 17:14

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

Advertisement



[C++]D3D hook Problem

Discussion on [C++]D3D hook Problem within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1


 
Lawliet's Avatar
 
elite*gold: 2
Join Date: Jul 2009
Posts: 14,456
Received Thanks: 4,685
[C++]D3D hook Problem

Code:
#pragma once
#pragma comment(lib, "d3d9.lib")
#pragma comment(lib, "d3dx9.lib")

#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;
ID3DXFont *pFont;
      
HRESULT __stdcall hkEndScene(LPDIRECT3DDEVICE9 pDevice)
{
return pEndScene(pDevice);
}
int WINAPI DllMain(HINSTANCE hInst,DWORD reason,LPVOID reserved)
{
        switch(reason)
        {
        case DLL_PROCESS_ATTACH:
                
			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 holen
                Sleep( 100 ); // 100ms warten
        }
		pEndScene = ( EndScene_t )DetourFunc((PBYTE)  0x4FDD71CC,(PBYTE)hkEndScene, 5);
		DrawRect ( pDevice, 10, 10, 200, 200, txtPink);
		//Meins:
		//int zahl = 1;
		//int zahl2 = 0;
		//if(zahl > zahl2, zahl2++)
		//{
		//	D3DXCreateFont(pDevice, 14, 0, FW_NORMAL, 1, 0, DEFAULT_CHARSET,  OUT_DEFAULT_PRECIS, 
//ANTIALIASED_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Arial", &g_pFont );
//		}
}
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);
}
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
}
Das ist ein C++ Code der die EndScene und den DevicePointer hookt.
Es wird ein Rechteck links oben ins Fenster gezeichnet, doch trotz fehlerfreier compilierung wird nichts gezeichnet=( findet ihr einen Fehler?
Lawliet is offline  
Old 10/24/2009, 16:32   #2
 
^darkwing's Avatar
 
elite*gold: 0
Join Date: Sep 2009
Posts: 148
Received Thanks: 31
Code:
[B]0x4FDD71B0[/B]
Den Code hast du von einem TuT und in diesem steht wie man die richtige Adresse von EndScence rausfindet (da sie bei nicht bei jeder d3d9.dll gleich ist, weil sie älter oder neuer evtl. ist).
^darkwing is offline  
Thanks
1 User
Old 10/24/2009, 16:35   #3


 
Lawliet's Avatar
 
elite*gold: 2
Join Date: Jul 2009
Posts: 14,456
Received Thanks: 4,685
ok.
Stimmt!
Lawliet is offline  
Old 10/24/2009, 17:14   #4
 
elite*gold: 115
Join Date: Oct 2007
Posts: 9,390
Received Thanks: 12,345
Vielleicht hilft dir der Thread weiter:
ms​ is offline  
Old 10/24/2009, 19:13   #5


 
Lawliet's Avatar
 
elite*gold: 2
Join Date: Jul 2009
Posts: 14,456
Received Thanks: 4,685
Hmm ja also nen Injector zu finden ist jetzt nicht das Problem!
Ich habe jetzt die falsche EndScene Adresse editiert und die Dll mit Combat Arms getestet...
Doch leider wurde nichts gezeichnet=(
Lawliet is offline  
Old 10/24/2009, 19:34   #6
 
elite*gold: 115
Join Date: Oct 2007
Posts: 9,390
Received Thanks: 12,345
Du musst dein Rechteck ja auch in der Detour-Funktion zeichnen. Also DrawRect() in hkEndScene() callen.
ms​ is offline  
Thanks
1 User
Old 10/24/2009, 19:43   #7


 
Lawliet's Avatar
 
elite*gold: 2
Join Date: Jul 2009
Posts: 14,456
Received Thanks: 4,685
ok danke. Damit hast du mir geholfen!

Edit//
Lawliet is offline  
Old 10/24/2009, 21:27   #8


 
Lawliet's Avatar
 
elite*gold: 2
Join Date: Jul 2009
Posts: 14,456
Received Thanks: 4,685
Code:
#pragma once
#pragma comment(lib, "d3d9.lib")
#pragma comment(lib, "d3dx9.lib")

#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;
ID3DXFont *pFont;
      
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:
                
			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)  0x4FDD71CC,(PBYTE)hkEndScene, 5);
		//DrawRect (pDevice, 10, 10, 200, 200, txtPink);
		//Meins:
		//int zahl = 1;
		//int zahl2 = 0;
		//if(zahl > zahl2, zahl2++)
		//{
		//	D3DXCreateFont(pDevice, 14, 0, FW_NORMAL, 1, 0, DEFAULT_CHARSET,  OUT_DEFAULT_PRECIS, 
//ANTIALIASED_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Arial", &g_pFont );
//		}
}
void *DetourFunc(BYTE *src, const BYTE *dst, const int len)
{
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);
}
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);
}
Richtig?
Lawliet is offline  
Old 10/24/2009, 21:36   #9
 
elite*gold: 115
Join Date: Oct 2007
Posts: 9,390
Received Thanks: 12,345
Wenn du ein pinkes Rechteck siehst, dann ja.
ms​ is offline  
Old 10/24/2009, 21:37   #10
 
elite*gold: 0
Join Date: Jun 2009
Posts: 51
Received Thanks: 32
BITTE baruch hilfe
astyler is offline  
Old 10/24/2009, 21:57   #11


 
Lawliet's Avatar
 
elite*gold: 2
Join Date: Jul 2009
Posts: 14,456
Received Thanks: 4,685
Quote:
Originally Posted by Disconnect View Post
Wenn du ein pinkes Rechteck siehst, dann ja.
Sehe ich nicht
Lawliet is offline  
Old 10/24/2009, 23:12   #12
 
elite*gold: 20
Join Date: Sep 2006
Posts: 1,100
Received Thanks: 184
Wie soll die DLL auch in der Lage sein irgendwas zu Zeichnen?
Du weist pDevice ja nirgends eine gültige Adresse zu, außerdem solltest du deinen ThreadProc in Ordnung bringen:
Code:
DWORD WINAPI ThreadProc(in  LPVOID lpParameter);
So sollte der Functions Prototyp deiner InitHook Funktion aussehen.

Übrigens sieht der gesamte Code so aus als hättest du wenig Ahnung von dem was du zu tun versuchst, du holst dir in der InitHook Funktion ein Handle zur D3D9.dll aber machst danach nichts mehr damit.

Wenn du möchtest das dein Code Funktioniert musst du auf jeden Fall pDevice einen gültigen Zeigern auf ein DIRECT3DDEVICE9 zu weisen.
Bot_interesierter is offline  
Old 10/25/2009, 16:26   #13


 
Lawliet's Avatar
 
elite*gold: 2
Join Date: Jul 2009
Posts: 14,456
Received Thanks: 4,685
Den Handle hole ich mir um sicher zu gehen dass die Dll auch wirklich geladen wurde.
Lawliet is offline  
Old 10/25/2009, 17:24   #14
 
elite*gold: 115
Join Date: Oct 2007
Posts: 9,390
Received Thanks: 12,345
Du kannst dann aber auch nicht einfach eine feste Adresse für EndScene nehmen, sondern musst das Offset von EndScene zu dem Handle addieren. Das Handle ist nämlich afaik nach jedem Programmstart unterschiedlich.

btw, kann es sein, dass der Detour direkt zum Caller von EndScene returnt? Ob man das so machen kann weiß ich nicht, weil dann ja eigentlich EndScene nie wirklich "ausgeführt" wird.
ms​ is offline  
Old 10/25/2009, 17:56   #15


 
Lawliet's Avatar
 
elite*gold: 2
Join Date: Jul 2009
Posts: 14,456
Received Thanks: 4,685
Also ich muss erstmal DIRECT3DDEVICE9 eine gültige Adresse zuweisen...
d3d9.dll Handle + EndScene Offset = EndScene Adresse...
Doch was soll denn an dem Thread (InitHook()) falsch sein?
Sorry, aber dass verstehe ich nicht ganz=(
Lawliet is offline  
Reply


Similar Threads Similar Threads
[C++]Hook all Recv function Problem
08/21/2010 - C/C++ - 5 Replies
Hi Leute wenn ich send hooke egal welches läuft das alles super nur wenn ich irgendein recv hooke habe ich immer eine Packet size von 1000 bis 10000. sry das ich schon wieder nerve #include "WinSock2.h" #include <cstdio> #include <ctime> #include <fstream> #include <iomanip>
Urban WR D3D Hook PROBLEM!!
06/01/2010 - WarRock - 11 Replies
Hi, Bei dem Urban WR D3D Hook Hack ( http://www.elitepvpers.com/forum/warrock-hacks-bots -cheats-exploits/589000-warrock-urban-wr-d3d-hook- undetected-30-05-2010-a.html ) habe ich ein Problem. Ich habe alles entpackt und extrahiert aber wenn ich den Injector öffne steht da " Auf das angegebene Gerät , bzw. den Pfad oder die Datei kann nicht zugegriffen werden. Sie verfügen eventuell nicht über ausreichende Berechtigungen, um auf das Element zugreifen zu können" !!!! Ich bin aber Administrator...
C++ hook Problem
10/19/2009 - C/C++ - 15 Replies
Also ich habe mir einen Keyboardhook geschrieben und habe das programm gestartet und es wieder beendet ohne den hook unzuhooken und nun geht meine tastatur nicht mehr (auch im bios nicht mehr) tja ich denke ,dass der hook immernoch läuft und ich bräuchte so eine art hook manager . Oder einfach ein stückcode,das mir alles unhooked . mein code : void MsgLoop() { MSG message;
BiG problem With hook edx33
07/28/2009 - Silkroad Online - 8 Replies
I hook edx33 and now 80 % of my programs no start :rtfm: and too unhook don't start im into 64X bit vista windows pls fast reply how to fix them



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


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.