![]() |
csgo readprocessmemory, Speicher auslesen, Werte nicht wie erwartet
Hallo, ich hatte mir nach 4 Jahren Pause mal überlegt die neuste Delphi Community Version zu installieren und etwas auf die alten Zeiten zu programmieren.
Direkt zum Problem, mit ReadProcessMemory soll etwas Speicher aus dem Spiel csgo ausgelesen werden... mit Hilfe des ClientDLL_Base Pointers und dem entsprechenden Offset im Speicher (off_LocalPlayer), lade ich den Pointer zum lokalen Spieler-Speicherbereich
Delphi-Quellcode:
danach wollte ich mit folgendem Aufruf an die Health-Points meines Charakters kommen
ReadProcessMemory(phandle,
Pointer(ClientDLL_Base + off_LocalPlayer), @LocPlayer_Base, sizeof(LocPlayer_Base), Val);
Delphi-Quellcode:
allerdings erhalte ich einen Wert zurück, welcher nicht zwischen 0 und 100 liegt sondern 6729020.ReadProcessMemory(phandle, Pointer(LocPlayer_Base + off_iHealth), @hp, sizeof(hp), Val); Habt Ihr einen Tipp für mich, an welcher Stelle ich nachhaken sollte? Ich tappe schon eine Weile im dunklen. Hier sind noch die Variablen mit Ihren Typen, scheinbar Fehlen mir Informationen bezüglich Pointern und 64 bit... Keine Ahnung. Falls Ihr noch etwas Rückfragen wollt gerne.
Delphi-Quellcode:
LG Jonas
var
phandle : THandle; pid : cardinal; cth32ssHandle: THandle; ModuleEntry, clientE32, engineE32 : TModuleEntry32; ClientDLL_Base, EngineDLL_Base : NativeUInt; Val : NativeUInt; hp : NativeInt; const off_LocalPlayer = $CF3A4C; off_iTeamNum = $F4; off_iHealth = $100; // vorher gehe ich noch die System Prozesse durch und schaue mir dort die Module etwas genauer an if SameText('client_panorama.dll', ModuleEntry.szModule) then begin clientE32 := ModuleEntry; end; // um von dort die entsprechende Einstiegssadresse zu bekommen ClientDLL_Base := NativeUInt(clientE32.modBaseAddr); |
AW: csgo readprocessmemory, Speicher auslesen, Werte nicht wie erwartet
Bist du dir denn sicher, dass die Offsets richtig sind?
Das kann (wird) sich mit jedem Update des Spiels ändern. |
AW: csgo readprocessmemory, Speicher auslesen, Werte nicht wie erwartet
leider bin ich mir da überhaupt nicht sicher, ich hatte mich
![]() Also ich prüfe das jetzt mal selbst nach mit den offsets, allerdings glaube ich, die Person hat das gewissenhaft gemacht |
AW: csgo readprocessmemory, Speicher auslesen, Werte nicht wie erwartet
Ich kann ja nochmal mein Verständnis von readprocessmemory kommentieren
Delphi-Quellcode:
ReadProcessMemory(phandle, // phandle habe ich über das Fenster und den zugehörigen Prozess ermittelt
Pointer(ClientDLL_Base + off_LocalPlayer), // die clientdll_base adresse wurde über den modul record mit CreateToolHelp32SnapShot ermittelt @LocPlayer_Base, // ist Adresse der Pointer Variable LocPlayer_Base, welche vom typ NativeUInt ist und damit wohl geeigneter 64 Bit Pointer sizeof(LocPlayer_Base), // 8 byte... Val); // kann hierbei unbetrachtet bleiben |
AW: csgo readprocessmemory, Speicher auslesen, Werte nicht wie erwartet
Die Werte wurden auch am 26.07.2019 aktualisiert, also das scheint aktuell zu sein.
Auf der github Seite steht auf der Projektseite ein Beispiel. Du musst zuerst den ClientState auslesen. An Adresse (Offset?)
Code:
ist ein Pointer zu dem ClientState struct (oder class). Den Liest du aus.
public const Int32 dwClientState = 0x58ECFC;
Dann addierst du auf den ausgelesenen Wert den Offset von
Code:
und liest von dieser adresse den pointer zu einer Funktion namens "GetLocalPlayer" aus.
public const Int32 dwClientState_GetLocalPlayer = 0x180;
Diese Funktion musst du dann wahrscheinlich aufrufen (?) und daher bekommst du dann den Pointer zum Player. Soweit ich da Bescheid weiß, kann das aber eigentlich nur über einen Remote-Thread funktionieren. Wenn du den hast kannst du mit dem Offset zu
Code:
die Lebensenergie auslesen.
public const Int32 m_iHealth = 0x100;
Ist also ein bisschen komplizierter als das was du da hast. Edit: PS: Sowas ist interessant, aber du bettelst quasi VAC gebannt zu werden. Nur so als Hinweis/Warnung. |
AW: csgo readprocessmemory, Speicher auslesen, Werte nicht wie erwartet
hallo nochmal :)
Zitat:
1. localplayer über clientdll_base + localplayer_offset 2. localplayer über (engine_dll_base + clientstate_offset) -> clientstate und dann (clientstate + localplayer_clientstate_offset) derefferenzieren da spielen soweit ich weiß funktionspointer, welche ich dann nutzte um funktionen aufzurufen, keine rolle, ich wollte eigentlich nur speicher hart auslesen. |
AW: csgo readprocessmemory, Speicher auslesen, Werte nicht wie erwartet
Zitat:
Cheat-Tools machen ja auch nichts anderes als den Speicher auszulesen. sie bereiten ihn danach noch grafisch auf. Aber wie auch immer. |
AW: csgo readprocessmemory, Speicher auslesen, Werte nicht wie erwartet
Ich wollte wirklich nicht in die Cheat Entwicklung einsteigen aber wenigstens das HP auslesen würde ich nun doch gerne zu Ende bringen :stupid:
Update: jippy!
Delphi-Quellcode:
var
locPlayer_Base, clientstate_Base : DWORD; hp : Integer; ----------------------------------------------- // so hat es geklappt, die Typen für die modul-Basis adressen sind wohl 32 bit DWORDS... ReadProcessMemory(phandle, Pointer(ClientDLL_Base + off_LocalPlayer), @locPlayer_Base, sizeof(locPlayer_Base), Val); Memo1.Lines.Add('locPlayer_Base : ' + Format('%d , %d', [locPlayer_Base, Val])); ReadProcessMemory(phandle, Pointer(locPlayer_Base + off_iHealth), @hp, sizeof(hp), Val); Memo1.Lines.Add('hp : ' + IntToStr(hp)); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz