|
You last visited: Today at 12:34
Advertisement
D3D Hook Problem
Discussion on D3D Hook Problem within the General Coding forum part of the Coders Den category.
11/01/2011, 20:31
|
#1
|
elite*gold: 0
Join Date: Aug 2010
Posts: 334
Received Thanks: 79
|
D3D Hook Problem
Hi,
ich habe jetzt versucht nen D3D Hook zu schreiben, nachdem ich das Tutorial von purple diamond gelesen habe: . Leider hab ich echt keine Ahnung was ich hier falsch mache. Bevor ich vor die DllMain Funktion extern "C" hinzugefügt habe, lies sich die Dll nicht mal injecten. Jetzt funktioniert das, allerdings wird kein Rechteck gezeichnet. Die Adresse hab ich auch wie im Tutorial mit IDA bekommen. Wäre wirklich sehr nett wenn sich das jemand anschauen könnte. Danke.
Code:
#include <Windows.h>
#include <cstdio>
#include <d3d9.h>
#include <d3dx9.h>
#pragma once
#pragma comment(lib, "d3d9.lib")
#pragma comment(lib, "d3dx9.lib")
typedef HRESULT (__stdcall* EndScene_t)(LPDIRECT3DDEVICE9);
EndScene_t pEndScene;
const D3DCOLOR txtBlack = D3DCOLOR_ARGB(255,255,255,255); // Hoffentlich schwarz ;)
void *DetourFunc(BYTE *src, const BYTE *dst, const int len) //Gamedeception Hook Funktion
{
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);
}
HRESULT __stdcall hkEndScene(LPDIRECT3DDEVICE9 pDevice) //Die neue Funktion, danach wird wieder zur normalen returnt.
{
DrawRect(pDevice, 10, 10, 200, 200, txtBlack); //Rechteck zeichnen.
return pEndScene(pDevice);
}
void InitHook() //Wird in einem neuen Thread gestartet.
{
HMODULE hModule = NULL;
while(!hModule)
{
hModule = GetModuleHandleA("d3d9.dll"); //Handle zur Dll holen, wird nicht gebraucht, stellt aber sicher das d3d9 läuft.
Sleep(100); //Warten und dann wieder prüfen obs läuft.
}
pEndScene = (EndScene_t)DetourFunc((PBYTE) 0x7543279F, (PBYTE)hkEndScene, 5); //Hier wird gehookt ^^
}
extern "C"
int WINAPI DllMain(HINSTANCE hInst, DWORD reason, LPVOID reserverd)
{
switch(reason)
{
case DLL_PROCESS_ATTACH:
CreateThread(0, 0, (LPTHREAD_START_ROUTINE)InitHook, 0, 0, 0);
break;
}
return true;
}
mfg,
ZackBlack
|
|
|
11/01/2011, 20:59
|
#2
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
|
Quote:
Ein Thread hat den Typ DWORD WINAPI InitHook(LPVOID param).
Quote:
const D3DCOLOR txtBlack = D3DCOLOR_ARGB(255,255,255,255);
|
Schwarz wäre 255, 0, 0, 0.
Außerdem reicht hier das RGB Makro, denn die Zeichen-Methode mit Clear unterstützt keine Transparenz.
Hast du daran gedacht, die EndScene Adresse anzupassen?
Versuch doch mal durch MessageBoxen erstmal zu testen, ob dein Hook überhaupt aufgerufen wird.
|
|
|
11/01/2011, 21:57
|
#3
|
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
|
Quote:
Versuch doch mal durch MessageBoxen erstmal zu testen, ob dein Hook überhaupt aufgerufen wird.
|
Dich mögen zahllose Blitze treffen und brutzeln
>>
|
|
|
11/01/2011, 22:51
|
#4
|
elite*gold: 0
Join Date: Aug 2010
Posts: 334
Received Thanks: 79
|
Vielen Dank für die Antworten. Ich werde das dann wahrscheinlich erst übermorgen testen können. Auf die Idee mit MessageBox und Debug String bin ich nicht gekommen, ich wollte das mit Breakpoints machen, hab ich dann aber nicht geschafft das zu debuggen.. werde das mit der Debug String Funktion machen, danke. Edit: Fast den Thanksbutton vergessen xD
|
|
|
11/02/2011, 01:29
|
#5
|
elite*gold: 0
Join Date: Apr 2006
Posts: 6,597
Received Thanks: 1,830
|
Quote:
Versuch doch mal durch MessageBoxen erstmal zu testen, ob dein Hook überhaupt aufgerufen wird.
|
das hab ich mal bei meinem ersten globalen keyboard hook gemacht. Ja kann ich dir nur empfehlen lol
|
|
|
11/02/2011, 01:40
|
#6
|
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
|
in diamonds tut wird ganz am ende "foundbygordon" vorgestellt.
die solltest du benutzen, dann gehts auch...
Code:
tempadd = dwFindPattern((DWORD)hModule, 0x128000, (PBYTE)"\xC7\x06\x00\x00\x00\x00\x89\x86\x00\x00\x00\x00\x89\x86", "xx????xx????xx");
memcpy(&VTableStart, (void*)(tempadd+2), 4);
dwEndScene = VTableStart[42];
pEndScene = (EndScene_t) DetourFunc((PBYTE) dwEndScene, (PBYTE)hkEndScene, 5);
Mfg
SilverDeath
|
|
|
11/02/2011, 01:53
|
#7
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
|
Quote:
Originally Posted by xNopex
Dich mögen zahllose Blitze treffen und brutzeln
>>
|
Nein. Ich mag MessageBoxen lieber.
Und die VTable Methode hat auch ihre Nachteile, ist aber einer statischen Adresse deutlich vorzuziehen.
|
|
|
11/02/2011, 03:15
|
#8
|
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
|
ich mag züge:
Code:
void add_log(char* format, ...)
{
HANDLE filehandle;
DWORD dwReadBytes;
char buffer[2048];
char writebuffer[2048];
va_list args;
va_start(args, format);
vsprintf (buffer, format, args);
filehandle = CreateFile(L"IchMagZuege.txt", GENERIC_WRITE, 0, 0, OPEN_ALWAYS, 0, 0);
SetFilePointer(filehandle, 0, 0, FILE_END);
char date[18];
_strdate(date);
date[8] = ' ';
_strtime(date+9);
sprintf_s(writebuffer, 2048, "Log Added (%s): %s\r\n", date, buffer);
WriteFile(filehandle, writebuffer, strlen(writebuffer), &dwReadBytes, 0);
CloseHandle(filehandle);
}
|
|
|
11/02/2011, 11:09
|
#9
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
|
Mit Standard-C++ würdes du das ganze in der Hälfte der Zeilen schaffen.
Btw. habe ich deswegen MessageBoxen empfohlen, weil sie den Thread blocken.
So kann man zb. auch genau sehen, wann was passiert und in Ruhe alles auswerten, bis man dann weiter drückt.
Das bringt weder OutputDebugString noch ein LogFile.
|
|
|
11/02/2011, 12:25
|
#10
|
elite*gold: 0
Join Date: Aug 2010
Posts: 334
Received Thanks: 79
|
Mir der VTabel Methode funktioniert es problemlos, Danke.
|
|
|
11/02/2011, 14:56
|
#11
|
elite*gold: 169
Join Date: Jun 2010
Posts: 663
Received Thanks: 1,138
|
Quote:
Quote:
Ein Thread hat den Typ DWORD WINAPI InitHook(LPVOID param).
|
Das wirst du nie durchsetzen können
Ich glaube dieser Satz steht in jedem Thema, welches sich mit "D3D-Hack-Problem" betitelt.
|
|
|
11/02/2011, 17:53
|
#12
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
|
Bei jedem Hack Problem um genau zu sein.
|
|
|
11/02/2011, 18:28
|
#13
|
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
|
hey, ich benutze auch strikt DWORD WINAPI und kann es nicht ausstehen wenn andere da einfach void hinklatschen...
nervt fast so sehr wie die leute, die keine geschweiften klammern bei if (...) einzeilencodebefehlen benutzen-.-
|
|
|
11/02/2011, 20:40
|
#14
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
|
Da bin ich dann wohl schuldig, zumindest, wenn es um simple Funktionsaufrufe geht und keine komplexen if-Abfragen oder komplexe Funktionsaufrufe ;O
Sehe kein Problem bei
Wenn man weiß, was man tut, ist es ja nichtmal so tragisch, da es eh keine Probleme verursachen kann, solange man wenigstens die Calling Convention einhält.
Aber das Problem ist halt, dass es irgendwelche Leute, die mal Tutorials (meist für Warrock Hacks) veröffentlicht haben, aus Faulheit mit void gemacht haben und es dann alle Anfänger so gelernt haben und glauben, es sei richtig :<
Und da sie eben nicht wissen, dass es eigentlich falsch ist, eignen sie sich so direkt nen schlechten Stil an.
Aber naja, ist ja hier nicht das Thema.
|
|
|
|
Similar Threads
|
D3D Hook WriteMem Problem
02/01/2011 - General Coding - 45 Replies
Hallo Epvp,
Hab ein problem bei der WriteMem Funktion, aus dem D3D Hooking Tutorial von purple.d1amond.
die Funktion sieht folgendermaßen aus:
void WriteMem(DWORD dwOffset, DWORD dwValue, int len)
{
unsigned long Protection;
|
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++]D3D hook Problem
11/09/2009 - C/C++ - 28 Replies
#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
|
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 +2. The time now is 12:34.
|
|