2014-07-03 33 views
7

Ostatnio wykorzystałem cracking i reverse-engineering przy pomocy plików wykonywalnych OllyDbg 2.01 i crackmes.OllyDbg 2.01 - Znajdowanie polecenia odwołującego się do stałego ciągu znaków

więc w tym konkretnym crackme, ja przewijał poleceń i zauważyłem PUSH z ciąg znaków ASCII "& pliku" (jest to ciąg menu):

1

Pomyślałem więc: „Jeśli Mogę znaleźć te informacje po prostu przewijając, z pewnością musi być automatyczny sposób znalezienia polecenia odwołującego się do określonego ciągu ".

więc dostać się do górnej części programu, naciśnij Ctrl + B i szukać ASCII „Plik”, aby znaleźć go ponownie z nadzieją:

2

Po naciśnięciu OK, OllyDbg nie znajdzie wcześniej PUSH. Zamiast tego, mam to:

3

Mmmh .. Dobrze, że nie jest to, czego się spodziewałem, ale zobaczmy, co jest w środku. więc mam rację kliknij => Podążaj Dump i uzyskać w ten sposób:

4

Więc tak, uważamy, że nasz ciąg w wysypisko. Jednak nadal nie znalazłem oryginalnego PUSH. Można również zauważyć, że adres napisu jest taki sam jak argument PUSH (40512C).

Jako ostatnią próbę, prawym przyciskiem myszy kliknij literę pod adresem 40512C, wybierz "Znajdź odniesienia", ale nie: brak odnośnika.

So TL; Pytanie DR: jak automatycznie znaleźć polecenie odwołujące się do ciągu? Ponieważ oczywiście nie zamierzam przewijać całego stosu poleceń za każdym razem, gdy chcę znaleźć ciąg.

PS: ciąg znaków nie pojawia się również w "łańcuchach tekstów referencyjnych".

Z góry dziękuję za pomoc.

EDYCJA: dobra, więc znalazłem rozwiązanie. Przeszukałem kod "2C 51 40 00", który jest adresem do tyłu, i znalazłem ponownie PUSH. To trochę hacky, każdy z bardziej wydajnym rozwiązaniem jest mile widziany.

Odpowiedz

4

Jest wiele sposobów na zrobienie tego. To, co preferuję, to: Ctrl+G i przejdź do łańcucha znaków w zrzucie. (0x0040512C) Wybierz pierwszy bajt i naciśnij Ctrl+R. To da ci listę, do której odnosi się konkretny ciąg. Możesz także umieścić punkt przerwania sprzętowego w pierwszym bajcie ciągu "&", a następnie przerwiesz go za każdym razem, gdy coś się do niego dostanie. Można również wyszukiwać stałe (sam adres lub znaki ascii).

Nawiasem mówiąc jest podstrona dedykowana dla reverseengineering :)

+0

Próbowałem Ctrl + R, jak stwierdzono w moim wątku (prawym przyciskiem myszy na pierwszy bajt i wybierając „znaleźć odniesienia”), ale nie dały dowolny wynik. O przerwach w pamięci: tak, niedawno je odkryłem i są niesamowite :). dzięki za podpowiedź na temat podwitryny inżynierii odwrotnej, to sprawdzę. – Ely