C++ WriteProcessMemory return 998

01/05/2014 16:31 xX.Slayer.Xx#1
Hi Leute,

ich habe ein Problem mit der Funktion WriteProcessMemory.
Ich bekomme immer den Fehler 998 (Acces denied).
Jedoch weiß ich nicht, was ich falsch mache.

Ich hoffe mir kann jemand helfen.
Hier mein Code:

Code:
#include <iostream> 
#include <windows.h> 
using namespace std; 
BYTE flash[5] = { 0xE9, 0x7A, 0x01, 0x00, 0x00 }; 
BYTE smoke[5] = { 0xE9, 0x1E, 0x05, 0x00, 0x00 }; 

int main() 
{ 
	HWND fenster = NULL;
	while(fenster == NULL)
	{ 
		fenster = FindWindow(NULL, "Counter-Strike Source");
		Sleep(100); 
	}

	if(!fenster) 
	{
		cout << "There was an error: function FindWindow" << endl;
	}
	else 
	{
		cout << "Counterstrike:Source wurde gefunden!" << endl; 
	}

	DWORD prozessid; 
	if(!GetWindowThreadProcessId(fenster, &prozessid))
	{
		cout << "There was an error: function GetWindowThreadProcessId" << endl;
	}

	HANDLE handleprozess; 
	if(!(handleprozess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, prozessid)))
	{
		cout << "There was an error: function OpenProcess" << endl;
	}

	DWORD puffer = NULL; 
	if(!(WriteProcessMemory(handleprozess,(void*)(0x5D6AD38E),&flash,sizeof(flash),&puffer))) 
	{
		cout << "There was an error: function WriteProcessMemory" << endl; 
	}
	cout << GetLastError() << endl;
	CloseHandle(handleprozess); 
	cin.get();
	return 0; 
}
01/08/2014 14:08 Mostey#2
Quote:
Originally Posted by MSDN
PROCESS_ALL_ACCESS
All possible access rights for a process object.
Windows Server 2003 and Windows XP: The size of the PROCESS_ALL_ACCESS flag increased on Windows Server 2008 and Windows Vista. If an application compiled for Windows Server 2008 and Windows Vista is run on Windows Server 2003 or Windows XP, the PROCESS_ALL_ACCESS flag is too large and the function specifying this flag fails with ERROR_ACCESS_DENIED. To avoid this problem, specify the minimum set of access rights required for the operation. If PROCESS_ALL_ACCESS must be used, set _WIN32_WINNT to the minimum operating system targeted by your application (for example, #define _WIN32_WINNT _WIN32_WINNT_WINXP). For more information, see Using the Windows Headers.
[Only registered and activated users can see links. Click Here To Register...]

Könnte ne Lösung sein, ansonsten mal bei WriteProcessMemory schauen ob da etwas diesbezüglich angegeben wurde.
01/08/2014 14:15 Dr. Coxxy#3
Quote:
0x5D6AD38E
sicher, dass die adresse da zu dem zeitpunkt an dem du das programm ausführst beschreibbar ist?
sieht mir stark nach einer dynamischen dll-adresse aus die sich bei jedem spielstart ändert.
01/08/2014 20:10 ccommander#4
Quote:
Originally Posted by Dr. Coxxy View Post
sicher, dass die adresse da zu dem zeitpunkt an dem du das programm ausführst beschreibbar ist?
sieht mir stark nach einer dynamischen dll-adresse aus die sich bei jedem spielstart ändert.

Quote:
LoadLibrary failed with error 998: Unzulässiger Zugriff auf einen Speicherbereich
Man kann nicht so einfach bei CSS am Spiel rumbasteln.
01/08/2014 20:58 Dr. Coxxy#5
Quote:
Originally Posted by ccommander View Post
Man kann nicht so einfach bei CSS am Spiel rumbasteln.
was hast du denn geraucht?
01/08/2014 21:16 xX.Slayer.Xx#6
Die Adresse ist Statisch.
Ist bei jedem Game neustart gleich.

Habe ich ca. 3-5 mal getestet. Auch bei PC Neustart ist die Adresse gleich.
Wenn ich die Adresse mithilfe von OllyDBG ändere, funktioniert auch alles super.
Nur die WriteProcessMemory will nicht funktionieren.

In der MSDN steht auch nichts dazu, wie man diesen Fehler beheben könnte.
Es wird nur ACCES_DENIED angegeben.
01/08/2014 21:18 Dr. Coxxy#7
mal mit virtualprotectex schreibrechte setzen.

Btw. vac detected was du da machst.
01/08/2014 21:22 xX.Slayer.Xx#8
Nicht VAC Protectet. VAC sichert ja nur auf Servern ab, und nicht im Spielmenü.

Wenn man im Spielmenü änderungen vornimmt, sieht VAC das als "Normal" an und beschwert sich nicht. Wenn man jedoch wärend des Spiels etwas ändert, merkt VAC das ganze.

Quote:
Originally Posted by Mostey View Post
[Only registered and activated users can see links. Click Here To Register...]

Könnte ne Lösung sein, ansonsten mal bei WriteProcessMemory schauen ob da etwas diesbezüglich angegeben wurde.
Hab mir das ganze nochmal genauer durchgeschaut.
Und genau das ist es.

mit
#define _WIN32_WINNT _WIN32_WINNT_WIN7
funktioniert alles :)

Danke für die hilfe
01/09/2014 05:25 Dr. Coxxy#9
Quote:
Originally Posted by xX.Slayer.Xx View Post
Nicht VAC Protectet. VAC sichert ja nur auf Servern ab, und nicht im Spielmenü.

Wenn man im Spielmenü änderungen vornimmt, sieht VAC das als "Normal" an und beschwert sich nicht. Wenn man jedoch wärend des Spiels etwas ändert, merkt VAC das ganze.
nein, tut es nicht, enjoy your free vac ban.