Autor Beitrag
vralfy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Mo 26.05.03 17:35 
Ich habe 2 Programme:

UD_client von United Devices
Samurize

ich will mit Samurize den Fortschritt von UD auf meinem Desktop zeigen lassen. Ich dachte mir ich lese den RAM aus und schreib das Ergebniss in eine txt-file die samurize dann einfach ausgibt. Problem ist.. ich lese zwar .. aber das falsche. Ich habe eine Konsoleanwendung gewählt, damit sie später als Dienst laufen kann.

So sieht es aus:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
program Project1;
{$APPTYPE CONSOLE}
uses
  SysUtils;
var p:^integer;
    addr:integer;
begin
   addr:=$0046AE18;
   integer(p):=addr;
   writeln('Wert ('+inttohex(addr,8)+'): '+inttohex(p^,8)+' :'+inttostr(p^));
   readln(ans);
end.


die Adresse ist die richtige (hab ich mit nem Cheattool gefunden), aber das Programm gibt mir nur mist aus.

Weiß jemand wie ich dieses Problem löse, und woran das liegt?

Danke


Moderiert von user profile icontommie-lie: Delphi-Tags hinzugefügt

_________________
Wer Rechtschreibfehler findet, darf sie behalten
Andreas Pfau
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 997



BeitragVerfasst: Mo 26.05.03 19:50 
Hallo,

SO GEHT'S NICHT! Mit Windows ist das so: Wenn ein Programm, sagen wir mal dein UD_Client, RAM anfordert, schaut Windows, wo Platz im RMA ist, und weist den zu. Das kann immer an einer anderen Adresse sein. Deine HEX-Adresse war nur in dem Augebnlick gültig, als du dein Cheattol angewendet hast. Im Extremfall kann sie eine Nanosekunde später nutzlos sein, und unter Umständen sogar zu Speicherschutzverletzungen führen.

Ich würde in deinen UD_Client (ist das Prog überhaupt von dir?) entweder DDE oder MMF einbauen, und das mit Samurize auslesen. Oder der Client schickt Windows-Messages an Samurize. Schau dir hierzu in der SDK den Begriff "RegisterWindowMessage()" an, das wird sicher helfen.

Wenn das Prog nicht von dir ist, solltest du dich evtl. mit dem Hersteller in Verbindung setzen (Homepage?), villeicht hat das Prog schon eine DDE-Schnitstelle.

Aber das mit dem RAM vergiss mal wieder schnell :wink:

_________________
Life is a bad adventure, but the graphic is really good!
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 26.05.03 21:35 
Desweitern kann man unter 32-Bit Windows Gott sei Dank nicht so ohne weiters in fremden Adressräumen rumfuschen.

Stichworte für dich wäre: ReadProcessMemory und WriteProzcessmemory.
vralfy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Mo 26.05.03 23:02 
@Andreas Pfau
Das wusste ich schon aber ich dachte das wäre ein guter Anfang.
UD_Client ist ein Teil von mehreren Programmen die sowas wie Seti@Home oder RC5 darstellen.
@Luckie
Deine Antwort hat mir sehr geholfen und es ist folgender kurzer code herraus gekommen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
program UD_watch;
{$APPTYPE CONSOLE}
uses
  SysUtils, windows;
var p:^integer;
    handle,value:integer;
    nob:Cardinal;
begin
   handle:=OpenProcess(PROCESS_ALL_ACCESS,true,$057C);
   if handle=0 then begin write('Prozess nicht geoeffnet!'); exit; end;
   integer(p):=$0046AE18;
   if ReadProcessMemory(handle, p, @value, 4, nob) then begin
      write(inttostr(value));
   end;
end.

Mein Problem ist jetzz seit 4 Stunden wie finde ich die ProcessID ($057C) raus die sich ja ständig ändert.
Wenn ihr mir da nochmal helfen koenntet wäre das sehr net.
Aber ich danke trotzdem :)

_________________
Wer Rechtschreibfehler findet, darf sie behalten
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 26.05.03 23:10 
CreateToolHelp32Snapshot heißt das Zauberwort.

Aber mal was anderes: Was hat deine Topicüberschrift mit deinem Problem zu tun? :roll:
vralfy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Mo 26.05.03 23:19 
Danke ich werde es gleich mal probieren.

Also wegen dem Topic: Ich wusste nicht besseres also dachte ich mir da ich ein Prog schreiben will das im RAM (Gehirn) nach Werten (Gedanken) rumfuscht, nenne ich das ganze Gedankenlesen :)

_________________
Wer Rechtschreibfehler findet, darf sie behalten
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 26.05.03 23:21 
Wie wäre es mit: "Speicherbereich eines fremden Prozesses auslesen"? :wink:
vralfy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Di 27.05.03 00:28 
Gute Idee :)

aber wo wir bei thema sind:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
//hSnap:hwnd;
//pe : ProcessEntry32;

hSnap := CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
if Process32First(hSnap, pe) then begin
  writeln(pe.szExeFile);
  while Process32Next(hSnap, pe) do writeln(pe.szExeFile);
end else begin writeln('NO PROCESS'); exit; end;


wieso les ich 'NO PROCESS' ??

_________________
Wer Rechtschreibfehler findet, darf sie behalten
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 27.05.03 00:38 
Hast du die ProcessEntry32-Struktur initialisiert?
vralfy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Di 27.05.03 00:53 
ausblenden Delphi-Quelltext
1:
pe.dwSize := SizeOf(ProcessEntry32);					

so?

_________________
Wer Rechtschreibfehler findet, darf sie behalten
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 27.05.03 00:54 
Zum Beispiel, aber da sind noch ein paare andere Dinge. uich arbeite gerade dran. 10 Minuten oder so.
vralfy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Di 27.05.03 00:55 
ja ich habs .. hatte es nur an der falschen stelle ... Vielen dank nochmal ich glaub das hat jetzt alle meine Probleme gelöst :)

_________________
Wer Rechtschreibfehler findet, darf sie behalten
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 27.05.03 01:03 
Ich habs jetzt so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
var
  hSnapShot          : Cardinal;
  pe32               : TProcessEntry32;
begin
  hSnapShot := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
  if hSnapShot <> 0 then
  begin
    ZeroMemory(@pe32, sizeof(pe32));
    pe32.dwSize := sizeof(ProcessEntry32);
    writeln(pe32.szExeFile);
    if Process32First(hSnapShot, pe32) = true then
    begin
      while Process32Next(hSnapShot, pe32) = true do
      begin
        writeln(pe32.szExeFile);
      end;
    end;
  end;
  readln;
end.
vralfy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Di 27.05.03 01:11 
und ich habs jetz so;
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
program UD_watch;
{$APPTYPE CONSOLE}
uses
  SysUtils, windows, TlHelp32;
var p:^integer;
    handle,value,pid:integer;
    nob:Cardinal;
    hSnap:hwnd;
    pe : ProcessEntry32;
begin
   pid:=0;
   hSnap := CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
   pe.dwSize := SizeOf(ProcessEntry32);
   if Process32First(hSnap, pe) then begin
     if UpperCase(pe.szExeFile)=UpperCase('UD.EXE'then pid:=pe.th32ProcessID;
     while Process32Next(hSnap, pe) do if UpperCase(pe.szExeFile)=UpperCase('UD.EXE'then pid:=pe.th32ProcessID;
   end else begin writeln('NO PROCESS'); exit; end;

   handle:=OpenProcess(PROCESS_ALL_ACCESS,true,pid);
   if (handle=0and (pid=0then begin write('Prozess nicht geoeffnet!'); exit; end;
   integer(p):=$0046AE18;
   if ReadProcessMemory(handle, p, @value, 4, nob) then begin
      write(inttostr(value));
   end;
end.

_________________
Wer Rechtschreibfehler findet, darf sie behalten
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 27.05.03 01:14 
Du mußt aufpassen: pe.szExeFile liefert dir unter 98 auch den kompletten Pfad!
vralfy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Di 27.05.03 01:16 
au .. danke fuer die warnung :)

_________________
Wer Rechtschreibfehler findet, darf sie behalten
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 27.05.03 01:18 
Du solltest aber noch prüfen, ob CreateToolhelp32Snapshot auch einen Wert ungleich null liefert.
vralfy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Di 27.05.03 01:21 
wenn ich sowas mache wie

if hSnap=0 then ... exit ...
sagt mir delphi das dieser Vergleich immer Falsch ergeben wird (??)

_________________
Wer Rechtschreibfehler findet, darf sie behalten
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 27.05.03 01:24 
Meins nicht. D6 Personal.
vralfy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Di 27.05.03 01:26 
D6 Enterprise aber komisch isses trotzdem

_________________
Wer Rechtschreibfehler findet, darf sie behalten