Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi (Zugriffs-)Probleme mit "Trainer" (https://www.delphipraxis.net/92780-zugriffs-probleme-mit-trainer.html)

SnuffMaster23 25. Mai 2007 22:12


(Zugriffs-)Probleme mit "Trainer"
 
Moin!
Ich versuch grad ein Tool zu schreiben um mit einem Addon für WoW zu kommunizieren.
Hab mir gedacht, ich kann da munter im Speicher von WoW lesen und schreiben, aber ich kann scheinbar garnicht darauf zugreifen. ReadProcessMemory liefert schon beim ersten Zugriff false :(

Dann hab ich versucht, WoW damit erst zu starten und mich als Debugger einzuschleusen:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
  SecAttr: SECURITY_ATTRIBUTES;
  SecDesc: SECURITY_DESCRIPTOR;
  StartInf: STARTUPINFO;
begin
  InitializeSecurityDescriptor(@SecDesc, SECURITY_DESCRIPTOR_REVISION);
  with SecAttr do
  begin
    nLength             := SizeOf(SECURITY_ATTRIBUTES);
    lpSecurityDescriptor := @SecDesc;
    bInheritHandle      := false;
  end;

  FillChar(StartInf, SizeOf(StartInf), 0);
  StartInf.cb         := SizeOf(StartInf);
  StartInf.wShowWindow := SW_SHOW;
  StartInf.dwFlags    := STARTF_USESHOWWINDOW;

  if CreateProcess(PChar(Pfad), '', @SecAttr, nil, false, DEBUG_PROCESS, nil, PChar(ExtractFilePath(Pfad)), StartInf, ProcInfo) then
  begin
    Button1.Enabled := true;
  end;
end;
Es geht jedoch nichtmal auf bzw. ist nicht zu sehen und belegt nur ca. 80k Speicher.

Damit wollte ich erstmal versuchen, die Variable vom Addon-Script zu finden, das ist natürlich noch nicht endgültig ;)
Zu erkennen sollte die Variable daran sein dass 255 Bytes voll mit 'edgar' drin stehen.
Da sin jetzt noch einige Debug-Features drin wie z.B. das mit dem Richedit.
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  c, num: Cardinal;
  buf1,
  buf2:   PChar;
  i, Flag: Integer;
  Reslt:  Boolean;
begin
  c := FindWindow(nil, 'World of Warcraft');
  if c > 0 then
  begin
    GetWindowThreadProcessId(c, @c);
    c := OpenProcess(PROCESS_ALL_ACCESS, False, ProcInfo.dwProcessId);

    for i := 0 to 51 do
    begin
      buf2 := PChar(buf2 + 'edgar');
    end;

    i := 0;
    Reslt := true;
    while Reslt do
    begin
      while ReadProcessMemory(c, Ptr(i), buf1, 5, num) do
      begin
        RichEdit1.Lines.Add(IntToStr(i));
        inc(i);
        if buf1 = 'edgar' then break;
      end;
      Reslt := ReadProcessMemory(c, Ptr(i), buf1, 255, num);
      if buf1 = buf2 then
      begin
        Flag := -1;
        break;
      end;
    end;

    RichEdit1.Lines.Add(IntToStr(Flag));

    CloseHandle(c);

    Timer1.Enabled := false;
  end;
end;
Was mach ich falsch, wie mach ichs richtig - und - hab ich überhaupt ne Chance die Daten von dem Script zu finden und zu manipulieren?

turboPASCAL 26. Mai 2007 06:54

Re: (Zugriffs-)Probleme mit "Trainer"
 
Deine SSuchschleife ist ein wenig komisch. Wer garantiert dir denn das in den gelesenen
5 Chars "edgar" steht sondern zB. "öÂedg". du solltest den Tähler nur un eins erhöhen.
QAuserdem dind die Abbruchbedingungen nicht klar def.

CCRDude 26. Mai 2007 09:56

Re: (Zugriffs-)Probleme mit "Trainer"
 
Hmmm... also da Du ein WoW installiert hast, hast Du auch die Benutzungsbedingungen durchgelesen ( :roll: ), deswegen ist mir reichlich unklar, woher Deine Vermutung kommt, Du könntest da "munter" im Speicher lesen oder schreiben. Dummerweise bekommt man die nachträglich so gut wie nicht mehr angezeigt, wirst Du beim nächsten Patch nochmal schauen müssen, wenn Dein Account dann noch nicht gesperrt ist ;)

Kurz gesagt, das liest Du wahrscheinlich schon aus obigen Zeilen, die mögen keine Cheats, überwachen dementsprechend durchaus auch im Client selber, was da so mit unerlaubten Methoden (und ein ReadProcessMemory ist definitiv untersagt) passiert, und reagieren dann empfindlich.

OregonGhost 26. Mai 2007 11:36

Re: (Zugriffs-)Probleme mit "Trainer"
 
Was du vorhast, ist nicht nur verboten, wie CCRDude anmerkte, sondern auch nicht gerade einfach, weil WoW einen relativ umfangreichen Cheatschutz mitbringt. Als Spieler würde ich außerdem an dich appellieren, das gar nicht erst weiterzuverfolgen. Falls doch, sind die Chancen realistisch, dass du zu der nächsten "100000 Cheater gebannt"-Meldung auf der Startseite gehörst.

BBG 26. Mai 2007 11:45

Re: (Zugriffs-)Probleme mit "Trainer"
 
Siehe auch hier.

OregonGhost 26. Mai 2007 11:52

Re: (Zugriffs-)Probleme mit "Trainer"
 
Ohne eine gültige Rechtsberatung geben zu können, behaupte ich, dass es irrelevant ist, ob der Speicher unter Copyright steht. Das AUslesen und das Verändern desselben im Spiel verstößt gegen die AGB des Accounts.

SnuffMaster23 26. Mai 2007 12:24

Re: (Zugriffs-)Probleme mit "Trainer"
 
@turboPASCAL: inc(i) erhöht doch nur um eins :?
Und die Abbruchbedingungen, naja, ich les halt so weit bis ReadProcessMemory aus irgend einem Grund nichts mehr lesen kann, also false zurückgibt. Das war auch nur der erste Versuch, ich kann ja sowieso nichts lesen...

Nein, das soll kein Cheat werden sondern nur ein Ingame-IRC-Client. Und da man mit (Blizzards) LUA nicht direkt auf den Server verbinden kann wollte ich das so machen.

Neutral General 26. Mai 2007 12:27

Re: (Zugriffs-)Probleme mit "Trainer"
 
Naja es soll vielleicht kein Cheat werden aber ob dir Blizzard das abnimmt ist die andere Frage. Außerdem schätze ich ist es allgemein verboten im Speicher von WoW rumzuwühlen.

turboPASCAL 26. Mai 2007 14:05

Re: (Zugriffs-)Probleme mit "Trainer"
 
Zitat:

Zitat von SnuffMaster23
@turboPASCAL: inc(i) erhöht doch nur um eins :?
[...]

:oops: Ja, das machst du... ich habe mich total verguckt und zuDDem noch zahlreich Vertippt.
Ist wohl nicht mein Tag heute. :stupid:

Christian Seehase 26. Mai 2007 15:14

Re: (Zugriffs-)Probleme mit "Trainer"
 
Moin Snuffmaster,

warum überprüfst Du eigentlich nicht mal das von OpenProcess zurückgegebene Handle auf Gültigkeit?
Ich möchte fast wetten, dass OpenProcess fehlschlägt, und GetLastError Dir 5 (ACCESS_DENIED) zurückgibt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:05 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz