Wpis z mikrobloga

@krupek: bardzo prosto, znajdujesz sobie np tsearchem adres tego w pamieci, piszesz programik ktory otwiera pamiec procesu np guwno.exe, pobiera spod danego adresu wartosc i robi sobie z nia co chce.. To tak w skroce. Szukaj w google: reading memory adress in [TUTAJTWOJJEZYK]
@krupek: @enyn6: adres najprawdopodobniej nie jest stały, ale istnieje gdzies w pamieci wskaznik do tego adresu... ktorego adres tez moze nie byc staly... Zalezy to od aplikacji, jednak zawsze istnieje pewien lancuch wskaznikow, na koncu ktorego sa dane, ktorych szukasz, a na poczatku ktorego jest wskaznik, ktory zawsze przebywa pod stalym adresem(nie absolutnie, tylko stalym wzgledem poczatku programu)
@Flood: czyli innymi słowy ostatecznie - jestem w stanie dzięki tym wskaźnikom jakoś sobie poradzić aby po restarcie mój moduł dalej działać? Czyli czy iść tą drogą czy szukać innej?
@enyn6: Zmienia, nieznacznie ale jednak, bo musisz najpierw dokonac iles tam dereferencji wskaznika, zeby dostac sie do danych. Wiaze sie to z oszukiwaniem wbudowanego systemu typow, bla bla, ogolnie paskudna sprawa ale nietrudna.

@krupek: Tak, spokojnie. Po prostu znajdujesz adres pierwszego wskaznika w tym lancuchu i zapisujesz go jaka stala w programie. Potem odczytujesz ta wartosc, rzutujesz ja na typ wskaznikowy i robisz znowu to samo, az dojdziesz do danych.
@Flood: a czy mogę w ten sam sposób edytować zawartość pamięci? Mam w aplikacji kilka najprostszych standardowych inputów (podaj nazwę firmy: i pole na wprowadzenie). Czyli że zmieniam to w pamięci i automatycznie w tej aplikacji zawartość inputa też się zmieni? Czy działa to tylko w trybie do odczytu?
@Flood: i jeszcze jedno pytanie - czy ten wskaźnik czy tam to co znajdę ostatecznie - będzie zawsze na każdym komputerze identyczny ? Zakładając że korzystam z dokładnie tego samego programu.
@krupek: Oczywiscie mozesz dowolnie odczytywac i modyfikowac pamiec relatywnie niskopoziomowym jezykiem, ja uzywalem C++ i pod Windows - WinAPI. Potrzebne funkcje znajdziesz w msdn, np. http://msdn.microsoft.com/en-us/library/windows/desktop/ms681674%28v=vs.85%29.aspx

Ostrzegam ze jesli aplikacja ma jakies zabezpieczenia to moze wykryc modyfikacje z zewnatrz.

Adres tego pierwszego w lancuchu wskaznika zawsze bedzie identyczny - mowiac to mam na mysli, ze jego odleglosc od poczatku programu jest zawsze taka sama. Np. offset wskaznika to 0x50 a program
@krupek: A, teraz sobie przypomnialem ze ten lancuch wskaznikow nie zawsze wskazuje bezposrednio na dane, czasem moze wskazywac w jakies miejsce za danymi badz przed danymi, ale odleglosc od tego miejsca do danych jest zawsze taki sam. Wiec to maly problem. Analogicznie wskaznik w lancuchu nie zawsze pokazuje na wskaznik, tylko niedalego obok.

Do tego dane mozna bylo zmieniac zwyklym memcpy ;o Tylko trzeba wywolac http://msdn.microsoft.com/en-us/library/windows/desktop/aa366899%28v=vs.85%29.aspx przed i po kopiowaniu
@enyn6: Musiałeś szukać w aplikacji, która nie używa dynamicznej alokacji pamięci. Niemożliwe żeby wszystkie adresy były stałe, np. kiedy w kodzie robisz int* p = new int(5) to adres wskaźnika będzie stały, a wartość wskaźnika czyli adres liczby często będzie różna - zależnie od stanu systemu w momencie alokacji.