|
You last visited: Today at 17:14
Advertisement
[C++]D3D hook Problem
Discussion on [C++]D3D hook Problem within the C/C++ forum part of the Coders Den category.
10/24/2009, 16:04
|
#1
|
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?
|
|
|
10/24/2009, 16:32
|
#2
|
elite*gold: 0
Join Date: Sep 2009
Posts: 148
Received Thanks: 31
|
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).
|
|
|
10/24/2009, 16:35
|
#3
|
elite*gold: 2
Join Date: Jul 2009
Posts: 14,456
Received Thanks: 4,685
|
ok.
Stimmt!
|
|
|
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:
|
|
|
10/24/2009, 19:13
|
#5
|
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=(
|
|
|
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.
|
|
|
10/24/2009, 19:43
|
#7
|
elite*gold: 2
Join Date: Jul 2009
Posts: 14,456
Received Thanks: 4,685
|
ok danke. Damit hast du mir geholfen!
Edit//
|
|
|
10/24/2009, 21:27
|
#8
|
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?
|
|
|
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.
|
|
|
10/24/2009, 21:37
|
#10
|
elite*gold: 0
Join Date: Jun 2009
Posts: 51
Received Thanks: 32
|
BITTE baruch hilfe
|
|
|
10/24/2009, 21:57
|
#11
|
elite*gold: 2
Join Date: Jul 2009
Posts: 14,456
Received Thanks: 4,685
|
Quote:
Originally Posted by Disconnect
Wenn du ein pinkes Rechteck siehst, dann ja. 
|
Sehe ich nicht
|
|
|
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.
|
|
|
10/25/2009, 16:26
|
#13
|
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.
|
|
|
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.
|
|
|
10/25/2009, 17:56
|
#15
|
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=(
|
|
|
 |
|
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.
|
|