Entwickler-Ecke

Windows API - Nach String im gesamten RAM suchen


Biarchiv - Mi 24.07.02 19:46
Titel: Nach String im gesamten RAM suchen
Hallo,

Wie kann man den Kompletten RAM nach einen String durchsuchen.
z.b: das soll gesucht werden
z.B.: auch HEX ( FF 3B 00 09)

Also nach Hex oder nach Text suchen.


Andreas Pfau - Fr 06.09.02 16:19
Titel: RAM durchsuchen
Sorry, aber davon rate ich dir ab. Windows-Versionen ab NT verweigern den Zugriff auf fremde Speicherbereichen. Solltest du es aber trotzdem nicht lassen können, probiers mal so oder so ähnlich (nicht getestet):


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
const
 gesucht=$1234;
var
 i:integer;
begin
 for i := 0 to $FFFFFFFF - sizeof(gesucht) do begin
  if pinteger(pointer(i))^ = gesucht then begin
   showmessagefmt('Adresse = %d', [i]);
   break;
  end;
 end;
end;


Bei einem String wirds kompliziert, am einfachsten geht das mit kurzen Strings (ShortString). Bei einem langen String irgendwie so:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
const
 gesucht='hallo welt';
var
 i:integer;
begin
 for i := 0 to $FFFFFFFF - (sizeof(gesucht) + length(gesucht)) do begin
  if pstring(pointer(i))^ = gesucht then begin
   showmessagefmt('Adresse = %d', [i]);
   break;
  end;
 end;
end;


OregonGhost - So 08.09.02 11:27

Das durchsucht aber nicht den RAM sondern den Adressraum der aufrufenden Anwendung :!: , und das wird ziemlich sicher zu einer Zugriffsverletzung führen, wenn du auf Bereiche zugreifst, die Windows für deine Anwendung nicht gemappt hat.
Wenn du es machen willst, kannst du mit OpenProcess() und ReadProcessMemory() versuchen, auf die Adressräume der anderen Anwendungen zuzugreifen.
Keiner der beiden Wege erlaubt allerdings den physikalischen Speicher auszulesen, keine Ahnung wie das geht.


RalfSchwalbe - Di 01.10.02 15:38

Hi,
bis Delphi 5 konnte man auf den Speicher verweisen mit:

var
buf : array of char absolute 0;


Biarchiv - So 06.10.02 10:50

Hallo,

Danke für Eure Antworten.
Ja, ich wolte so was machen.
Ich will einen Protector machen. Wenn man eine Datei kopieren will hat er
die defekte Datei.
Erst wenn er sie öffnet sollte nach einen bestimmten String im Ram gesucht werden
und gepacht so das sie Ausführbar ist.

Wie lassen sich gefundene Hex Ketten in bestimmte abändern?
Ist das auch möglich.


SMI - So 06.10.02 17:57

Rein programmiertechnisch erhältst du unter Windows NT, 2000 erst ab dem Dispatch_level Zugriff auf den Arbeitsspeicher, jedoch besteht das Problem, dass Windows nur Teiber mit einer festvorsgeschriebenen Struktur den Zugang zum Dispatch_level erlaubt. Desweiteren verwendet Windows virtuellen Arbeitspeicher, der wird von Treibern, die auf dem Dispatchlevel laufen verwaltet. Daher sind Zugriffe auf den Pagetable, den Virtuellen Arbeitsspeicher, erst unter Dispatch_level möglich, bzw. Zugriffe auf den RAM erst über dem Dispatch_level möglich. Nur zur Info Programme, selbst die mit höchster Priorität laufen nur im Passive_Level.

Somit geht es einem mit Speicher wie in der Quantenphysik, entweder kennt man den RAM oder den Virtuellen Speicher, beides gleichzeitig ist unmöglich.

SMI