Autor Beitrag
Biarchiv
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 688



BeitragVerfasst: Mi 24.07.02 19:46 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 997



BeitragVerfasst: 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):

ausblenden 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 215



BeitragVerfasst: 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.

_________________
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
RalfSchwalbe
Hält's aus hier
Beiträge: 1



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 688



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 106

Win95-2003 / Debian / Suse
D1/D3/D6/D7
BeitragVerfasst: 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

_________________
Wenn es im Jahre 1879 schon Computer gegeben hätte, würden diese vorausgesagt haben, daß man infolge der Zunahme von Pferdewagen im Jahre 1979 im Pferdemist ersticken würde.
(John C. Edwards, brit. Zukunftsforscher)