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;
}
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
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.
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-.-
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
Code:
if(a > 10)
a = 10
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.
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++ 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