obszar pamięci innego procesu

0

Powiedzmy, że odpalam Mario i:

  1. chciałbym wiedzieć z jakiego zakresu pamięci korzysta ta gra (proces), czy jest to możliwe? i wyświetli np. od 10000AAA do 100BBBFF?
  2. czy podając konkretny adres np. ABCFF mógłbym dostać zwrotną informację, czy program w ogóle korzysta z tego adresu itd?
  • pobranie PIDu
  • otworzenie procesu np. process_all_access
    i...
    proszę o pomoc [soczek]
0

Każdy program używa swojej przestrzeni adresowej, nie widzi innych, używa adresów (w trybie 32bit) od 0 do 0x7fffffff, ew. 0xcfffffff lub 0xffffffff [ale to szczególny przypadek, wewnątrz WoW64].

0

Jeżeli chcesz zobaczyc jak działa progam to mozesz uzyć IDA Pro free. Zdekompiluje ci program do assemblera i możesz właczyć go w trybie debug z podglądem na wszystkie rejestry.

0
javauser napisał(a)

Zdekompiluje ci program do assemblera i możesz właczyć go w trybie debug z podglądem na wszystkie rejestry.

Do asemblera się dezasembluje. Poza tym podgląd rejestrów niewiele daje sam z siebie. IDA w wersji freeware nie posiada debuggera, takie rzeczy to tylko w komercyjnej. Do czasu IDy 5.5 to ten debugger miał paskudny interface tak swoją drogą. Jak debugować na poziomie assemblera to z użyciem czegoś z Debugging Tools for Windows (WinDBG/cdb,ntsd) albo OllyDBG/Immunity Debugger...

0

powiem o co mi chodzi, będzie prościej:

  • dawniej pisałem jeden progs do gry, część danych musiałem wyciągac z pamięci gry, adresów nie znałem, wartości tak no to w pętli jechałem "mały obszar pamięci", może tylko kilkadziesiąt adresów obskoczyłem i miałem to co chciałem.
    A dziś ot tak wszedłem na forum by dowiedzieć się nieco więcej o tym. Po prostu chciałem "ominąć" puste adresy o ile owe występują (czy tam nieistniejące).
0
Świętowit napisał(a)
javauser napisał(a)

Zdekompiluje ci program do assemblera i możesz właczyć go w trybie debug z podglądem na wszystkie rejestry.

Do asemblera się dezasembluje. Poza tym podgląd rejestrów niewiele daje sam z siebie. IDA w wersji freeware nie posiada debuggera, takie rzeczy to tylko w komercyjnej. Do czasu IDy 5.5 to ten debugger miał paskudny interface tak swoją drogą. Jak debugować na poziomie assemblera to z użyciem czegoś z Debugging Tools for Windows (WinDBG/cdb,ntsd) albo OllyDBG/Immunity Debugger...

Ehhh z jednej strony taki jesteś dokładny a z drugiej, w jednej wypowiedzi mówisz że IDA nie ma debuggera i że debugger którego nie ma ma paskudny interfejs :> . Chodziło mi o przekazanie idei - pytanie nie dotyczyło narzędzi. Pewnie te które zaproponowałeś są lepsze ale ja ich nie znam.

0
javauser napisał(a)

Ehhh z jednej strony taki jesteś dokładny a z drugiej, w jednej wypowiedzi mówisz że IDA nie ma debuggera i że debugger którego nie ma ma paskudny interfejs :>

Napisałem, że IDA w wersji freeware nie posiada debuggera. Skąd wniosek, że jestem do wersji free ograniczony?

@pan_smierci, a możesz jakieś sensowne konkrety podać? Bo wylistować używane przez proces obszary pamięci to nie problem, tylko wątpię czy tego naprawdę potrzebujesz.

0

Ok nie mam sensu ciągnąc tego wątku. Ja mam wersje Freeware Version 4.9 i mogę debugować.

0

http://www.hex-rays.com/idapro/idadownfreeware.htm

The freeware version has the following limitations
no commercial use allowed
lacks all features introduced in IDA Pro 5.x (5.0, 5.1, 5.2)
lacks support for many processors, file format, debugging etc..

No ale skoro twierdzisz, że jednak wspiera debugowanie...

0

Dlaczego słowo człowieka nic w dzisiejszych czasach nie znaczy :)

user image

0
javauser napisał(a)

Dlaczego słowo człowieka nic w dzisiejszych czasach nie znaczy :)

Wiesz, wersje freeware nie miały debuggera, zaś słowa autorów na oficjalnej stronie - lacks support for [...] debugging - nie wzięły się z niczego, jak widać coś się zmieniło, teksty pozostały.

0
Świętowit napisał(a)

@pan_smierci, a możesz jakieś sensowne konkrety podać? Bo wylistować używane przez proces obszary pamięci to nie problem, tylko wątpię czy tego naprawdę potrzebujesz.

W tej chwili nie potrzebuję tego, ale po prostu chciałem dowiedzieć się czegoś nowego, przećwiczyć to.
Powiedzmy, że chcę napisać program w stylu Cheat Engine. Podajesz wartość np. 34 (amunicja w grze) i klikasz "skanuj" i program ma przeskanować wszystko.
Nie znam się na tym, jak ta pamięć wygląda, czy np. niektóre dane są zapisane np. od FFA000 do FFAEFF, a następnie jest np. jakaś pusta przestrzeń np. na 900 adresów, a dopiero po nich są kolejne np. 200 adresów z liczbami, znakami itd, później znowu jakiś odstęp itd...
Chodzi o to, że nie chcę skanować w pętli wszystkiego i w ogóle nie wiem jakby się program zachował, gdybym mu kazał pobrać wartość "nieistniejącego" adresu, wysypałby się, albo nic by nie zwracał i skanował dalej puste rzeczy przez co marnowałby czas i całość zajmowałaby wieki.
Oczywiście ten przykład to tylko przykład (głupio brzmi to zdanie), ale chyba mniej więcej łapiesz o co mi chodzi.

Znasz jakieś funkcje do tego, do pobrania adresów i do sprawdzenia konkretnego, czy "coś ma"? (te funkcje pewnie na msdn będą gdzieś?). I ewentualnie prosiłbym o dwa słowa instrukcji np. "najpierw pobierz pid, otwórz proces jako.. i wtedy użyj tej funkcji gotowe (a po niej innej, czy coś). Z góry dzięki za info. (wolałbym "prymitywne" opisy i sposoby, niż jakieś zaawansowane)

0

Ostatnio dałem skrypt w Pythonie szukający rzeczy wyglądających jak wskaźniki - http://4programmers.net/Forum/640562#id640562. Generalnie Python jest czytelny, na tyle żeby ogólną koncepcję było widać. Struktury są standardowe (tylko Python ich nie zna), funkcje poprzedzone 'K32.' to standardowe WinAPI z kernel32.

Streszczenie enumMemoryBlocks:

  • pobieramy z systemu informacje o minimalnym i maksymalnym adresie w procesie (GetSystemInfo + odpowiednia struktura);
  • aktualny adres = najniższy;
  • pobieramy informacje o zaczynającym się w tym miejscu bloku pamięci;
  • testujemy czy jest dostęp i nie ma flagi PAGE_GUARD (próba odczytu by ją zresetowała a są nią oznaczane rzeczy używane do powiększania stosu/implementacji GC itd. - nic wartościowego dla nas) - jak tak to dodajemy do listy;
  • powiększamy aktualny adres o rozmiar bloku;
  • ... itd. w pętli póki adres nie dojdzie do maksymalnego.

Jakie prawa dostępu są potrzebne do otwarcia procesu w celu wyliczenia stron i odczytu zawartości to widać kawałek dalej. Wszystko jest na MSDN-ie wytłumaczone. W Twoim wypadku możnaby testować flagi stron za prawem do zapisu.

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