Einzelnen Beitrag anzeigen

Benutzerbild von SnuffMaster23
SnuffMaster23

Registriert seit: 13. Feb 2006
Ort: Kempten
253 Beiträge
 
#1

(Zugriffs-)Probleme mit "Trainer"

  Alt 25. Mai 2007, 22:12
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 = 'edgarthen 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?
"Conspiracy is the poor man's mapping of the world" - Fredric Jameson
  Mit Zitat antworten Zitat