Odczyt danych z pamieci programu..

0

Jak w c++ odczytać dane z pamięci innego programu podając adres interesującej mnie danej..?

wiem jak zrobić to w delphi:
chodzi o cos takiego, pisze sie 2 funkcje, 1 aby mozna bylo odczytac liczby(integer) i druga aby mozna było odczytać tekst (string).. w delphi wyglądają one tak:
odczytywanie tekstu:

 function MemReadString(Address: Integer): String;
 var
 NB : LongWord;
 Temp : ARRAY [1..255] OF Byte;
 I : Byte;
 IDProcess, proc_ID : Cardinal;
 begin
 GetWindowThreadProcessID(FindWindow('Nazwa programu', nil), @proc_ID);
 IDProcess := OpenProcess(PROCESS_ALL_ACCESS, false, proc_ID);
 Result := '';
 ReadProcessMemory(IDProcess, Ptr(Address), @Temp[1], 255, NB);
 for I := 1 to 255 do
 begin
 if ((Temp[I] = 0) or (Temp[I] = $0F)) then
 Break;
 Result := Result + Chr(Temp[I]);
 end;
 end;

odczytywanie liczb:

function ReadMemInteger(Address: Cardinal): Cardinal; //Read adress:value
 var
 ProcId: Cardinal;
 tProc: THandle;
 NBR: Cardinal;
 value:integer;
 begin
 GetWindowThreadProcessId(FindWindow('Nazwa programu', Nil), @ProcId);
 tProc:= OpenProcess(PROCESS_ALL_ACCESS, False, ProcId);
 ReadProcessMemory(tProc, Ptr(Address), @value, 4, NBR);
 CloseHandle(tProc);
 Result:=value;
 end; 

Następnie przypisuje sie adres z pamięci do zmiennej:

 Zmienna_X = $66EA66;

i aby uzyskac ta zmienna np w labelu uzywałem kodu:

label1.Caption:=inttostr(ReadMeminteger(Zmienna_X));

z c++ jestem troche zielony, dlatego prosze, zeby ktos mi to przełozyl z delphi na c++ lub tez napisał cos innego, ale dzialajacego tak samo

yol

0

nikt nie pomoże?

0

Nie do końca wiem o co Ci chodzi, bo nie jestem wstanie wykminić tego z kodu Delphi, ale wydaje mi się, że potrzebujesz adresu programu ( więc wydaje mi się, że adresu funkcji main )

#include <iostream>

int main( )
{
	std::cout << main;

	getchar( );
	return 0;
}
0

Najprosciej bez pisania dllki i dll injectingu to robimy tak:

  1. Znajdujemy uchwyt do okna HWND
  2. Szukamy pid procesu
  3. Za pomoca pidu mozemy znalezc Handle
  4. Majac uchwyt hadnle do procesur mozemy za pomoca funkcji WriteProcessMemory i ReadProcessMemory odczytac dane z pamieci procesu wskazujac miejsce w pamieci i losc danych. To co dostaniesz to tylko odczytane bajt po bajcie dane, a to jak je zinterpretujesz(int czy string) to juz twoja sprawa. Musisz wiedziec do jakiego typu danych w pamieci podajesz adres.

Jesli jest to do jakiejs gry z zabezpieczeniami to ten sposob nie zadziala, bo proces nie pozwoli na taka manipulacje "z zewnatrz"

Czasami trzeba jeszcze uzyc VirtualAlloc(Ex) w celu zmiany dostepu do pamieci(odczyt, zapis, blokada).

0

Jeżeli piszesz w Dev-C++ to f-cje wyglądają tak samo (bilbioteka windows.h) tylko inaczej uchwyty wyglądają (HANDLE).

1 użytkowników online, w tym zalogowanych: 0, gości: 1