Codecave jest to nieużywana pamięć uruchomionej aplikacji, do której można wstrzyknąć dowolny kod a następnie wykonać go.

Podobne dokumenty
Znajdywanie adresu funkcji z parametrami

Wstęp. Skąd pobrać program do obsługi FTP? Logowanie

Instalacja i obsługa aplikacji MAC Diagnoza EW

Instalacja i obsługa aplikacji MAC Diagnoza EP w celu wykonania Diagnozy rozszerzonej

edycja szablonu za pomocą serwisu allegro.pl

dokumentacja Edytor Bazy Zmiennych Edytor Bazy Zmiennych Podręcznik użytkownika

Instalacja i obsługa aplikacji MAC Diagnoza EP w celu wykonania Arkusza obserwacji

I. Program II. Opis głównych funkcji programu... 19

Edytor Edit+ - dodawanie zdjęć i. załączników. Instrukcja użytkownika

MATERIAŁY - udostępnianie materiałów dydaktycznych w sieci SGH

Rejestracja faktury VAT. Instrukcja stanowiskowa

edycja szablonu za pomocą programu NVU

Instrukcja wprowadzania wyników diagnoza PRZED EGZAMINEM

Laboratorium - Narzędzia linii uruchamiania w systemie Windows XP

Zgrywus dla Windows v 1.12

Próbny sprawdzian szóstoklasisty z Nową Erą

Informacje o członkach WSRM na

pl/administrator

Krótki kurs obsługi środowiska programistycznego Turbo Pascal z 12 Opracował Jan T. Biernat. Wstęp

Szybka instrukcja tworzenia testów dla E-SPRAWDZIAN-2 programem e_kreator_2

5.2. Pierwsze kroki z bazami danych

Jak przygotować pokaz album w Logomocji

Laboratorium - Monitorowanie i zarządzanie zasobami systemu Windows 7

Cel: Zastosowanie okien pytającychwyświetlających pytania i komunikaty (MessageBox). Klub IKS

e-wsparcie Barbara Muszko Aktualizacja Twojej witryny internetowej tak prosta, jak obsługa Worda

Laboratorium - Narzędzie linii uruchamiania w systemie Windows Vista

Prezentacja multimedialna MS PowerPoint 2010 (podstawy)

Laboratorium - Narzędzia linii uruchamiania w systemie Windows 7

Dane słowa oraz wyrażenia są tłumaczone przy pomocy polecenia Przetwarzanie > Tłumaczenie

DOKUMENTY I GRAFIKI. Zarządzanie zawartością Tworzenie folderu Dodawanie dokumentu / grafiki Wersje plików... 7

Instrukcja instalacji programu serwisowego NTSN krok po kroku

Kurs obsługi systemu CMS. Prawie wszystkie treści wyświetlające się na stronie są zlokalizowane w dziale artykuły.

SPIS TREŚCI. Sposób pierwszy... 3 Sposób drugi Ikony banków Ikony dostawców Strona1

Inwentarz Optivum. Jak wykorzystać kolektor danych do wypełniania arkuszy spisowych?

Instrukcja redaktora strony

INSTRUKCJA OBSŁUGI KREATORA SKŁADANIA WNIOSKÓW

Instalacja i użytkowanie programu Fotolabo 3.0

INSTRUKCJA UŻYTKOWNIKA PORTALU SIDGG

etrader Pekao Podręcznik użytkownika Strumieniowanie Excel

Instalacja i obsługa generatora świadectw i arkuszy ocen

Instrukcja obsługi. Helpdesk. Styczeń 2018

Podręcznik użytkownika. Instrukcje

4.1 Użytkownicy [ Definicje ] 12. Po zakończonej pracy możemy wylogować użytkownika, korzystając z funkcji Wybór użytkownika

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

INSTRUKCJA OBSŁUGI KREATORA SKŁADANIA WNIOSKÓW

SPIS TREŚCI. Sposób pierwszy... 4 Sposób drugi Ikony banków Ikony dostawców Strona1

Gimp - poznaj jego możliwości!

Żeby dodać artykuł, trzeba się na portalu zarejestrować i w menu użytkownika na stronie portalu kliknąć: Nowy artykuł. W swoim menu zobaczą ten link

SYSTEM CYFROWEJ REJESTRACJI PRZEBIEGU ROZPRAW SĄDOWYCH W SĄDACH POWSZECHNYCH INSTRUKCJA UŻYTKOWNIKA PROGRAMU RECOURT PLAYER

Jeśli chodzi o wymianę/dodanie zdjęcia w galerii to robimy to za pomocą komponentu Galeria Phoca.

Instrukcja obsługi programu VisitBook Semieta Lite

Piotr Eichler SP2LQP

Edytor tekstu OpenOffice Writer Podstawy

Zamawianie Taxi Aktywator Instrukcja użytkownika

Instrukcja Arkusz ZSZ

Podstawowe informacje potrzebne do szybkiego uruchomienia e-sklepu

Szkolenie z zakresu obsługi kreatora składania wniosków Witkac.pl po nowelizacji ustawy o działalności pożytku publicznego i o wolontariacie

Automatyzowanie zadan przy uz yciu makr języka Visual Basic

Instrukcja użytkownika systemu medycznego

Komputery I (2) Panel sterowania:

INSTRUKCJA OBSŁUGI PROGRAMU IRF DLA BIURA RACHUNKOWEGO Program Rachmistrz/Rewizor. Strona0

Jak przesłać mapę do urządzenia lub na kartę pamięci?

OPERACJE NA PLIKACH I FOLDERACH

Cel: Przypisujemy przyciskom określone funkcje panel górny (Panel1)

Instrukcja obsługi systemu Sky CMS

Damian Daszkiewicz Tworzenie strony-wizytówki dla firmy XYZ

Fotogrametria cyfrowa ćwiczenie 1.

Instrukcja obsługi Konfigurator MLAN-1000

Podręcznik użytkownika programu. Ceremonia 3.1

Przedszkolaki Przygotowanie organizacyjne

Laboratorium - Monitorowanie i zarządzanie zasobami systemu Windows XP

Instrukcja dodawania obiektów do strony Ekonomika.

R-LINK Evolution Instrukcja instalacji oprogramowania

DODAWANIE ARTYKUŁÓW DO STRONY INTERNETOWEJ

Kleos Mobile Android

INSTRUKCJA OBSŁUGI STEROWNIKA WIFI

Moduł 1 Pliki i foldery

Instrukcja obsługi panelu Klienta

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE

Dostęp do poczty przez www czyli Kerio Webmail Poradnik

Jak szybko wystawić fakturę w LeftHand? Instalacja programu

Jak posługiwać się edytorem treści

KASK by CTI. Instrukcja

INSTRUKCJA OBSŁUGI KREATORA SKŁADANIA WNIOSKÓW

Memeo Instant Backup Podręcznik Szybkiego Startu

NAGŁÓWKI, STOPKI, PODZIAŁY WIERSZA I STRONY, WCIĘCIA

Laboratorium - Monitorowanie i zarządzanie zasobami systemu Windows Vista

Instrukcja obsługi. Generatora CSV

WebAdministrator GOLD 2.35

Instrukcja obsługi programu PLOMP PLUS FM

Instrukcja obsługi. SpinRyb v0.87. Maciej Nalewczyński

Temat: Organizacja skoroszytów i arkuszy

Instrukcja obsługi szablonów aukcji

Jak zainstalować szablon allegro?

Własna strona WWW w oparciu o CMS

Nowy szablon stron pracowników ZUT

Integracja systemu trigocms! z platformą Facebook

System Informatyczny CELAB. Terminy, alarmy

Utworzenie aplikacji mobilnej Po uruchomieniu Visual Studio pokazuje się ekran powitalny. Po lewej stronie odnośniki do otworzenia lub stworzenia

Transkrypt:

Każda uruchomiona aplikacja posiada swoją pamięć (pamięć procesu). Technika DllInjection pozwala programiście na wstrzyknięcie kodu do uruchomionego procesu, dzięki czemu można poszerzyć go o nowe funkcje lub wywoływać istniejące funkcje procesu w dowolnym momencie. Jedną z wielu metod wstrzykiwania kodu jest korzystanie z codecave. Codecave jest to nieużywana pamięć uruchomionej aplikacji, do której można wstrzyknąć dowolny kod a następnie wykonać go. Zaprezentuję prosty przykład działania codecave. Potrzebny będzie edytor pamięci np. CheatEngine oraz debbuger OllyDbg. Co prawda istnieją inne debbugery, nawet CheatEngine posiada swój wbudowany, jednak możliwości OllyDbg przerastają wszystkie inne programy tego typu. Jak wspomniałem w innym artykule, nie trzeba umięć programować w Asm jednak trzeba znać jego najważniejsze rozkazy. Zbieranie informacji Naszym zadaniem będzie taka modyfikacja kodu Sapera, aby po zmniejszeniu ilości min (licznik po lewej stronie) wyskakiwał komunikat z informacją. Utwórz kopię gry Saper i wklej ją do jakiegoś folderu. Kopię pliku nazwij saper.exe i uruchom. Otwórz program CheatEngine i wczytaj proces sapera. Musimy odczytać adres zmiennej przechowującej aktualną ilość min, czyli 10. Wierzę, że umiesz to zrobić, zostało to opisane w artykule edycja pamięci procesów. Znaleziony przeze mnie adres to 1005194, Twój może się różnić jeżeli posiadasz inną wersję gry. Posiadając adres zmiennej przechowującą ilość min, pozostaje nam znaleźć adres funkcji, która modyfikuje ilość min. Adres zmiennej a adres funkcji to zupełnie inne nie powiązane ze sobą wartości. Aby znaleźć adres funkcji klikamy na adres 1005194 prawym przyciskiem myszy i a następnie na pozycję Find out what writes to this address.. Pokaże się komunikat p-programowanie.pl 1

informujący o konieczności użycia debbugera, klikamy yes. Został ustawiony breakpoint (pułapka) na adres zmiennej przechowującej ilość min, uaktywni się w momencie zapisania nowej wartości do zmiennej. Można także ustawiać pułapkę na odczytywanie informacji z pod adresu. Pułapka (breakpoint) ustawia się ją za pomocą debbugera na określony adres w pamięci. Pułapki ustawia się na zapis lub odczyt z adresu. Pułapka przerywa działanie programu w momencie użycia zmiennej na którą została ustawiona, pozwalając programiście analizować kod. Po ustawieniu pułapki na zapis, musimy sprawić aby szukana funkcja zapisała nową wartość do naszego adresu. Klikamy prawym przyciskiem myszy na dowolnym polu w saperze, ustawi to flagę na pole i zmniejszy ilość min o 1. Oznacza to że szukana przez nas funkcja będzie musiała nadpisać zmienną z ilością min nową wartością. Na liście instrukcji powinna pojawić się taka pozycja: Na czerwono zaznaczyłem adres szukanej funkcji, następnie widoczne są wartości odpowiadające heksadecymalne naszej funkcji, na razie nas to nie interesuje. Rozkaz ADD jest odpowiedzialny za arytmetyczne dodawanie wartości, w tym wypadku dodawana jest wartość rejestru EAX do zmiennej wyświetlającej ilość naszych min (kolor zielony). Podsumowując, posiadamy dwa adresy: 1005194 adres zmiennej z ilością min 100346E adres funkcji edytujący zmienną z ilością min p-programowanie.pl 2

Wstrzykiwanie kodu do gry Saper Uruchom OllyDbg a następnie przeciągnij i upuść do niego plik saper.exe. Program wyświetlił nam kod maszynowy Sapera w języku Assembler. Aby wstrzyknąć kod musisz znaleźć wolny obszar pamięci który nie jest używany (codecave), czyli taki który nie jest wypełniony żadnymi instrukcjami asma. Wolny obszar pamięci to DB 00, czyli po prostu bajt 0. Puste instrukcje oznacza również NOP (ang. No operation) ale są one wykorzystywane w środku kodu i nie tworzą codecave. Musisz znaleźć obszar wolnych bajtów, ja znalazłem na końcu programu (adres 01004A56). Wygląda to tak: Wolne bajty widoczne wyżej nadpiszemy własnym kodem, następnie zamiast wywołania funkcji zmieniającej ilość min wywołamy nasz kod. Nasz kod wyświetli MessageBox, uaktualni ilość min a na końcu wykona skok do miejsca gdzie powinna znajdować się oryginalna funkcja. Koncepcja prezentuje się następująco: Zajmijmy się treścią komunikatu. Zaznaczamy około 15 linii w codecave (jedna linia to jeden rozkaz to jeden bajt i jedna litera). Następnie klikamy prawym przyciskiem myszy na p-programowanie.pl 3

zaznaczeniu i wybieramy z menu Binary > Edit (lub CTRL+E). Pokaże się okienko, wpisujemy tam treść komunikatu. Klikamy OK. Naciskamy na klawiaturze skrót CTRL+A, dzięki temu debbuger przetworzy sobie kod. Zapiszmy tytuł komunikatu, znów zaznaczamy dowolną ilość linii, edytujemy i wpisujemy tytuł. Klikamy OK a następnie na klawiaturze skrót CTRL+A. Teraz zajmiemy się wyświetlaniem komunikatu. Struktura funkcji wygląda następująco: 1 2 3 4 5 6 int WINAPI MessageBox( in_opt HWND hwnd, in_opt LPCTSTR lptext, in_opt LPCTSTR lpcaption, in ); UINT utype Funkcja przyjmuje 4 parametry, z czego pierwszy może wynosić 0 i ostatni 0 (struktura dostępna i opisana na MSDN, pamiętaj że wartości na stos trafiają w odwrotnej kolejności niż mówi o tym struktura funkcji). Przejdź do dowolnej pustej linii i kliknij dwukrotnie. Pokaże się okienko do wpisania instrukcji. Pierwszym argumentem może być 0, więc dodajemy 0 do stosu wpisując w okienku PUSH 0. Drugim parametrem jest tytuł więc dodajemy do stosu adres (pierwsza kolumna) pod jakim zapisaliśmy wcześniej tytuł komunikatu, u mnie jest to adres 1004A67. Wpisz w okienku PUSH (adr_tytuł_komunikatu) np. PUSH 1004A67. Na stos dodajemy jeszcze adres treść komunikatu oraz parametr czwarty czyli 0. Na końcu dodajemy rozkaz call user32.messageboxa wywoła on komunikat. Całość powinna wyglądać tak: p-programowanie.pl 4

Różowymi strzałkami zaznaczyłem adresy treści komunikatu oraz tytułu komunikatu u Ciebie wszystkie adresy prawdopodobnie będą inne. Zapisz adres strzałki niebieskiej, wskazuje ona początek naszego kodu. Naciśnij CTRL+G, otworzy się okienko pozwalające przenieść się pod dowolny adres. Wpisujemy tu adres naszej funkcji odpowiedzialnej za zapisywanie ilości min do zmiennej. Adres tej funkcji to: 100346E. Skopiuj i zapisz w notatniku 4 linijki począwszy od początku funkcji pod którą przeniósł Cię debugger. Zauważ, że debbuger zaznacza funkcje czarną klamerką po lewej stronie. Widać, że funkcja zaczyna się pod adresem 0100346A a kończy na 01003479. U mnie są to linijki: Kliknij dwukrotnie na pierwszą linijkę funkcji w debbugerze (adres 0100346A). Pojawi się okienko pozwalające edytować istniejący rozkaz. Zastąp MOV EAX,DWORD PTR SS:[ESP+4] skokiem do naszego kodu czyli JMP 1004A6F (u ciebie adres jest inny i miałeś go zapisać! spójrz na poprzedni obrazek!). Teraz zamiast funkcji nadpisującej ilość min program wykona skok do naszego kodu, który wyświetli komunikat. Zauważ, że zostały dodane automatycznie rozkazy NOP. Zapisz adres ostatniego z nich na boku (u mnie 1003473, widać na obrazku). Kliknij na pierwszą czerwoną linijkę (rozkaz JMP) i naciśnij ENTER. Zostałeś przeniesiony do naszego kodu. Zauważ, że zamiast wywołania funkcji nadpisującej ilość min, wywoływany jest skok na nasz kod w codecave. Oznacza to że ilość min przestanie być aktualizowana. Musimy naprawić aktualizację min czyli wywołać oryginalną funkcję, którą zastąpiliśmy skokiem (obrazek wyżej). Kazałem zapisać Ci 4 pierwsze linijki przed nadpisaniem funkcji, teraz będą nam one potrzebne. Pierwsze dwie nadpisane linijki to: p-programowanie.pl 5

1 0100346A /$>MOV EAX,DWORD PTR SS:[ESP+4] 2 0100346E.>ADD DWORD PTR DS:[1005194],EAX Pierwsza linijka (rozkaz MOV) dodaje do rejestru wartość ze wskaźnika stosu SS:[ESP+4]. Druga linijka odpowiedzialna jest za dodanie wartości z rejestru do zmiennej wyświetlającej ilość min. Jest to właśnie sedno naszej funkcji modyfikującej ilość min (pamiętasz adres 0100346E z 1 części artykułu?). W naszym kodzie po wywołaniu komunikatu (CALL user32.messageboxa) znajduje się puste pole (DB 00). Kliknij na nie dwukrotnie i wklej rozkaz MOV EAX,DWORD PTR SS:[ESP+4], następnie w nowej linii wklej ADD DWORD PTR DS:[1005194],EAX, dzięki temu licznik min odzyska swoją funkcjonalność. Następnie w kolejnej linii wykonaj skok na instrukcję NOP (obrazek wyżej), której adres przed chwilą zapisałeś (u mnie 1003473). W tym celu wpisz w okienku JMP 1003473 i kliknij OK. Cały nasz dodatkowy kod powinien wyglądać tak (Ty masz inne adresy): Klikamy prawym przyciskiem myszy w głównym oknie a następnie Coppy to executable > All modyfications. Wyskoczy nowe okienko. W nowym okienku kliknij prawym przyciskiem myszy a następnie Save File i zapisz plik pod dowolną nazwą. Uruchom nowo zapisany plik. Teraz przy każdej zmianie ilości min powinien ukazać się komunikat. Jeżeli się nie ukazuje, oznacza że popełniłeś błąd. p-programowanie.pl 6