![]() |
MemorySpeicher effektiv durchsuchen
Hi,
Könnt ihr mir sagen wie ich den belegten Memoryspeicher eines fremden Prozesses am effektivsten durchsuchen kann? Ich habe schon gelesen von VirtualQueryEx aber so ganz genau verstehe ich diese Funktion nicht. |
Re: MemorySpeicher effektiv durchsuchen
Mit
![]() Mit ![]() |
Re: MemorySpeicher effektiv durchsuchen
Ich habe das mal ausprobiert aber ich bekomme irgendwie zu wenig Addressen raus
(Ich habs erstma nur mit Integerwerten gemacht)
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var ProcessHandle: THandle; StartMem: DWord; lpBuffer: TMemoryBasicInformation; IntValue: Integer; dwRead: DWord; dwOld: DWord; WindowName: integer; pidi: integer; begin Listbox1.Clear; WindowName := FindWindow(nil, PWideChar(Edit1.Text)); GetWindowThreadProcessId(WindowName, @pidi); ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, false, pidi); if (ProcessHandle <> 0) then begin StartMem := 0; while (StartMem < $80000000) do begin if VirtualQueryEx(ProcessHandle, Ptr(StartMem), lpBuffer, SizeOf(lpBuffer)) = SizeOf(lpBuffer) then begin if lpBuffer.State <> MEM_FREE then begin if ReadProcessMemory(ProcessHandle, lpBuffer.AllocationBase, @IntValue, 4, dwRead) = True then begin Listbox1.Items.Add('Address: ' + '$' + inttohex(Integer(lpBuffer.AllocationBase), 8) + ' Value: ' +inttostr(IntValue)); end; end; if (lpBuffer.RegionSize <> 0) then inc(startMem, lpBuffer.RegionSize) else startMem := startMem + $00000100; end else begin startMem := startMem + $00000100; end; end; end; CloseHandle(ProcessHandle); end; |
Re: MemorySpeicher effektiv durchsuchen
Zitat:
|
Re: MemorySpeicher effektiv durchsuchen
Zitat:
[OT] Nen speicher, welcher speichert wo der Speicher gespeichert ist?! :warn: [/OT] Was mich viel mehr interessieren tät... warum muss man an den Speicher eines anderen Prozesses? Kann man grundsätzlich alles auslesen? Oder kann eine Anwendung sich seinen Speicher auch sichern? Wäre ja cool wenn man Passwörter o.ä. im RAM hält... |
Re: MemorySpeicher effektiv durchsuchen
Versuch doch mal Cheat Engine (
![]() |
Re: MemorySpeicher effektiv durchsuchen
So hab das Problem behoben leider ist mein Programm trotzdem noch langsam!
Kann jmd helfen und mir Tipps geben wie es schneller geht?
Delphi-Quellcode:
function MemorySearch(Process: Cardinal; FromAddr: DWORD = $00000000; ToAddr: DWORD = $FFFFFFFF): boolean;
var _FromAddr: DWORD; mbi: _MEMORY_BASIC_INFORMATION; StartValue: longint; EndValue: longint; buffer: integer; i: longint; bytesread: cardinal; begin _FromAddr := FromAddr; while _FromAddr < ToAddr do begin VirtualQueryEx(Process, Ptr(_FromAddr), mbi, sizeof(_MEMORY_BASIC_INFORMATION)); //<> MEM_FREE oder = MEM_COMMIT and (mbi.Protect = PAGE_READWRITE) and (mbi.Type_9 = MEM_PRIVATE) if (mbi.State = MEM_COMMIT) and (mbi.Protect <> PAGE_NOACCESS) and (mbi.Type_9 = MEM_PRIVATE) then begin StartValue := Integer(mbi.BaseAddress); EndValue := Integer(mbi.BaseAddress) + mbi.RegionSize; for i := StartValue to EndValue - 1 do begin if ReadProcessMemory(Process, Ptr(i), @buffer, Sizeof(integer), bytesread) = False then begin Continue; end else begin if buffer = 1 then Form1.ListBox1.Items.Add('Start: $' + inttohex(i, 8) + ' Value: ' + inttostr(buffer)); end; Form1.Label1.Caption := inttostr(form1.ListBox1.Items.Count); Application.ProcessMessages; end; Form1.Label1.Caption := inttostr(form1.ListBox1.Items.Count); Application.ProcessMessages; end; _FromAddr := _FromAddr + mbi.RegionSize; end; Showmessage('Ready'); end; |
Re: MemorySpeicher effektiv durchsuchen
Ich habe selber eine Lösung gefunden: Ich machs einfach mit Threads, die sich den Speicherbereich aufteilen.
Trotzdem Danke! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:41 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