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;
}
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.
Könnte ne Lösung sein, ansonsten mal bei WriteProcessMemory schauen ob da etwas diesbezüglich angegeben wurde.
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.
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.
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.
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
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
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.
WriteProcessMemory 08/06/2013 - C/C++ - 5 Replies Hey, also ich versuche schon seit paar Stunden den Wert von einem Base Pointer eines anderen Prozesses via writeProcessMemory zu ändern, aber aus irgendein Grund funktioniert dies nicht.
Code:
GetWindowThreadProcessId(hWnd, &prog_id);
HANDLE hprog = OpenProcess(PROCESS_ALL_ACCESS, false, prog_id);
float valueY;
ReadProcessMemory(hprog, (LPVOID)(PointerY), &PointedY, 4, NULL);
PointedY = PointedY+OFFY;
WriteProcessmemory? 09/13/2012 - C/C++ - 3 Replies Mal ne frage.
Kann es sein dass Cheat Engine etwas besonderes macht um werte zu ändern?
Habe einen wert der überprüft wird.
Wenn ich ihn über c++ oder autoit change wirds bemerkt.
Wenn ich den wert mit cheat engine ändere wirds nicht bemerkt.
Bin grad bissle verwundert.
Hab Processopen alle rechte gegeben.
WriteProcessMemory 07/11/2012 - C/C++ - 4 Replies HeyHo,
Ich wollte ein Autoit Script in C++ umwandeln doch leider klappt das nicht so
wie ich will ...
Autoit Code ::
$Adresse = 0x00477786
$Prozess = _memoryopen(ProcessExists("NostaleX.dat" ))
C# WriteProcessMemory 02/29/2012 - .NET Languages - 3 Replies Hey Leute hab nen Problem mit den schreiben von werten in den speicher ...
hier ma grob der code der damit zusammen hängt
//die eingebundene dll
static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress,
byte lpBuffer, UIntPtr nSize, ref uint lpNumberOfBytesWritten);
help on Writeprocessmemory 10/07/2009 - General Coding - 8 Replies #include <Windows.h>
#include <iostream>
using namespace std;
#define EngineUpgrade_Addr 0x2F7EDDC8
#define EngineUpgrade_Value 1000
const SIZE_T EngineUpgrade_Size = sizeof(EngineUpgrade_Value);
SIZE_T EngineUpgrade_Sent = 0;