Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding
You last visited: Today at 21:33

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

Advertisement



D3D Hook WriteMem Problem

Discussion on D3D Hook WriteMem Problem within the General Coding forum part of the Coders Den category.

Reply
 
Old 01/29/2011, 22:03   #16


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Quote:
Du hast recht ich hab nach den wichtigsten basics schon aufgehört, aber es war so interessant mit D3D Hooking anzufangen.
Und was ist dabei herausgekommen?

Quote:
Bei "len" hab ich erstmal 0 eingesetzt, da bei 1 oder anderen Werten das Spiel abkrazt.
Nunja, bei 0 kratzt nichts ab, weil bei 0 als len nichts geschrieben wird.

Quote:
DWORD Base = (DWORD) GetModuleHandleA("server.dll") + 0x0037492C;
sicher, dass diese Adresse einfach mit dem Offset addiert wird?
Sicher, dass nicht der Wert an dieser Adresse mit dem Offset addiert wird? Also so:

Code:
DWORD Base = (DWORD) GetModuleHandleA("server.dll") + 0x0037492C;
DWORD Address = *(DWORD*)(Base) + Offset;
Das wäre dann wie ein Pointer bei CE. Es kommt mir nämlich komisch vor, dass du zur ModuleBase erst 0x0037492C addierst und dann nochmal ein Offset.

Warum nimmst du nicht einfach die absolute Adresse, wie sie in Ce angezeigt wird?
MrSm!th is offline  
Old 01/29/2011, 22:31   #17
 
germanhacker's Avatar
 
elite*gold: 0
Join Date: May 2010
Posts: 84
Received Thanks: 13
Quote:
Originally Posted by MrSm!th View Post
Und was ist dabei herausgekommen?


Nunja, bei 0 kratzt nichts ab, weil bei 0 als len nichts geschrieben wird.


sicher, dass diese Adresse einfach mit dem Offset addiert wird?
Sicher, dass nicht der Wert an dieser Adresse mit dem Offset addiert wird? Also so:

Code:
DWORD Base = (DWORD) GetModuleHandleA("server.dll") + 0x0037492C;
DWORD Address = *(DWORD*)(Base) + Offset;
Das wäre dann wie ein Pointer bei CE. Es kommt mir nämlich komisch vor, dass du zur ModuleBase erst 0x0037492C addierst und dann nochmal ein Offset.

Warum nimmst du nicht einfach die absolute Adresse, wie sie in Ce angezeigt wird?
Also ich hab "Pointerscan for this Address" gemacht und dann doppel klick auf die P->"Addresse" gemacht dort hat er mir dann folgendes angezeigt :



Also ist die Adresse: server.dll+0037492C und mein Offset: 14

Kann schon sein, dass ich das falsch zusammengerechnet habe :/
germanhacker is offline  
Old 01/29/2011, 23:22   #18


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Jo, dann ist der Code, den ich geschrieben habe, richtig.
MrSm!th is offline  
Old 01/30/2011, 08:49   #19
 
germanhacker's Avatar
 
elite*gold: 0
Join Date: May 2010
Posts: 84
Received Thanks: 13
Danke für deine Hilfe, aber irgendwie wird das nix :S
Das Spiel krazt gleich beim start ab, aber der Fehler kann eig nur bei der WriteMem Funktion liegen, da es alles ohne sie funktioniert hat, also mein d3d menu lies sich öffnen un so^^

Ich zeig dir einfach mal den ganzen Code vllt siehste noch was...

Code:
#pragma once
#pragma comment(lib, "d3d9.lib")
#pragma comment(lib, "d3dx9.lib")
#include <cstdio>
#include <windows.h>
#include <d3d9.h>
#include <d3dx9.h>
#include <iostream>
using namespace std;

typedef HRESULT (D3DAPI* Reset_t)(IDirect3DDevice9* pDevice, D3DPRESENT_PARAMETERS* pPresentationParameters);
typedef HRESULT (WINAPI* tEndScene)(LPDIRECT3DDEVICE9 pDevice);
tEndScene pEndScene = NULL;
Reset_t pReset = 0;
DWORD dwEndScene;
DWORD dwDrawIndexedPrimitive;
LPD3DXFONT      g_pFont = NULL; //D3D Font

void Funktionen();
void *DetourFunc(BYTE *src, const BYTE *dst, const int len);
void DrawFont (int X, int Y, D3DCOLOR Color, char *format, ...);

//Farben:
D3DCOLOR txtPink = D3DCOLOR_ARGB(255, 255, 0, 255);
D3DCOLOR txtRed = D3DCOLOR_ARGB(255, 255, 0, 0);
D3DCOLOR txtYellow = D3DCOLOR_ARGB(255, 255, 255, 0);
D3DCOLOR txtGreen = D3DCOLOR_ARGB(255, 0, 255, 0);
D3DCOLOR txtBlue = D3DCOLOR_ARGB(255, 0, 0, 255);
D3DCOLOR txtPurple = D3DCOLOR_ARGB(255, 102, 0, 153);
D3DCOLOR txtOrange = D3DCOLOR_ARGB(255, 255, 165, 0);
D3DCOLOR txtWhite = D3DCOLOR_ARGB(255, 255, 255, 255);
D3DCOLOR txtBlack = D3DCOLOR_ARGB(255, 0, 0, 0);

// Texturen
//LPDIRECT3DTEXTURE9 texPink;
//LPDIRECT3DTEXTURE9 texGreen;
//LPDIRECT3DTEXTURE9 texRed;

bool draw = false;
bool godmode = false;

//________________________________________________________//

bool bDataCompare(const BYTE* pData, const BYTE* bMask, const char* szMask)
{
	for(;*szMask;++szMask,++pData,++bMask)
		if(*szMask=='x' && *pData!=*bMask ) 
			return false;
	return (*szMask) == NULL;
}
DWORD dwFindPattern(DWORD dwAddress,DWORD dwLen,BYTE *bMask,char * szMask)
{
	for(DWORD i=0; i < dwLen; i++)
		if( bDataCompare( (BYTE*)( dwAddress+i ),bMask,szMask) )
			return (DWORD)(dwAddress+i);
	return 0;
}
void WriteMem(DWORD dwAdresse, int Wert, int len)
{
	unsigned long Protection;
	VirtualProtect((void*)dwAdresse, len, PAGE_READWRITE, &Protection);
	memset((void*)dwAdresse, Wert, len);
	VirtualProtect((void*)dwAdresse, len, Protection, 0);
}
void Rechteck (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); 
}
void DrawFont (int X, int Y, D3DCOLOR Color, char *format, ...)
{
	char buffer[256];
	va_list args; // deswegen: #include <cstdio>
	va_start (args, format);
	vsprintf (buffer,format, args);
	RECT FontRect = { X, Y, X + 120, Y + 16 };
	g_pFont->DrawText( NULL, buffer, -1, &FontRect, DT_NOCLIP , Color ); // Zeichnen
	va_end (args);
}
HRESULT D3DAPI hkReset(IDirect3DDevice9* pDevice, D3DPRESENT_PARAMETERS* pPresentationParameters)
{
	return pReset(pDevice, pPresentationParameters);
}
HRESULT WINAPI hkEndScene(LPDIRECT3DDEVICE9 pDevice)
{
	_asm pushad
	if (draw == true)
	{
		D3DXCreateFont(pDevice, 14, 0, FW_NORMAL, 1, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,ANTIALIASED_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Arial", &g_pFont );
		Rechteck (pDevice, 5, 15, 140, 210, txtOrange);
		Rechteck (pDevice, 10, 20, 130, 200, txtBlack);
		DrawFont ( 10, 35, txtWhite, "* * * D3D Hack By Michi * * *" );
		DrawFont ( 10, 45, txtWhite, "______________________" );
		DrawFont ( 10, 15, txtWhite, "______________________" );
	}
	if(GetAsyncKeyState(VK_INSERT) &1) // Öffnen mit Einfg
	{
		draw = !draw; // Ein od. Aus
	}
	if (godmode == true)
	{
		DWORD offset = 0x14;
		DWORD Base = (DWORD) GetModuleHandleA("server.dll") + 0x0037492C;
		DWORD Address = *(DWORD*)(Base) + offset;
		WriteMem(Address, 1, 1); // Value der Adresse mit 1 ersetzen
	}
	else
	{
		DWORD offset = 0x14;
		DWORD Base = (DWORD) GetModuleHandleA("server.dll") + 0x0037492C;
		DWORD Address = *(DWORD*)(Base) + offset;
		WriteMem(Address, 0, 1); // Value der Adresse auf 0 zurück setzen
	}
	if(GetAsyncKeyState(VK_NUMPAD1) &1) // Aktivieren mit NUMPAD1
	{
		godmode = !godmode;
	}
	_asm popad
	return pEndScene(pDevice); 
}
void Funktionen()
{
	HMODULE hModule = NULL;
	while( !hModule )
	{
		hModule = GetModuleHandleA( "d3d9.dll" );
		Sleep( 100 );
	}
	dwEndScene = (DWORD)hModule + 0x871A0;
	DWORD* VTableStart = 0;                  
	DWORD FoundByGordon = 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*)(FoundByGordon+2), 4);
	dwDrawIndexedPrimitive = (DWORD)VTableStart[82];
	dwEndScene = (DWORD)VTableStart[42];
	pEndScene = (tEndScene )DetourFunc((PBYTE)  dwEndScene ,(PBYTE)hkEndScene, 5); 
}
int WINAPI DllMain(HINSTANCE hInst,DWORD reason,LPVOID reserved) 
{
	switch(reason)
	{
	case DLL_PROCESS_ATTACH:
		MessageBoxA(0, "* * * Coded By Michi * * *", "Injected!", 0);
		CreateThread(0, 0, (LPTHREAD_START_ROUTINE) Funktionen, 0, 0, 0);
		break;
	}
	return true;
}
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);
}
germanhacker is offline  
Old 01/30/2011, 14:14   #20


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Probiers doch einfach mal mit Debug Ausgaben
Lass dir den Wert von Base ausgeben, den von Address,...

Quote:
void Funktionen()
Langsam wird es aber echt nervig!

Code:
DWORD WINAPI Funktionen(LPVOID param);
ist die korrekte Definition eines Threads!!

Du solltest übrigens ne andere Detour-Funktion nehmen, zb. MS Detours 1.5
Das ist viel besser als dieser 0815-Müll da, den scheinbar fast alle hier nutzen.

Quote:
D3DXCreateFont(pDevice, 14, 0, FW_NORMAL, 1, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,ANTIALIASED_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Arial", &g_pFont );
Das hier wird nach einer gewissen Zeit auch zu einem Crash führen! Du darfst den Font nur ein Mal erstellen und nicht jedes Mal, wenn das Menü gezeichnet werden soll!

Und pack am besten die Funktionen, die die Tasten abfragen und dann die Funktionen, die den eigentlichen Hack ausführen, in andere Funktionen oder sogar nen anderen Thread, alles in die EndScene zu stopfen ist keine gute Idee.


Und ein Tipp, der das Debugging erleichtert:
Hook nicht nur beim Injecten in den Prozess die EndScene, sondern mache den Hook beim Entladen der Dll wieder rückgängig!
Das ist 1. einfach saubere Programmierung 2. dadurch kannst du die Dll zb. mit Winject auch direkt wieder ejecten, wenn was nicht stimmt, sie ändern und wieder injecten und musst nicht immer den Prozess neustarten.
MrSm!th is offline  
Old 01/30/2011, 15:05   #21
 
germanhacker's Avatar
 
elite*gold: 0
Join Date: May 2010
Posts: 84
Received Thanks: 13
Quote:
Originally Posted by MrSm!th View Post
Probiers doch einfach mal mit Debug Ausgaben
Lass dir den Wert von Base ausgeben, den von Address,...


Langsam wird es aber echt nervig!

Code:
DWORD WINAPI Funktionen(LPVOID param);
ist die korrekte Definition eines Threads!!

Du solltest übrigens ne andere Detour-Funktion nehmen, zb. MS Detours 1.5
Das ist viel besser als dieser 0815-Müll da, den scheinbar fast alle hier nutzen.
Das haben wir alle so aus nem Tutorial

Quote:
Originally Posted by MrSm!th View Post
Das hier wird nach einer gewissen Zeit auch zu einem Crash führen! Du darfst den Font nur ein Mal erstellen und nicht jedes Mal, wenn das Menü gezeichnet werden soll!

Und pack am besten die Funktionen, die die Tasten abfragen und dann die Funktionen, die den eigentlichen Hack ausführen, in andere Funktionen oder sogar nen anderen Thread, alles in die EndScene zu stopfen ist keine gute Idee.
Ok, hab ich gemacht.


Quote:
Originally Posted by MrSm!th View Post
Und ein Tipp, der das Debugging erleichtert:
Hook nicht nur beim Injecten in den Prozess die EndScene, sondern mache den Hook beim Entladen der Dll wieder rückgängig!
Das ist 1. einfach saubere Programmierung 2. dadurch kannst du die Dll zb. mit Winject auch direkt wieder ejecten, wenn was nicht stimmt, sie ändern und wieder injecten und musst nicht immer den Prozess neustarten.
Das mit dem rückgängig machen hab ich nicht hinbekommen <.<


Ich hab den Code jetzt umgeändert. So sieht er jetzt aus:

Code:
#pragma once
#pragma comment(lib, "d3d9.lib")
#pragma comment(lib, "d3dx9.lib")
#include <cstdio>
#include <windows.h>
#include <d3d9.h>
#include <d3dx9.h>
#include <iostream>
using namespace std;

typedef HRESULT (D3DAPI* Reset_t)(IDirect3DDevice9* pDevice, D3DPRESENT_PARAMETERS* pPresentationParameters);
typedef HRESULT (WINAPI* tEndScene)(LPDIRECT3DDEVICE9 pDevice);
tEndScene pEndScene = NULL;
Reset_t pReset = 0;
DWORD dwEndScene;
DWORD dwDrawIndexedPrimitive;
LPD3DXFONT      g_pFont = NULL; //D3D Font

void *DetourFunc(BYTE *src, const BYTE *dst, const int len);
void DrawFont (int X, int Y, D3DCOLOR Color, char *format, ...);

//Farben:
D3DCOLOR txtPink = D3DCOLOR_ARGB(255, 255, 0, 255);
D3DCOLOR txtRed = D3DCOLOR_ARGB(255, 255, 0, 0);
D3DCOLOR txtYellow = D3DCOLOR_ARGB(255, 255, 255, 0);
D3DCOLOR txtGreen = D3DCOLOR_ARGB(255, 0, 255, 0);
D3DCOLOR txtBlue = D3DCOLOR_ARGB(255, 0, 0, 255);
D3DCOLOR txtPurple = D3DCOLOR_ARGB(255, 102, 0, 153);
D3DCOLOR txtOrange = D3DCOLOR_ARGB(255, 255, 165, 0);
D3DCOLOR txtWhite = D3DCOLOR_ARGB(255, 255, 255, 255);
D3DCOLOR txtBlack = D3DCOLOR_ARGB(255, 0, 0, 0);

// Texturen
//LPDIRECT3DTEXTURE9 texPink;
//LPDIRECT3DTEXTURE9 texGreen;
//LPDIRECT3DTEXTURE9 texRed;

bool draw = false;
bool godmode = false;

//________________________________________________________//

bool bDataCompare(const BYTE* pData, const BYTE* bMask, const char* szMask)
{
	for(;*szMask;++szMask,++pData,++bMask)
		if(*szMask=='x' && *pData!=*bMask ) 
			return false;
	return (*szMask) == NULL;
}
DWORD dwFindPattern(DWORD dwAddress,DWORD dwLen,BYTE *bMask,char * szMask)
{
	for(DWORD i=0; i < dwLen; i++)
		if( bDataCompare( (BYTE*)( dwAddress+i ),bMask,szMask) )
			return (DWORD)(dwAddress+i);
	return 0;
}
void WriteMem(DWORD dwAdresse, int Wert, int len)
{
	unsigned long Protection;
	VirtualProtect((void*)dwAdresse, len, PAGE_READWRITE, &Protection);
	memset((void*)dwAdresse, Wert, len);
	VirtualProtect((void*)dwAdresse, len, Protection, 0);
}
void Rechteck (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); 
}
void DrawFont (int X, int Y, D3DCOLOR Color, char *format, ...)
{
	char buffer[256];
	va_list args; // deswegen: #include <cstdio>
	va_start (args, format);
	vsprintf (buffer,format, args);
	RECT FontRect = { X, Y, X + 120, Y + 16 };
	g_pFont->DrawText( NULL, buffer, -1, &FontRect, DT_NOCLIP , Color ); // Zeichnen
	va_end (args);
}
HRESULT D3DAPI hkReset(IDirect3DDevice9* pDevice, D3DPRESENT_PARAMETERS* pPresentationParameters)
{
	return pReset(pDevice, pPresentationParameters);
}
void MenuMalen(LPDIRECT3DDEVICE9 pDevice)
{
	_asm pushad
	if (draw == true)
	{
		Rechteck (pDevice, 5, 15, 140, 210, txtOrange);
		Rechteck (pDevice, 10, 20, 130, 200, txtBlack);
		DrawFont ( 10, 35, txtWhite, "* * * D3D Hack By Michi * * *" );
		DrawFont ( 10, 45, txtWhite, "______________________" );
		DrawFont ( 10, 15, txtWhite, "______________________" );
	}
	if(GetAsyncKeyState(VK_INSERT) &1) // Öffnen mit Einfg
	{
		draw = !draw; // Ein od. Aus
	}
	_asm popad
}
void HackFunktion()
{
	_asm pushad
		if (godmode == true)
	{
		DWORD offset = 0x14;
		DWORD Base = (DWORD) GetModuleHandleA("server.dll") + 0x0037492C;
		DWORD Address = *(DWORD*)(Base) + offset;
		WriteMem(Address, 1, 1); // Value der Adresse mit 1 ersetzen
	}
	else
	{
		DWORD offset = 0x14;
		DWORD Base = (DWORD) GetModuleHandleA("server.dll") + 0x0037492C;
		DWORD Address = *(DWORD*)(Base) + (offset);
		WriteMem(Address, 0, 1); // Value der Adresse auf 0 zurück setzen
	}
	if(GetAsyncKeyState(VK_NUMPAD1) &1) // Aktivieren mit NUMPAD1
	{
		godmode = !godmode;
	}
	_asm popad
}
HRESULT WINAPI hkEndScene(LPDIRECT3DDEVICE9 pDevice)
{
	D3DXCreateFont(pDevice, 14, 0, FW_NORMAL, 1, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,ANTIALIASED_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Arial", &g_pFont );
	MenuMalen(LPDIRECT3DDEVICE9 (pDevice));
	HackFunktion();
	return pEndScene(pDevice); 
}
DWORD WINAPI Funktionen(LPVOID param)
{
	HMODULE hModule = NULL;
	while( !hModule )
	{
		hModule = GetModuleHandleA( "d3d9.dll" );
		Sleep( 100 );
	}
	dwEndScene = (DWORD)hModule + 0x871A0;
	DWORD* VTableStart = 0;                  
	DWORD FoundByGordon = 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*)(FoundByGordon+2), 4);
	dwDrawIndexedPrimitive = (DWORD)VTableStart[82];
	dwEndScene = (DWORD)VTableStart[42];
	pEndScene = (tEndScene )DetourFunc((PBYTE)  dwEndScene ,(PBYTE)hkEndScene, 5); 
	return 0;
}
int WINAPI DllMain(HINSTANCE hInst,DWORD reason,LPVOID reserved) 
{
	switch(reason)
	{
	case DLL_PROCESS_ATTACH:
		MessageBoxA(0, "* * * Coded By Michi * * *", "Injected!", 0);
		CreateThread(0, 0, (LPTHREAD_START_ROUTINE) Funktionen, 0, 0, 0);
		break;
	}
	return true;
}
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);
}
Ohne die WriteMem Methode klappt das ganze perfekt (naja fast perfekt, ingame verschwindet irgendwann die Schrift vom D3D Menu ).

Also muss der Fehler ja noch irgendwo da liegen.
Du programmierst doch auch Hacks, dann kannste doch gucken wie du das genau machst. Irgendwo wird sich wahrscheinlich ein kleiner Fehler eingeschlichen haben, der jetzt alles abkratzen lässt
germanhacker is offline  
Old 01/30/2011, 15:32   #22


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Quote:
Originally Posted by germanhacker View Post
Das haben wir alle so aus nem Tutorial
Ja, die Coding Welt besteht eben zu 90% aus Leuten, die nichts anderes können, als hirnlos Sourcecodes zu kopieren und exakt das zu machen, was man ihnen sagt, und wenn sie keine Anweisung bekommen, sind sie hilflos.
Quote:
Das mit dem rückgängig machen hab ich nicht hinbekommen <.<
Ne, echt? Du hast ja auch nur ne DetourFunc, die wie schon gesagt auch noch schlecht ist, du bräuchtest ne Funktion, die das wieder rückgängig macht.

Schau dir einfach Microsoft Detours an!


Und wie gesagt, mach dir MessageBoxen, die dir die Werte von den Variablen ausgeben, so weißt du, warum dein Hack crasht.
MrSm!th is offline  
Old 01/30/2011, 16:12   #23
 
germanhacker's Avatar
 
elite*gold: 0
Join Date: May 2010
Posts: 84
Received Thanks: 13
Also ich hab das jetzt mal mit messageboxen gemacht, so wie du gesagt hast und mir ist aufgefallen, dass er schon hier crasht:

Code:
		DWORD offset = 0x14;
		DWORD Base = (DWORD) GetModuleHandleA("server.dll") + 0x0037492C;
		DWORD Address = *(DWORD*)(Base) + offset;
Also kommt er nicht mal bis zum WriteMem... :S

Aber er tut doch nur die Adresse suchen, also er schreibt ja noch nix, wie kann das ganze da schon crashen o.O
germanhacker is offline  
Old 01/30/2011, 18:34   #24


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Du sollst erst den Wert von Base ausgeben und dann von der Adresse.
Schonmal dran gedacht, dass GetModuleHandle fehlschlägt und deshalb Base schon ungültig ist?
MrSm!th is offline  
Old 01/30/2011, 18:50   #25
 
germanhacker's Avatar
 
elite*gold: 0
Join Date: May 2010
Posts: 84
Received Thanks: 13
Quote:
Originally Posted by MrSm!th View Post
Du sollst erst den Wert von Base ausgeben und dann von der Adresse.
Schonmal dran gedacht, dass GetModuleHandle fehlschlägt und deshalb Base schon ungültig ist?
Der Wert von Base lässt sich nicht mehr ausgeben, da stürzt das programm doch schon ab. Wie kann denn GetModuleHandle fehlschlagen ?
germanhacker is offline  
Old 01/30/2011, 19:01   #26


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Indem es einfach fehlschlägt, frag MS, welche Gründe es dafür geben kann.
Du sollst VOR dem Auslesen der Adresse Base ausgeben, Herr Gott nochmal....

Code:
char str[10];
DWORD Base = (DWORD) GetModuleHandleA("server.dll") + 0x0037492C;
sprintf(str,"%X",Base);
MessageBox(0,str,"Base",0);

DWORD Address = *(DWORD*)(Base) + offset;
sprintf(str,"%",Address);
MessageBox(0,str,"Address",0);

//...
MrSm!th is offline  
Old 01/30/2011, 19:33   #27
 
germanhacker's Avatar
 
elite*gold: 0
Join Date: May 2010
Posts: 84
Received Thanks: 13
Base: 37492C

und jetzt so ?

DWORD Base = 0x37492C + 0x0037492C;

€dit: moment mal xD
die zwei adressen da oben kommen mir bekannt vor
Das sind ja die selben ich blitzmerker x)
germanhacker is offline  
Old 01/30/2011, 20:15   #28


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Nicht ganz.

Gibst du den Wert von Base oder den Rückgabewert von GetModuleHandle aus?

Falls ersteres zutrifft, haben wir es doch.
Base hat den Wert von 0x0037492C, also das, was du zur ModuleBase hinzuaddierst, was wiederum heißt, dass GetModuleHandle 0 zurückgibt.
Das kann zb. daran liegen, dass du es falsch schreibst oder die Dll noch gar nicht geladen ist.
Ruf mal GetLastError auf, um zu wissen, was genau bei GetModuleHandle schiefläuft.
MrSm!th is offline  
Old 01/30/2011, 20:51   #29
 
germanhacker's Avatar
 
elite*gold: 0
Join Date: May 2010
Posts: 84
Received Thanks: 13
Ich bekomm die Fehlermeldung, dass das Handle ungültig ist.
Könnt schon sein, dass die Dll erst ein wenig später geladen wird.. Zuerst kommt ja noch Vorschau und sowas, doch da stürzt das spiel ab. Auf jedenfall ist sie nach der Vorschau geladen.
germanhacker is offline  
Old 01/31/2011, 01:00   #30


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Dann warte doch bis dahin und injecte die Dll dann.
Oder mach es mit LoadLibrary, die gibt, falls die Dll schon geladen wurde, ein Handle zu ihr und ansonsten lädt sie sie und gibt dann das Handle.
Also einfach LoadLibrary("Pfad zur Dll"); anstatt GetModuleHandle nutzen.
MrSm!th 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++]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 +1. The time now is 21:33.


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.