Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Verständnisproblem need help (https://www.delphipraxis.net/114402-verstaendnisproblem-need-help.html)

wadimwadim 24. Mai 2008 18:01


Verständnisproblem need help
 
Hallo DP,
ich kenne mich leider noch nicht sehr gut mir delphi aus.
Ich habe ein Code hier im Forum gesehen und ihn übernommen, doch ich verstehe ihn nicht und kann ihn deshalb schlecht umschreiben.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ListBox1: TListBox;
    Label1: TLabel;
    BitBtn1: TBitBtn;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  ProcessHandle,WindowHandle: THandle;
  StartMem: DWord;
  lpBuffer: TMemoryBasicInformation;
  myMem: Pointer;
  dwRead: DWord;
  dwOld: DWord;
  processID,pidi : Integer;
begin
  WindowHandle :=FindWindow(nil,'Guild Wars');
  ProcessID:= GetWindowThreadProcessId(WindowHandle ,@Pidi);
  ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, false, pidi);

  if (ProcessHandle <> 0) then
  begin
    StartMem := $00400000;
    while (StartMem <> $7FFFFFFF) do
    begin
      if VirtualQueryEx(ProcessHandle, Pointer(StartMem), lpBuffer, SizeOf(lpBuffer)) = SizeOf(lpBuffer) then
      begin
        if VirtualProtectEx(ProcessHandle, lpBuffer.AllocationBase, lpBuffer.RegionSize, PAGE_EXECUTE_READWRITE, dwOld) then
        begin
          myMem := VirtualAlloc(nil, lpBuffer.RegionSize, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE);
          if (myMem <> nil) then
          begin
            if ReadProcessMemory(ProcessHandle, lpBuffer.AllocationBase, myMem, lpBuffer.RegionSize, dwRead) and (lpBuffer.RegionSize = dwRead) then
            begin
              Form1.ListBox1.Items.Add('Speicher gelesen: '+IntTohex(DWord(lpBuffer.AllocationBase),8)+', '+
                                        'Größe: '+IntToHex(lpBuffer.RegionSize,8)+', '+
                                        'gespeichert in: '+InttoHex(DWord(myMem),8));
            end;
            VirtualFree(myMem, 0, MEM_RELEASE);
          end;
          VirtualProtectEx(ProcessHandle, lpBuffer.AllocationBase, lpBuffer.RegionSize, dwOld, dwOld);
        end;
        if (lpBuffer.RegionSize <> 0) then
          inc(startMem, lpBuffer.RegionSize) else
          startMem := startMem+$1000;
      end else
        inc(StartMem,$1000);
    end;

  end;

end;
procedure TForm1.Button2Click(Sender: TObject);
begin
listbox1.Clear;
end;

end.
Könntet Ihr mir vielleicht diesen Code ein wenig erläutern und mir bei meinem Problem helfen.
Mein Problem ist, dass ich alle Speicheradressen($00400000-$7FFFFFFF) mit dem Wert '100' in einer .txt Datei, oder auf Arrays speicher möchte; Aber das nicht hinbekomme.

Das jetztige Script versteh ich kaum, ich vermute, dass er all diese Adressen im Arbeitsspeicher speichert.



MfG

wadimwadim

dominikkv 24. Mai 2008 18:19

Re: Verständnisproblem need help
 
sehe ich das richtig das das ein Trainer oÄ für Guild Wars wird?

Daniel 24. Mai 2008 18:26

Re: Verständnisproblem need help
 
Zitat:

Zitat von wadimwadim
ich kenne mich leider noch nicht sehr gut mir delphi aus.
Ich habe ein Code hier im Forum gesehen und ihn übernommen, doch ich verstehe ihn nicht und kann ihn deshalb schlecht umschreiben.

... Das Verstehen können wir Dir nicht abnehmen. Als Copy&Paste-Entwickler wirst Du auch nicht weit kommen. Wenn Du konkrete Fragen hast, hilft hier jeder gern - aber dieses allgemeine "ich habe das was an Code zusammenkopiert, macht mal bitte was draus" wird hier nichts. Garantiert nicht.

wadimwadim 24. Mai 2008 18:30

Re: Verständnisproblem need help
 
Nein, ich möchte kein Trainer oder ähnliches erstellen, Alle diese Werte sind bei Guild Wars serverside und können deshalb nicht geändert werden.
Nein, ich möchte auch kein BOT für Guild Wars schreiben.
Ich möchte nur alle Adressen rausfinden und lediglich mit ihnen arbeiten, auslesen und nicht sie manipulieren.

Ich will nur wissen, wie ich diese Daten in einer txt datei speicher kann.

Matze 24. Mai 2008 18:33

Re: Verständnisproblem need help
 
Versuche einmal den Code wenigstens grob zu verstehen. Es gibt da eine Stelle, an der ganz offensichtlich die Speicheradress-Daten in Variablen vorhanden sind.

wadimwadim 24. Mai 2008 18:41

Re: Verständnisproblem need help
 
ich schätze mal die werden in mymem gespeichert, aber ich verstehe nicht was dieses "VirtualAlloc" ist..
Und ich weiss auch nicht wie ich nach einem ganz bestimmten wert suchen kann, und nicht alle .

Apollonius 24. Mai 2008 19:54

Re: Verständnisproblem need help
 
Dir ist hoffentlich bekannt, dass man die Bedeutung von Funktionen in der Delphi-Hilfe oder der MSDN Library nachschlagen kann.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:33 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