Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Pobieranie adresu pamięci za pomocą skanowania Sig
#1
Tak więc mam tę sytuację, w której mam zestaw instrukcji, który zawiera lokalizację adresu pamięci, której potrzebuję     Ten obraz został przeskalowany. Kliknij ten pasek, aby wyświetlić pełny obraz. Oryginalny obraz ma rozmiar 660 x 583.   i rozumiem, że gdy podam sigscan, znajdę lokalizację instrukcji w miejscu (w tym przypadku 11DD1D32)     Ten obraz został przeskalowany. Kliknij ten pasek, aby wyświetlić pełny obraz. Oryginalny obraz ma rozmiar 747 x 339.     Więc jaka byłaby właściwa metoda znalezienia właściwego adresu pamięci, którego potrzebuję   W tym przypadku potrzebuję   MOV DWORD PTR DS: [156581C], EAX         Jak mam to zrobić?
Reply
#2
Możesz debugować aplikację, aby dowiedzieć się, czym jest ten wskaźnik i dokąd zmierza, a następnie znaleźć statyczny wskaźnik, który może zostać użyty do jego pobrania. W przeciwnym razie, jeśli znajdziesz adres instrukcji w przypadku, możesz zdemontować tę instrukcję i pobrać adres.
Reply
#3
zwiększaj wskaźnik do instrukcji o 1 bajt, przekształcenie i derywat. na przykład BYTE * instruction_ptr = ...; ++ instruction_ptr; DWORD * offset_reader = (DWORD *) instruction_ptr; DWORD your_fkin_offset = * offset_reader; sry formatowania i shitty poc. Zmęczony af atm. Sprzątanie później. przeczytaj to gówno, dopóki nie naprawię mojego posta: http://ref.x86asm.net/coder32.html#xA3
Reply
#4
Zacytować: Originally Posted by M i c h a e l zwiększaj wskaźnik do instrukcji o 1 bajt, przekształcenie i derywat. na przykład BYTE * instruction_ptr = ...; ++ instruction_ptr; DWORD * offset_reader = (DWORD *) instruction_ptr; DWORD your_fkin_offset = * offset_reader; sry formatowania i shitty poc. Zmęczony af atm. Sprzątanie później. przeczytaj to gówno, dopóki nie naprawię mojego posta: http://ref.x86asm.net/coder32.html#xA3 Działa to w tym przypadku, ponieważ adres pamięci znajduje się w instrukcji jako przemieszczenie pamięci. Jednakże, gdy instrukcja używa wartości względnych, dokładna wartość nie jest już umieszczona w instrukcji. Mam taki sam problem z maskowaniem bajtów w CrySearch.
Reply
#5
@ evolution536 Wystarczy odczytać przesunięcie, zwiększając wskaźnik do początku przemieszczenia, a następnie wyłuskując wskaźnik za pomocą typu, który jest wielkości przesunięcia. Dodaj tę wartość do lokalizacji pamięci instrukcji, dodaj rozmiar instrukcji i wiesz, gdzie wskazuje. Spójrz na metodę abstractdetour :: RelocateConditionalJMP. Oddziela wskaźniki względne od wskazanej lokalizacji. https://github.com/stevemk14ebr/Poly...k/PolyHook.cpp
Reply
#6
Kod: uint8 * scan_result = jeśli (! scan_result) T * wskaźnik = * (T **) (scan_result + 0x1); 0x1 jest przesunięciem do adresu w pliku binarnym, który jest 2. kolumną dissdrawblera. Wypracowujmy to dla znalezienia przesunięć, ponieważ ASM Mneumonics może mieć różne binarne długości kodu w zależności od sytuacji. również po to, aby upewnić się, że adres wygląda dziwnie, ponieważ x86 używa małego endianu, co oznacza, że zamienia się wokół swoich bajtów, gdy reprezentuje wartości słowa / dword / qword
Reply
#7
Zacytować: Napisał stevemk14ebr @ evolution536 Wystarczy odczytać przesunięcie, zwiększając wskaźnik do początku przemieszczenia, a następnie wyłuskując wskaźnik za pomocą typu, który jest wielkości przesunięcia. Dodaj tę wartość do lokalizacji pamięci instrukcji, dodaj rozmiar instrukcji i wiesz, gdzie wskazuje. Spójrz na metodę abstractdetour :: RelocateConditionalJMP. Oddziela wskaźniki względne od wskazanej lokalizacji. https://github.com/stevemk14ebr/Poly...k/PolyHook.cpp Jeśli chcesz odnieść się do linii w kodzie, możesz po prostu kliknąć przeciwny numer linii i "przypiąć" go w ten sposób: https://github.com/stevemk14ebr/Poly...yHook.cpp#L225 Nie wiem, czy już o tym wiesz, czy byłeś na telefonie komórkowym.
Reply




Users browsing this thread: 1 Guest(s)