Cheatengine: Basepointer ändert sich

10/23/2012 18:50 abc321meins#1
Hi,
ich habe mir für das Spiel Drakensang einen Pointer auf die ExP`s mit der CE gesucht. Diesen Pointer nutze ich in meinem delphi programm um die ExP`s auszulesen. Das klappt auch wunderbar. Aber nur ein Paar Stunden.
Wenn ich z.B. das Spiel am nächsten Tag starte findet der den Wert nicht mehr.
Ich habe festgestellt das es daran liegt das sich der Basepointer ändert :confused: genauer gesagt das "app.n3app". Die CE findet den wert aber, da sie scheinbar einfach das "app.n3app" neu ausliest?
Meine Frage lautet nun: Wie kann ich es der CE mit delphi nachmachen und das "app.n3app" auslesen um daraus meinen basepointer zu bilden?
Ich stehe grad irgentwie auf dem schlauch. :(

Hier noch mein Pointer:
<Address>"app.n3app"+0091C1A0</Address>
<Offsets>
<Offset>40</Offset>
<Offset>44</Offset>
<Offset>38</Offset>
<Offset>170</Offset>
<Offset>658</Offset>
</Offsets>
10/23/2012 21:45 Nightblizard#2
Quote:
Originally Posted by abc321meins View Post
Hi,
ich habe mir für das Spiel Drakensang einen Pointer auf die ExP`s mit der CE gesucht. Diesen Pointer nutze ich in meinem delphi programm um die ExP`s auszulesen. Das klappt auch wunderbar. Aber nur ein Paar Stunden.
Wenn ich z.B. das Spiel am nächsten Tag starte findet der den Wert nicht mehr.
Ich habe festgestellt das es daran liegt das sich der Basepointer ändert :confused: genauer gesagt das "app.n3app". Die CE findet den wert aber, da sie scheinbar einfach das "app.n3app" neu ausliest?
Meine Frage lautet nun: Wie kann ich es der CE mit delphi nachmachen und das "app.n3app" auslesen um daraus meinen basepointer zu bilden?
Ich stehe grad irgentwie auf dem schlauch. :(

Hier noch mein Pointer:
<Address>"app.n3app"+0091C1A0</Address>
<Offsets>
<Offset>40</Offset>
<Offset>44</Offset>
<Offset>38</Offset>
<Offset>170</Offset>
<Offset>658</Offset>
</Offsets>
ASLR ist hier der Bösewicht. Entweder du schaltest das ganz einfach in der PE ab oder du suchst dir einfach das entsprechende Modul zur Laufzeit raus.
Siehe:
Address space layout randomization - Wikipedia, the free encyclopedia
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]
10/23/2012 23:14 abc321meins#3
Hey Nightblizard,
vielen Dank für deine Antwort ;)
Von ASLR hatte ich bis jetzt noch nichts gehört, da hätte ich ja noch ewig gesucht!

Und für die Nachwelt hier meine Funktion:
Code:
function GetBasePointerOfModule(ProcessId: dword; Modulename: string): integer;
  var
    FSnapshotHandle: THandle;
    FModulEntry32: MODULEENTRY32;
    s: string;
  begin
    result := 0;
    FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, ProcessId);
    try
      if FSnapshotHandle <> INVALID_HANDLE_VALUE then
        begin
          FModulEntry32.dwSize := SizeOf(FModulEntry32);
          if Module32First(FSnapshotHandle, FModulEntry32) then
            begin
              repeat
                s := FModulEntry32.szModule;
                if s = Modulename then
                  begin
                    result := integer(FModulEntry32.modBaseAddr);
                    break;
                  end;
              until (not Module32Next(FSnapshotHandle, FModulEntry32));
            end;
        end;
    finally
      closeHandle(FSnapshotHandle);
    end;
  end;