Znajdywanie adresu funkcji z parametrami

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

Zajęcia nr 3_cz2 Praca z tekstem: WORD Wzory matematyczne. Tabele

Arkusz kalkulacyjny EXCEL

Rejestracja faktury VAT. Instrukcja stanowiskowa

Zadanie Wstaw wykres i dokonaj jego edycji dla poniższych danych. 8a 3,54 8b 5,25 8c 4,21 8d 4,85

INSTRUKCJA PROGRAMOWANIA KASY FISKALNEJ I-ERGOS 3050 PRZY POMOCY PROGRAMU PLU MANAGER I-ERGOS.

Laboratorium - Monitorowanie i zarządzanie zasobami systemu Windows XP

Laboratorium - Monitorowanie i zarządzanie zasobami systemu Windows Vista

Instrukcja wprowadzania graficznych harmonogramów pracy w SZOI Wg stanu na r.

Oficyna Wydawnicza UNIMEX ebook z zabezpieczeniami DRM

Laboratorium - Monitorowanie i zarządzanie zasobami systemu Windows 7

1. Umieść kursor w miejscu, w którym ma być wprowadzony ozdobny napis. 2. Na karcie Wstawianie w grupie Tekst kliknij przycisk WordArt.

TWORZENIE SZAF Z PATCH-PANELAMI

Kodu z klasą. Skarb w zatrutej wodzie, cz. 2. Scenariusz 6

INSTALACJA DOSTĘPU DO INTERNETU

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Edytor tekstu MS Word 2010 PL: grafika. Edytor tekstu MS Word umożliwia wstawianie do dokumentów grafiki.

Zgrywus dla Windows v 1.12

Assembler w C++ Syntaksa AT&T oraz Intela

INSTRUKCJA OTWIERANIA PLIKU DPT (data point table)

Formatowanie tekstu za pomocą zdefiniowanych stylów. Włączanie okna stylów. 1. zaznaczyć tekst, który chcemy formatować

Minimalna wspierana wersja systemu Android to zalecana 4.0. Ta dokumentacja została wykonana na telefonie HUAWEI ASCEND P7 z Android 4.

Laboratorium 8 ( Android -pierwsza aplikacja)

1. Instalacja Programu

Arkusz kalkulacyjny MS Excel 2010 PL.

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

Sekretariat Optivum. Jak przygotować listę uczniów zawierającą tylko wybrane dane, np. adresy ucznia i jego opiekunów? Projektowanie listy

VinCent Administrator

Kontrola poprawności danych:

Jak korzystać z Excela?

1. Wchodzimy w adres 2. Wybieramy Stwórz

Po naciśnięciu przycisku Dalej pojawi się okienko jak poniżej,

Aktywności są związane z ekranem i definiują jego wygląd. Dzieje się to poprzez podpięcie do aktywności odpowiedniego widoku.

Compas 2026 Vision Instrukcja obsługi do wersji 1.07

Ćw. IV. Tabele przestawne

Stosowanie, tworzenie i modyfikowanie stylów.

EXCEL TABELE PRZESTAWNE

Instrukcja dodawania pakietów z symbolami do programu MÓWik PRINT 2.0

Laboratorium - Zabezpieczanie kont, danych i komputera w systemie Windows XP

RCP Grafiki zmiany w kontekście funkcjonowania nieobecności w grafiku pracy

Przedszkolaki Przygotowanie organizacyjne

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Tabele przestawne tabelą przestawną. Sprzedawcy, Kwartały, Wartości. Dane/Raport tabeli przestawnej i wykresu przestawnego.

EXCEL. Diagramy i wykresy w arkuszu lekcja numer 6. Instrukcja. dla Gimnazjum 36 - Ryszard Rogacz Strona 20

Instrukcja instalowania aplikacji TNS mobistat. Smartfon Android. Help Desk

PIERWSZE KROKI I USTAWIENIA

Teraz przechodzimy do zakładki Zarządzanie kolorami.

Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

Edytor tekstu MS Word 2010 PL. Edytor tekstu MS Word 2010 PL umożliwia wstawianie i formatowanie tabel.

8. Sprzedaż SQLogic Sprzedaż

Instrukcja 3wcms najważniejsze funkcje

Typy wyliczeniowe Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

PRZEWODNIK PO ETRADER ROZDZIAŁ XII. ALERTY SPIS TREŚCI

Skaner Mustek Scan Express

Kolory elementów. Kolory elementów

Laboratorium - Zabezpieczanie kont, danych i komputera w systemie Windows Vista

System Obsługi Zleceń

SPIS ILUSTRACJI, BIBLIOGRAFIA

FINCH PONG. Realizator: Partner: Patronat:


Dokumentacja ARTEMIZJON 2. Opis modułu CRM aplikacji Artemizjon 2.

INSTRUKCJA UŻYTKOWNIKA PORTALU SIDGG

KONSTRUKCJA TRÓJKĄTA 1 KONSTRUKCJA TRÓJKĄTA 2 KONSTRUKCJA CZWOROKĄTA KONSTRUKCJA OKRĘGU KONSTRUKCJA STYCZNYCH

Ćwiczenia nr 4. Arkusz kalkulacyjny i programy do obliczeń statystycznych

Instrukcja instalacji programu szkoleniowego (DEMO) dla pracowników Spółki medycznej GDAŃSK-POŁUDNIE

BAZY DANYCH Formularze i raporty

5.2. Pierwsze kroki z bazami danych

Wybieramy File->New->Project Wybieramy aplikację MFC->MFC Application jak na rysunku poniżej:

e-podręcznik dla seniora... i nie tylko.

Ż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

MS Excell 2007 Kurs podstawowy Filtrowanie raportu tabeli przestawnej

Ogranicz listę klasyfikacji budżetowych do powiązanych z danym kontem księgowym

Laboratorium - Zabezpieczanie kont, danych i komputera w systemie Windows 7

ApSIC Xbench: Szybki start wydanie Mariusz Stępień

Wstęp Sterowanie Utworzenie, wybór i kasowanie gracza. utworzenia nowego gracza Nowy gracz Nastawienie gracza

SKRÓCONA INSTRUKCJA INSTALACJI MODEMU I KONFIGURACJA POŁĄCZENIA Z INTERNETEM NA WINDOWS 8 DLA AnyDATA ADU-520L

Tworzenie płatności. Celem tego dokumentu jest opisanie, jak tworzyć płatności w Business Online włączając:

Projekt współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego

1. Przekopiuj na dysk F bazę M5BIB.mdb z dysku wskazanego przez prowadzącego 2. Otwórz bazę (F:\M5BIB.mdb)

Edytor tekstu MS Word podstawy

Aby utworzyć tabelę przestawną należy ustawić aktywną komórkę na dowolnej komórce tabeli z danymi i wybrać z

Opis implementacji: Poznanie zasad tworzenia programów komputerowych za pomocą instrukcji języka programowania.

INSTRUKCJA OBSŁUGI PROGRAMU PRZEDSZKOLE (CZ.1)

Prezentacja multimedialna MS PowerPoint 2010 (podstawy)

Instrukcja dodawania obiektów do strony Ekonomika.

Laboratorium - Menedżer zadań (zarządzanie procesami) w Windows 7

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

Jak stworzyć własny blog w kreatorze Click Web?

edycja szablonu za pomocą serwisu allegro.pl

Spis treści. Integracja Shoper

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

Czym jest DLL Injection

UONET+ moduł Dziennik

Sigma moduł Arkusz. Nauczyciel wspomagający powinien mieć w umowie przypisane stanowisko nauczyciel wspomagający.

Poziom 2. Pustynny wyścig

Instrukcja obsługi ON!Track. Wersja mobilna 2.3 Wersja instrukcji 1.1

Praktycznie całe zamieszanie dotyczące konwencji wywoływania funkcji kręci się w okół wskaźnika stosu.

PRZEMYSŁAW DZIERŻAWSKI

Baza danych. Program: Access 2007

Jak przygotować pokaz album w Logomocji

Transkrypt:

Pierwszy artykuł o dll injection wywołał duże zainteresowanie. Wiele osób szuka informacji na temat pisania trainerów do gier, których główną funkcjonalnością jest wywoływanie funkcji gier w określonym momencie. W poprzednim artykule trochę kiepsko opisałem sam moment wywoływania funkcji. Funkcje wywoływane w pierwszym artykule są funkcjami bez parametrów. Dziś postaram się opisać jak szukać parametrów funkcji oraz jak je wywoływać. Znajdywanie adresu funkcji z parametrami Posłużmy się naszą ulubioną grą czyli Saperem z WindowsXP. Przykładową funkcją z parametrami jest funkcja ustawiająca flagi i pytajniki na określonym przez gracza polu. Gracz klika prawym przyciskiem na dowolne pole, funkcja przyjmuje jako argumenty: int wiersz, int kolumna oraz int typ. Kolumna i wiersz mówią, które pole zostało kliknięte. Parametr typ decyduje co ma być ustawione na kliknięte pole (pytajnik, flaga lub nic). Uruchom Sapera oraz CheatEngine. Prawym przyciskiem myszy ustaw flagę na polu o współrzędnych (2,2). Podłącz CheatEngine do procesu gry. Przeskanuj pamięć gry dla nieznanej wartości (unknown initial value). Interesująca nas wartość ma typ byte. Kliknij FirstScan. Gdy skanowanie zostanie zakończone, prawym przyciskiem myszy kliknij na zaznaczoną flagę w Saperze. Flaga zamieni się na pytajnik. Zmień typ skanu na Changed value (ponieważ wartość pola w pamięci została zmieniona kliknięciem) i kliknij NextScan. Po zakończonym skanowaniu, prawym przyciskiem myszy kliknij dwukrotnie na pytajnik, pytajnik zamieni się na flagę. Kliknij przycisk NextScan. Powtórz czynność kilka razy. Nie zmieniaj wartości pola (2,2). Jeżeli jest tam flaga, zostaw flagę, jeżeli jest puste lub ma pytajnik, zostaw to co jest. Jeżeli wcześniej wykonałeś skan dla Changed value, teraz wykonaj skan dla Unchanged value. Czynność powtarzaj aż na liście nie zostanie tylko jeden adres. Znaleziony adres reprezentuje wartość pola w pamięci. Karol Trybulec p-programowanie.pl 1

Zmieniając stan pola [2,2] zmienia się także wartość pamięci pod adresem 0x01005382. Załóżmy pułapkę (breakpointa) na adres wartości pola. Kliknij prawym przyciskiem myszy na adres a następnie Find out what writes to this address a następnie potwierdź klikając w Yes. Kliknij kilka razy prawym przyciskiem myszy na pole [2,2]. Ustaw flagę, potem pytajnik i znowu flagę. W okienku breakpointa pojawił się adres funkcji ustawiającej flagi pytajniki itp. Karol Trybulec p-programowanie.pl 2

Odpal OllyDbg. Przenieś i upuść ikoną Sapera do Olly. Naciśnij kilka razy F9 lub naciśnij kilka razy przycisk play. Możesz przestać gdy pojawi się okienko z grą. Naciśnij Ctrl+G aby przenieść się pod podany adres. Jako adres wpisz adres znalezionej przez nas funkcji czyli 01002ECB. OllyDbg zaznacza nam czarną klamrą ciało funkcji. Zaznaczyłem to czerwoną klamrą aby było dobrze widać. Szara linia to wywołanie z pod naszego adresu. Niebieska strzałka to początek funkcji. Kliknij na linię oznaczoną niebieską strzałką. W okienku niżej (pod instrukcjami) pojawił się napis Local calls from 0100358C, 0100362D, 010037BA. Oznacza to że funkcja (zaznaczona czerwoną klamrą) wywoływana jest w tych trzech miejscach. Karol Trybulec p-programowanie.pl 3

Kliknij prawym przyciskiem na napis Local calls from.. a następnie na pozycję Go to call from 010037BA. Zostaniemy przeniesieni w miejsce gdzie wywołana jest funkcja. Jak widzimy funkcja przyjmuje 3 argumenty a następnie jest wywoływana. Pierwsze dwa argumenty to kolumna i wiersz klikniętego pola, trzeci to typ. W miejscu zaznaczonym niebieską strzałką załóż breakpointa klawiszem F2. Zacznij grać w grę i ustaw gdzieś flagę. Breakpoint działa. Naciśnij F9 aby ruszyć aplikację i F2 aby zdjąć breakpointa. Na potrzeby artykułu wcześniej sprawdziłem poprzednie dwa adresy gdzie funkcja była także wywoływana. W pierwszej pozycji były także 3 argumenty, jednak ustawiony breakpoint nie zatrzymywał aplikacji podczas ustawiania flagi w grze. W adresie numer dwa, funkcja była wywoływana tylko z dwoma argumentami co także nas nie zadowala. W adresie numer trzy działa breakpoint oraz funkcja używa trzech parametrów. Adres 0x1002EAB jest adresem szukanej przez nas funkcji ustawiającej flagi, pytajniki itp. Uwaga! Adres 10037BA to adres CALLA wywołującego funkcję ustawiającą flagi. Ten adres jest nam potrzebny aby śledzić z jakimi argumentami funkcja jest wywoływana. Adresem funkcji, która ustawia flagi to natomiast 1002EAB! Śledzenie argumentów Nie jesteśmy skazani na zgadywanie. Ja odrzuciłem poprzednie dwa adresy ponieważ zbadałem je wcześniej dokładnie metodą, którą opiszę. Zbadajmy CALL, który prowadzi do naszej funkcji, aby przekonać się za co odpowiada i z jakimi argumentami wywołuje funkcję. Kliknij prawym przyciskiem myszy na adres 0x10037BA (niebieska strzałka). Wybierz z menu Breakpoint > Conditional Log. Pojawi się okienko. Pola tekstowe zostaw puste. Opcję Pause Program ustaw na never. Opcję Log value of expresion ustaw na never. Opcję Log function arguments ustaw na always. Kliknij OK. Zwykły breakpoint świeci się na Karol Trybulec p-programowanie.pl 4

czerwono, ustawiony przez nas ma kolor różowy. Kliknij w menu programu Viev > Log. Pojawi się okienko z logami. W głównym oknie OllyDbg naciśnij kilka razy F9 aby wystartować Sapera. W oknie sapera kliknij kilka razy na różne pola prawym przyciskiem myszy. Zauważ że w logu zostały zapisane argumenty funkcji. Jest tak jak pisałem wcześniej. Arg1 oraz Arg2 to współrzędne klikniętego kwadratu. Arg3 to wartość jaka ma być ustawiona. Wartości możesz sprawdzić w CheatEngine. Flaga oznaczana jest jako 0xE. W ten sposób możesz śledzić argumenty wszystkich wywoływanych funkcji w programie OllyDbg. Nawet jeżeli nie wiesz za co odpowiedzialna jest funkcja, możesz się tego domyślić śledząc jej argumenty. Różowego breakpointa zapisującego argumenty można ustawić tylko na Callach, czyli na wywołaniach funkcji. Np. na operacji MOV lub AND nie będziesz mógł śledzić argumentów funkcji. Wywołanie funkcji z parametrami przez Dll Injection Posiadamy adres funkcji, upewniliśmy się dzięki śledzeniu argumentów za co jest odpowiedzialna. Funkcję można wywołać w prosty sposób za pomocą Dll Injection. W tym celu musimy utworzyć wskaźnik do funkcji. Dokładną metodę tworzenia wskaźników na funkcje opisałem w artykule Ukrywanie funkcji WinApi. Każdy wskaźnik na funkcję poprzedzamy rozkazem typedef. Następnie podajemy co zwraca Karol Trybulec p-programowanie.pl 5

funkcja w naszym przypadku może być void. Otwieramy nawias, piszemy gwiazdkę a po gwiazdce nazwę wskaźnika. W przypadku DLL Injection wymagane jest także dodanie stdcall przed gwiazdką lub thiscall. W następnym nawiasie ustawiamy ilość parametrów, wymieniając po przecinku ich typy (bez nazw!). 1 typedef void ( stdcall* ustaw_wsk)(int,int, int); Wskaźnik gotowy. Teraz musimy przypisać go do naszego adresu. Wskaźnik naszej funkcji jest także typem. Sprawa jest prosta, piszemy typ, czyli nazwę naszego wskaźnika, następnie nazwę funkcji. Do nazwy funkcji przypisujemy adres, jednak wymagane jest rzutowanie na typ wskaźnikowy. 1 ustaw_wsk Ustaw = (ustaw_wsk)0x01002eab; Aby użyć funkcji posługujemy się nazwą Ustaw. Nie można zapomnieć o trzech argumentach. Całość zaimplementowana już w DLLce wygląda tak: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include "main.h" void funkcja() { typedef void ( stdcall* ustaw_wsk)(int,int, int); ustaw_wsk Ustaw = (ustaw_wsk)0x01002eab; } Ustaw(1,1, 0xE); Ustaw(2,2, 0xE); Ustaw(3,3, 0xE); extern "C" DLL_EXPORT BOOL APIENTRY DllMain(HINSTANCE hinstdll, DWORD fdwreason, LPVOID lpvreserved) { switch (fdwreason) { case DLL_PROCESS_ATTACH: funkcja(); break; } return TRUE; } Nie będę pisał loadera DLLki. Do wstrzyknięcia posłużę się programem Winject. Jest to bardzo dobry program, za pomocą którego możemy wstrzyknąć DLLkę do dowolnego Karol Trybulec p-programowanie.pl 6

procesu. Po wstrzyknięciu funkcja zostaje wywołana ustawiając flagi w pozycję [1,1], [2,2] oraz [3,3]. Karol Trybulec p-programowanie.pl 7