Odczyt informacji z pamięci

0

Witajcie.

Na początku chciałbym zaznaczyć że jestem początkującym programistą (o ile w ogóle moge się tak nazwać).
Szukam rozwiązania dla mojego pomysłu, mianowicie chciałbym odczytywać informacje zawarte w pamięci. Nie wiem jak sie za to zabrać gdyż nie umiem znaleźć funkcji która za to odpowiada.
Chodzi o to że podał bym dwie wartości Offset'u a program wyświetlał by mi zawartość tych komórek pamięci.
Nie wiem czy taka operacja w ogóle jest możliwa w języku c/c++ a może da się to zrobić tylko w asemblerze?
Z góry dziękuje za wskazówki pomocnicze w rozwiązaniu mojego problemu.

Pozdrawiam Artur.

0

Zalezy co chcesz zrobic? Bo musisz wiedziec, ze pamiec jaka widzi Twoj program to pewien obraz rzeczywistej pamieci. Procesor nie pozwoli Ci na zobaczenie pelnej mapy pamieci. System ma specjalny proces, ktory odpowiada za translacje adrsow podanych przez Ciebie wzgledem rzeczywistych. A jezeli chodzi o odczyt to najlepiej wstawki asemblerowe z funkcjami WinAPI, ktore pozwola Ci okreslic czy dany kawalek pamieci jest w ogole mozliwy do odczytu, czy nie jest przypadkiem zabezpieczony - IsBadReadPtr().

0

poprawka - tłumaczenie adresowania zachodzi w procesorze - nie ma odpowiedniego procesu w systemie. A jako, że Windows działa w 32bit trybie chronionym ze stronnicowaniem - niektóre adresy wirtualne nie moją fizycznych odpowiedników. Jeśli chcesz odczytywać dane w przestrzeni adresowej swojego programu możesz to zrobić poprzez wskażniki :

BYTE* cos = 0x400000; //adres w pamięci
BYTE bajt = cos[0]; //odczytanie bajtu

w przypadku dostępu do przestrzeni adresowej innego programu - ReadMemoryProcess. Inna sprawa to dostęp do pamięci ram jako takiej - potrzebny jest dostęp do pamięci z zastosowaniem adresów liniowych /mniejsza o to - to dosyc skomplikowane/ - są do tego odpowiednie funkcje dostępne dla sterowników.

0

A więc chodzi o to że jak włącze pewną gre to przechowuje ona w pamięci moje hasło. Chciałbym te dane z tamtąd wyciągnąć. Dla każdego hasła zostaje przypisany inny identyfikator podczas logowania. (gdyż jest to gra internetowa). Jak na razie za każdym razem musze używać WinHex'a
Wybieram "Open RAM" zaznaczam aplikacje z której chce przeczytać i wybieram Primary memory. A potem przechodze do ofsetu jaki mnie interesuje. Niestety to trwa dość sporo czasu.

Dziękuje za pomoc Artur.

0

w takim przypadku ReadMemoryProcess - dokumentacja na msdn'ie.

0

W twoim programie (uruchomianym łącznie z grą) rób kolejno:

  1. Zrzuć listę aktualnie uruchomionych procesów funkcją CreateToolhelp32Snapshot
  2. Poszukaj w tej liście swojego procesu używając funkcji Process32First i Process32Next
  3. Jak już znajdziesz to otwórz go ( OpenProcess)
  4. Użyj ReadProcessMemory z uzyskanym uchwytem do procesu gry, interesującym offsetem, buforem itp.

Powodzenia

0
Deus napisał(a)

poprawka - tłumaczenie adresowania zachodzi w procesorze - nie ma odpowiedniego procesu w systemie.

Wlasnie, ze sie mylisz. System zaiwera nawet odpowiednie tablice translacyjne adresow rzeczywistych. Nie mam akurat przy sobie odpowiedniego zbioru autorstwa Abraham Silberschatz, to bym zacytowal czesc.

// a o MMU Ty słyszał Kaźmirz? - Q

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