Pamiec procesu, odczyt danych.

0

Witam.
Czy wie ktos moze jak odczytac jakiekolwiek dane z pamieci procesu? Slyszalem, ze jest to mozliwe, ale nie wiem jak sie do tego zabrac. Chodzi mi o np. odczytanie loginu, hasla do jakiejs gry, gg, skype itp.

0

Kolejny haxi0r :/

0

interesuje mnie po prostu jak to sie robi...

0

OpenProcess ReadProcessMemory o ile w
pamięci procesu faktycznie w ogóle znajdują się takie dane, często tak - jednak nie zawsze ma to miejsce.
W przypadku GG, z tego co ustaliłem LordPE dumpując pamięć ma to miejsce, jednak pewnie w zależności
od wersji czy ilości kontaktów albo długości opisów może to być, z tego co mi się wydaje - w innym miejscu
dlatego to już sobie sam spróbuj namierzyć. Z tego co widzę chcesz pisać malware, a w tym nie pomogę :/

0

a czy moglbys wyjasnic jak z danego adresu odczytac ta wartosc i skonwertowac do string? bo gdzies nie moge sobie poradzic :/

0

Wystarczyło pogooglować. Poniżej masz "życiowy" przykład, aby móc go sprawdzić sobie w praktyce.
Ów kod wyciąga z pamięci procesu WinAmpa, nazwę aktualnie odtwarzanego pliku lub adresu url:

function GetWinampFileName: string;
var
  TempStr : string;
  WinAmp_HWND, TempHandle : THandle;
  Dat2 : array[0..500] of Char;
  TrackPos : integer;
  Temp, MPointer : cardinal;
begin
  Result := '';
  WinAmp_HWND := FindWindow('Winamp v1.x', nil);
  if WinAmp_HWND <> 0 then
    begin
    TrackPos := SendMessage(WinAmp_HWND, WM_USER, 0, 125);
    MPointer := SendMessage(WinAmp_HWND, WM_USER, TrackPos, 211);
    GetWindowThreadProcessId(WinAmp_HWND, TempHandle);
    WinAmp_HWND := OpenProcess(PROCESS_ALL_ACCESS, False, TempHandle);
    ReadProcessMemory(WinAmp_HWND, Pointer(MPointer), @Dat2, 500, Temp);
    CloseHandle(WinAmp_HWND);
    TempStr := Dat2;
    Result := TempStr;
    end;
end;

Przykłąd użycia:

  Edit1.Text := GetWinampFileName;
end;

Zamiast WinAmp_HWND do zmiennej może trafiać uchwyt innego procesu. I zamiast podstawiania
pod zmienną MPointer danych z procesu. Możesz podać konkretny adres, na przykład w taki sposób

  MPointer := ($0040004E);

To wyświetlić powinno "This program cannot be run in DOS mode" i do tego jeszcze "krzaki" ASCII.

0

tak prawde mowiac ten przyklad mi nie dziala, a jak juz to wyswietla jakies krzaczki... ALE wpadlem na pomysl, aby zastapic tablice Char na tablice typu Byte, a przypisanie danych do TempStr, wykonalem w petli z rzutowaniem na Char:

for I := 0 to 500 do
  TempStr := TempStr + Chr(Dat2[i]);

dzieki temu program pobieral z pamieci wartosci ASCII, a potem konwertowal je na normalne znaki. dziala, dzieki za pomoc :)

0
warez napisał(a)

tak prawde mowiac ten przyklad mi nie dziala,

Dziwne mi działa bez problemów z WinAmpem w wersji 5.35.

dzieki temu program pobieral z pamieci wartosci ASCII, a potem konwertowal je na normalne znaki. dziala, dzieki za pomoc :)

Można i tak, ale jeżeli odczytujesz prawidłowy adres z procesu i zawiera on znaki Ascii będące literami
to powinien je wyświetlić poprawnie. Ewentualnie string będzie "przerwany" jeżeli zawiera znak/i $00.

0

moze to przez wersje, mam 5.54, a czy moglbys jeszcze zdradzic skad wziales tutaj:

FindWindow('Winamp v1.x', nil);

wartosc 'Winamp v1.x' ?

0

Ze starych tutoriali dotyczących sterowaniem WinAmpa. Może Ty masz Player w nowszej wersji, bo
ja u siebie używam tego "starego" okna (bez menu pod belką). Poza tym jak jakimś programem - na
przykład, tdwininfo sprawdzisz klasę okna WinAmpa najeżdzając na nie myszką to masz Winamp v1.x.

0

program, musze przyznac, bardzo fajny. ja mam na winampie 'BaseWindow_RootWnd'. gg jest ciekawsze, bo wyglada tak: 'Afxb00000005:00010227', a na dodatek koncowka (po ostatnim dwukropku) zmienia sie po kazdym uruchomieniu programu.

0

Aby funkcja OpenProcess otworzyłą poprawny proces, jest potrzebny jego indentyfikator (ProcessID
lub inna nazwa Pid, ale to pewnie wiszz). Poniższa funkcja zwraca taki numer jeżeli jako parametr
podasz jej poprawną nazwę procesu - na przykład: winamp.exe. Tylko, że w przypadku akurat
WinAmpa, aby uzyskać dokładny adres nazwy pliku potrzeba też zwrócownych przez funkcję
SendMessage wartości. Owa funkcja potrzebuje jako parametru uchwytu okna, a nie Pida. Przykład na
uzyskanie HWND z Pid masz w programie, który kiedyś napisałem. Link poniżej, no i ważne żeby do
sekcji uses dodać moduł TlHelp32; Oto link: http://www.speedyshare.com/497330673.html I mozę dało
by się ten HWND z PIDa uzyskać inaczej, ale mi się udało tylko w taki sposób. Ważne są dwie zmienne,
w sekcji public. Ponieważ kiedy próbowałem scalić trzy funkcje z tego programu w jedną - to program
nie działał poprawnie zwracająć wyjątek AV. Dlatego zrobiłem w taki sposó, aby w ogóle zadziałało :)

function ProcessIDFromAppname32(AppName: string): DWORD;
var
  SnapShot : THandle;
  processEntry : TProcessEntry32;
begin
  Result := 0;
  AppName := AnsiUpperCase(AppName);
  SnapShot := CreateToolhelp32SnapShot(TH32CS_SNAPPROCESS, 0);
  If SnapShot <> 0 then
  try
    ProcessEntry.dwSize := SizeOf(ProcessEntry);
    If Process32First(SnapShot, ProcessEntry) then
    repeat
      If Pos(AppName, AnsiUpperCase(ExtractFilename
        (StrPas(processEntry.szExeFile)))) > 0 then
        begin
        Result:= ProcessEntry.th32ProcessID;
        Break;
        end;
    until not Process32Next(SnapShot, ProcessEntry);
  finally
    CloseHandle(SnapShot);
  end;
end;

EDIT: teraz wykonałem kilka testów i wiem już, że jak wszsytkie trzy funkcję z programu Pid_To_Hwnd
umieszcze w jednej to funkcja EnumProcess źle pobiera Pid z parametru przez co nie zwraca Hwnd w
ogóle. Jeszcze z nią pokombinuje, chociaż póki co jak chcesz to używaj programu - w obecnej wersji.

EDIT2: spróbowałem jeszcze raz zcalić dwie funkcje w jedną, ale teraz zwraca mi wyjątek AV, także z
dopaoswywaniem tej funkcji i przerobieniem jej na bardziej uniwersalną, sobie daruję, bo się nie uda :/
Po prostu funkcja GetWindowThreadProcessId wywołana w procedurze EnumProcess musi być jakby
"na zewnątrz" czyli w kodzie Formatki, a nie innej funkcji. Pewnie to przez konieczny pareametr stdcall.

0

dziala bardzo ladnie, dzieki za wszystko :)

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