Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00764 008368 10458929 na godz. na dobę w sumie
Cracking bez tajemnic - książka
Cracking bez tajemnic - książka
Autor: Liczba stron: 304
Wydawca: Helion Język publikacji: polski
ISBN: 83-7361-444-3 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> hacking >> inne
Porównaj ceny (książka, ebook, audiobook).
  • Znajdź słabe punkty oprogramowania
  • Zabezpiecz swoje programy
  • Poznaj techniki działania crackerów
  • Przetestuj zabezpieczenia

Zabezpieczanie programów i danych jest nierozerwalnie związane ze sposobami omijania lub łamania blokad. Nie można stworzyć skutecznych mechanizmów chroniących programy i dane przez nielegalnym kopiowaniem, nie wiedząc, jak działają ludzie, którzy te mechanizmy forsują. Oczywiście, niemożliwe jest wprowadzenie zabezpieczenia, które będzie niemożliwe do złamania lub obejścia. Cała sztuka polega na stworzeniu takich sposobów zablokowania dostępu do danych lub kodu programu, których złamanie będzie bardzo czasochłonne. Im dłużej program pozostanie niedostępny dla crackerów, tym dłużej użytkownicy będą kupować wersję legalną.

Książka 'Cracking bez tajemnic' opisuje wszystko, co związane jest z crackingiem i tworzeniem zabezpieczeń -- od podstawowych zagadnień do bardzo zaawansowanych technik. Zawiera informacje dotyczące prostych algorytmów zabezpieczeń, jak również sposoby tworzenia własnych szyfratorów. Jest przeznaczona zarówno dla programistów, którzy chcą się nauczyć zabezpieczania swoich programów przed crackingiem, ale również dla wszystkich, którzy zamierzają poznać techniki crackowania.

W kolejnych rozdziałach książki znajdziesz:

Znajdziesz tu wszystko, co kiedykolwiek chciałeś wiedzieć o crackingu

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

IDZ DO IDZ DO PRZYK£ADOWY ROZDZIA£ PRZYK£ADOWY ROZDZIA£ SPIS TREĎCI SPIS TREĎCI KATALOG KSI¥¯EK KATALOG KSI¥¯EK KATALOG ONLINE KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG ZAMÓW DRUKOWANY KATALOG TWÓJ KOSZYK TWÓJ KOSZYK DODAJ DO KOSZYKA DODAJ DO KOSZYKA CENNIK I INFORMACJE CENNIK I INFORMACJE ZAMÓW INFORMACJE ZAMÓW INFORMACJE O NOWOĎCIACH O NOWOĎCIACH ZAMÓW CENNIK ZAMÓW CENNIK CZYTELNIA CZYTELNIA FRAGMENTY KSI¥¯EK ONLINE FRAGMENTY KSI¥¯EK ONLINE Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl Cracking bez tajemnic Autor: Jakub Zemanek T³umaczenie: Jerzy Kêdziera ISBN: 83-7361-444-3 Tytu³ orygina³u: Cracking bez tajemstvi Format: B5, stron: 304 Zabezpieczanie programów i danych jest nierozerwalnie zwi¹zane ze sposobami omijania lub ³amania blokad. Nie mo¿na stworzyæ skutecznych mechanizmów chroni¹cych programy i dane przez nielegalnym kopiowaniem, nie wiedz¹c, jak dzia³aj¹ ludzie, który te mechanizmy forsuj¹. Oczywiġcie, niemo¿liwe jest wprowadzenie zabezpieczenia, które bêdzie niemo¿liwe do z³amania lub obejġcia. Ca³a sztuka polega na stworzeniu takich sposobów zablokowania dostêpu do danych lub kodu programu, których z³amanie bêdzie bardzo czasoch³onne. Im d³u¿ej program pozostanie niedostêpny dla crackerów, tym d³u¿ej u¿ytkownicy bêd¹ kupowaæ wersjê legaln¹. Ksi¹¿ka „Cracking bez tajemnic” opisuje wszystko, co zwi¹zane jest z crackingiem i tworzeniem zabezpieczeñ — od podstawowych zagadnieñ do bardzo zaawansowanych technik. Zawiera informacje dotycz¹ce prostych algorytmów zabezpieczeñ, jak równie¿ sposoby tworzenia w³asnych szyfratorów. Jest przeznaczona zarówno dla programistów, którzy chc¹ siê nauczyæ zabezpieczania swoich programów przed crackingiem, ale równie¿ dla wszystkich, którzy zamierzaj¹ poznaæ techniki crackowania. W kolejnych rozdzia³ach ksi¹¿ki znajdziesz: • Informacje o istniej¹cych metodach zabezpieczania programów i danych • Metody ochrony przed deasemblacj¹ • Opisy narzêdzi u¿ywanych przez crackerów • Sposoby tworzenia szyfratorów i deszyfratorów PE • Metody crackowania programów • Podstawowe informacje dotycz¹ce asemblera Spis treści Przedmowa......................................................................................... 9 Wstęp .............................................................................................. 11 Czym jest cracking ...................................................c...................................................c......12 Ogólne zasady ochrony przed crackingiem ...................................................c...................13 Zasady Marka...................................................c...................................................c........13 Kolejne zasady ...................................................c...................................................c......14 Podstawowe pogramy używane do crackingu ...................................................c...............15 Czy w ogóle zabezpieczanie oprogramowania ma sens („I tak ktoś to scrackuje”) .........16 Zawartość płyty CD ...................................................c...................................................c....16 Rozdział 1. Istniejące sposoby zabezpieczeń i ich podatność na ataki ................. 17 Szyfrowanie danych ...................................................c...................................................c....17 Programy niepełne...................................................c...................................................c.......18 Podstawowa klasyfikacja dzisiejszych typów zabezpieczeń ......................................18 Ograniczenia czasowe ...................................................c.......................................19 Kolejne ograniczenia ilościowe...................................................c.........................22 Numer seryjny ...................................................c...................................................c22 Plik klucza ...................................................c...................................................c......27 Programy z ograniczoną funkcjonalnością...................................................c........32 Klucz sprzętowy ...................................................c................................................34 Kontrola obecności płyty CD ...................................................c............................36 Zabezpieczenia przed kopiowaniem płyt CD z danymi .............................................39 Fizyczne błędy nośnika CD ...................................................c...............................39 Błędne pliki (Dummy Files) ...................................................c....................................39 Płyty CD o pojemności większej niż 74 minuty (Oversized CD) ..............................40 Błędna wartość TOC (Illegal Table of Contents) ...................................................c....40 Duże pliki...................................................c...................................................c..............40 Programowe (fikcyjne) błędy i inne ingerencje w proces produkcji płyt CD ............41 Zabezpieczenia komercyjne.................................................c.................................41 SafeDisc ...................................................c...................................................c................42 SecuROM...................................................c...................................................c..............43 ProtectCD...................................................c...................................................c..............43 Armadillo (The Armadillo Software Protection System) ...........................................44 ASProtect ...................................................c...................................................c..............45 SalesAgent ...................................................c...................................................c............46 4 Cracking bez tajemnic VBox ...................................................c...................................................c.....................46 Programy napisane w Visual Basicu ...................................................c.................46 Porównanie łańcuchów ...................................................c............................................47 Porównanie zmiennych (Variant data type)...................................................c.............48 Porównanie zmiennych (Long data type) ...................................................c................48 Przekształcanie typów danych ...................................................c.................................48 Przemieszczanie danych ...................................................c..........................................49 Matematyka...................................................c...................................................c...........49 Różne ...................................................c...................................................c....................49 Kolejne poważne błędy obecnych zabezpieczeń..................................................49 Rozdział 2. Ochrona przed debugingiem .............................................................. 55 Stosowane debugery...................................................c...................................................c....56 Podstawy używania programu SoftICE ...................................................c.........................56 Konfiguracja programu ...................................................c............................................56 Podstawowe polecenia, funkcje i obsługa ...................................................c...............58 Okna...................................................c...................................................c................58 Punkty wstrzymania ...................................................c..........................................60 Praca z punktami wstrzymania ...................................................c..........................63 SEH — Strukturalna obsługa wyjątków ...................................................c........................64 Czym jest i do czego służy SEH ...................................................c..............................64 Konstrukcje korzystające z SEH...................................................c..............................65 Używane algorytmy ...................................................c.................................................66 Algorytmy wykorzystujące funkcję API CreateFileA..........................................66 Interfejs BoundsChecker i wykorzystanie przerwania INT 3...............................67 Wykorzystanie przerwania INT 1...................................................c......................69 Wykorzystanie przerwania INT 68h...................................................c..................71 Wyszukiwanie wartości w rejestrach ...................................................c................72 Wyszukiwanie wartości w pliku autoexec.bat...................................................c...72 Punkty wstrzymania ...................................................c...................................................c....73 Programowe punkty wstrzymania...................................................c............................74 Punkt wstrzymania na przerwanie (BPINT)...................................................c......74 Punkt wstrzymania na wykonanie (BPX)...................................................c..........75 Punkt wstrzymania na dostęp do zakresu pamięci (BPR) ....................................75 Sprzętowe punkty wstrzymania ...................................................c...............................76 Opis przykładowego programu do detekcji sprzętowych punktów wstrzymania ...78 Metody zaawansowane ...................................................c..................................................80 Tryby Ring ...................................................c...................................................c............80 Sposoby przejścia pomiędzy Ring3 i Ring0...................................................c......81 Wykrycie programu SoftICE za pomocą VxDCall ...................................................c.86 Dezaktywacja skrótu klawiaturowego programu SoftICE .........................................88 Kolejne proste możliwości i wykorzystanie SEH ...................................................c..........90 Rozdział 3. Ochrona przed deasemblacją ............................................................. 93 Używane deasemblery...................................................c...................................................c.93 Podstawy użytkowania W32Dasm...................................................c.................................94 Stosowane algorytmy ...................................................c...................................................c..96 Algorytmy podstawowe ...................................................c...........................................97 Ochrona łańcuchów ...................................................c...........................................97 Ochrona importowanych funkcji ...................................................c.......................97 SMC — kod samomodyfikujący się ...................................................c........................98 Pasywny SMC ...................................................c...................................................c99 Aktywny SMC ...................................................c.................................................101 Edycja kodu programu w trakcie pracy programu...................................................c.102 Spis treści 5 Rozdział 4. Program FrogsICE i obrona przed nim ............................................. 103 Podstawy użytkowania programu FrogsICE...................................................c................103 Basic options...................................................c...................................................c.103 Advanced options ...................................................c............................................104 Stosowane algorytmy ...................................................c...................................................c105 VxDCall funkcji VMM_GetDDBList ...................................................c...................105 Wykorzystanie funkcji CreateFileA ...................................................c......................107 Rozdział 5. Program ProcDump i obrona przed nim ........................................... 109 Podstawy użytkowania programu ProcDump ...................................................c..............109 Co to jest dumping i do czego służy ...................................................c............................112 Używane algorytmy ...................................................c...................................................c..112 Rozdział 6. Edycja kodu programu..................................................................... 115 Metody stosowane przy edycji kodu programu ...................................................c...........115 Podstawy użytkowania programu Hiew...................................................c.......................116 Edycja programu do detekcji SoftICE ...................................................c...................117 Stosowane algorytmy ...................................................c...................................................c119 Kontrola spójności danych...................................................c.....................................119 Kontrola spójności danych w pliku ...................................................c.................120 Kontrola spójności danych w pamięci...................................................c.............122 Inne sposoby ...................................................c...................................................c.......126 Rozdział 7. Szyfratory i kompresory PE oraz format PE...................................... 127 Co to jest format PE pliku? ...................................................c..........................................127 Czym jest szyfrator (kompresor) PE i jak działa...................................................c..........128 Jak stworzyć szyfrator (kompresor) PE...................................................c...........129 Wady szyfratorów (kompresorów) PE ...................................................c............130 Stosowane szyfratory (kompresory) PE...................................................c.................130 ASPack ...................................................c...................................................c.........130 CodeSafe...................................................c...................................................c.......131 NeoLite ...................................................c...................................................c.........131 NFO ...................................................c...................................................c..............131 PE-Compact...................................................c...................................................c..132 PE-Crypt ...................................................c...................................................c.......132 PE-Shield ...................................................c...................................................c......133 Petite ...................................................c...................................................c.............133 Shrinker ...................................................c...................................................c........134 UPX ...................................................c...................................................c..............134 WWPack32 ...................................................c...................................................c...135 Format plików PE...................................................c...................................................c......135 Weryfikacja formatu PE ...................................................c........................................135 Nagłówek PE ...................................................c...................................................c......138 Tabela sekcji ...................................................c...................................................c.......140 Nie wiesz, co oznaczają słowa Virtual, Raw i RVA? ........................................141 Tabela importów ...................................................c...................................................c.142 Tabela eksportów ...................................................c...................................................c145 Tworzymy szyfrator PE ...................................................c...............................................146 Dodanie nowej sekcji do pliku...................................................c...............................147 Przekierowanie strumienia danych ...................................................c........................150 Dodanie kodu do nowej sekcji ...................................................c...............................151 Skok z powrotem i zmienne...................................................c...................................152 Funkcje importowane...................................................c.............................................156 Utworzenie tabeli importów ...................................................c............................157 Przetworzenie oryginalnej tabeli importów...................................................c.....160 Użycie importowanej funkcji ...................................................c..........................164 6 Cracking bez tajemnic Obróbka TLS ...................................................c...................................................c......165 Szyfrowanie ...................................................c...................................................c........167 Jaki wybrać algorytm szyfrowania ...................................................c..................167 Znane algorytmy szyfrowania ...................................................c.........................167 Co się stanie, gdy ktoś złamie szyfr ...................................................c................169 Co szyfrować, a czego nie ...................................................c...............................170 Demonstracja prostego szyfrowania w szyfratorze PE ......................................171 Finalna postać stworzonego szyfratora PE ...................................................c............175 Dodatkowe możliwości zabezpieczeń ...................................................c...................192 Anti-SoftICE Symbol Loader ...................................................c..........................192 Kontrola Program Entry Point ...................................................c.........................193 RSA...................................................c...................................................c.....................193 Przykład zastosowania RSA ...................................................c............................196 Podsumowanie szyfratorów i formatu PE...................................................c..............197 Rozdział 8. Kolejne programy stosowane przez crackerów ................................ 199 Registry Monitor ...................................................c...................................................c.......199 File Monitor.......................................c...................................................c...........................201 R!SC’S Process Patcher ...................................................c...............................................202 Polecenia w skryptach ...................................................c.....................................203 The Customiser ...................................................c...................................................c.........204 Rozdział 9. Crackujemy .................................................................................... 207 Cruehead — CrackMe v1.0...................................................c..........................................207 Cruehead — CrackMe v2.0...................................................c..........................................210 Cruehead — CrackMe v3.0...................................................c..........................................211 CoSH — Crackme1...................................................c...................................................c...214 Mexelite — Crackme 4.0 ...................................................c.............................................215 Immortal Descendants — Crackme 8 ...................................................c..........................216 Easy Serial ...................................................c...................................................c....217 Harder Serial...................................................c...................................................c.218 Name/Serial ...................................................c...................................................c..218 Matrix ...................................................c...................................................c...........219 KeyFile ...................................................c...................................................c.........219 NAG...................................................c...................................................c..............220 Cripple ...................................................c...................................................c..........220 Duelist — Crackme #5...................................................c.................................................220 Ręczne deszyfrowanie pliku ...................................................c............................221 Zmiany bezpośrednio w pamięci ...................................................c.....................224 tC — CrackMe 9 id:6 ...................................................c..............................................225 Uzyskanie poprawnego numeru seryjnego...................................................c......225 Zamiana programu na generator numerów seryjnych ........................................227 tC — CrackMe 10 id:7 ...................................................c............................................228 tC — Crackme 13 id:10 ...................................................c...........................................229 tC — Crackme 20 id:17 ...................................................c...........................................231 ZemoZ — Matrix CrackMe ...................................................c.........................................234 ZemoZ — CRCMe...................................................c...................................................c....237 Edycja programu w edytorze heksadecymalnym ...............................................239 Wykorzystanie programu ładującego ...................................................c..............242 Rozdział 10. Kolejne informacje o crackingu ....................................................... 245 Wielki wybuch, czyli jak się to wszystko zaczęło ...................................................c.......245 Kto poświęca się crackingowi...................................................c......................................246 Znani crackerzy i grupy crackerskie ...................................................c............................246 +HCU...................................................c...................................................c............247 Immortal Descendants ...................................................c.....................................247 Spis treści 7 Messing in Bytes — MiB ...................................................c................................248 Crackers in Action — CiA ...................................................c..............................248 Phrozen Crew ...................................................c..................................................248 United Cracking Force — UCF...................................................c.......................249 Ebola Virus Crew ...................................................c............................................249 TNT ...................................................c...................................................c..............249 Evidence ...................................................c...................................................c.......249 Da Breaker Crew ...................................................c.............................................250 Ważne miejsca i źródła w internecie...................................................c............................250 Kilka ogólnych rad od crackerów ...................................................c................................252 Cracking (Lucifer48) ...................................................c.......................................252 NOP Patching (+ORC) ...................................................c....................................253 Patching (MisterE)...................................................c...........................................253 Myśleć jak cracker (rudeboy) ...................................................c..........................253 Tools (rudeboy) ...................................................c...............................................253 Rozdział 11. Referencje...................................................................................... 255 Podstawowe instrukcje asemblera...................................................c................................255 Komunikaty Windows...................................................c..................................................261 Dostęp do rejestrów...................................................c...................................................c...264 Przegląd funkcji programu SoftICE...................................................c.............................267 Ustawianie punktów wstrzymania...................................................c...................267 Manipulowanie punktami wstrzymania...................................................c...........268 Wyświetlanie i zmiany w pamięci...................................................c...................268 Wyświetlenie informacji systemowych...................................................c...........268 Polecenia dla portów we-wy...................................................c............................270 Polecenia sterujące przepływem danych ...................................................c.........270 Tryby pracy...................................................c...................................................c...270 Polecenie wydawane przez użytkownika ...................................................c........270 Użyteczne polecenia ...................................................c........................................271 Polecenia klawiszy w edytorze liniowym ...................................................c.......271 Przewijanie ...................................................c...................................................c...272 Polecenia do manipulowania oknami ...................................................c..............272 Obsługa okien ...................................................c..................................................272 Polecenia dla symboli i źródeł...................................................c.........................273 Operatory specjalne ...................................................c.........................................273 Skoki warunkowe, bezwarunkowe i instrukcje set ...................................................c......273 Skoki warunkowe (przejęto z CRC32 Tutorial #7) ............................................273 Skoki bezwarunkowe (przejęto z CRC32 Tutorial #7) ......................................275 Instrukcje SET (AntiMaterie) ...................................................c..........................276 Algorytm CRC-32 ...................................................c...................................................c.....277 Kolejne algorytmy do zastosowania z szyfratorami i kompresorami PE........................279 Demonstracja algorytmu szyfrującego...................................................c.........................280 Drobne poprawki do ProcDumpa...................................................c.................................284 Interfejs BoundsChecker ...................................................c..............................................287 Get ID ...................................................c...................................................c...........287 Set Breakpoint ...................................................c.................................................288 Activate breakpoint...................................................c..........................................288 Deactivate Lowest Breakpoint...................................................c.........................288 Get Breakpoint Status ...................................................c......................................288 Clear Breakpoint...................................................c..............................................288 Rozdział 12. Podsumowanie ............................................................................... 289 Skorowidz....................................................................................... 291 Rozdział 3. Ochrona przed deasemblacją Pojęcie deasemblacji już objaśniałem — chodzi o przekształcenie programu do jego postaci statycznej w asemblerze. Takie postępowanie pomaga zrozumieć logikę nie- których algorytmów i uzyskać ogólną orientację w programie (zwłaszcza w kwestii wyszukiwania łańcuchów i importowanych funkcji oraz miejsc w programie, skąd są wywoływane i stosowane). Właśnie dzięki możliwości wyszukiwania używanych przez program łańcuchów i im- portowanych funkcji deasemblery stały się bardzo popularne. Dzięki tym funkcjom cracker często może się dostać do algorytmu zabezpieczającego, bez przeszkód go przestudiować i następnie usunąć. To czyni deasemblery potężną bronią nawet w ręku żółtodzioba. Używane deasemblery Za standard w dziedzinie deasemblacji można uznać dwa programy — W32Dasm i IDA. Oczywiście istnieje jeszcze szereg innych (np. wyśmienity OllyDbg), ale te dwa są po prostu najpopularniejsze. Pierwszy z nich jest co prawda przestarzały, jego rozwój został już dawno wstrzymany i mogłoby się wydawać, że praktycznie jest już nie do wykorzystania, jednak tak nie jest. Crackerzy bowiem na tyle go sobie upodo- bali, że pomimo zakończenia jego rozwoju, kontynuują jego udoskonalanie i wydają najróżniejsze aktualizacje i poprawki. Jest to piękny przykład wykorzystania inżynie- rii wstecznej do udoskonalenia programu. Najróżniejsze aktualizacje i poprawki znajdziesz nas załączonej płycie CD. 94 Cracking bez tajemnic W32Dasm jest przeznaczony dla wszystkich grup użytkowników. Nie mamy zbyt wielkiego wpływu na przebieg i ustawienia deasemblacji, co rekompensowane jest przez bardzo prostą i intuicyjną obsługę oraz przejrzystość kodu wynikowego. Program oferuje tworzenie odnośników do łańcuchów oraz funkcji importowanych, wyszukiwa- nie pełnotekstowe i wiele innych funkcji (po wprowadzeniu jednej z poprawek również np. zintegrowany edytor heksadecymalny), które w znacznym stopniu ułatwiają wy- szukiwanie i orientację w programie. Obsługa tego narzędzia opisana jest w dalszej części niniejszego rozdziału. IDA lub Interactive Disassembler jest, jak już sama nazwa podpowiada, w pełni konfigurowalnym profesjonalnym narzędziem do deasemblacji. To prawdziwy król deasemblerów, który dzięki swoim możliwościom i funkcjom nie ma konkurencji. Dzięki niesamowitej elastyczności tego programu (wliczając w to możliwość pisania skryptów w języku podobnym do C) można bez problemów poprawnie deasemblować również programy, na których W32Dasm połamie sobie zęby. Procesem deasembla- cji można bowiem sterować ręcznie i w wielu aspektach go modyfikować. Te zalety od- bijają się nieco na obsłudze, która na początku może się wydawać trochę nieprzejrzysta i skomplikowana. Program przeznaczony jest raczej dla doświadczonych użytkow- ników i nie jest odpowiedni dla początkujących. Podstawy użytkowania W32Dasm Środowisko pracy programu sprawia bardzo uporządkowane i przejrzyste wrażenie (rysunek 3.1). Najpierw wybierz plik, który chcesz deasemblować (kliknij na pozycję Open File to Disassemble… i wybierz plik). Po tym, jak plik zostanie zdeasemblowany (czas tego procesu zależy od wielkości pliku), uaktywnione zostaną kolejne funkcje programu. Rysunek 3.1. Środowisko pracy deasemblera W32Dasm Rozdział 3. ♦ Ochrona przed deasemblacją 95 Naciskając na klawisz F10 lub pozycję menu Goto Program Entry Point przejdziesz do punktu wejścia kodu zdeasemblowanego (na ten temat więcej dowiesz się w części o formacie PE). Możesz przejść pod jakikolwiek inny adres naciskając Shift+F12 lub przycisk Goto Code Location. Spis importowanych funkcji wyświetlisz za pomocą przycisku Imports (rysunek 3.2), a eksportowanych Exports. Rysunek 3.2. Zorientowanie się w spisie funkcji importowanych nie jest problemem Jeżeli dwukrotnie klikniesz na wybraną funkcję API, przejdziesz do miejsca jej wywo- łania w kodzie programu. Jeżeli funkcja jest wywoływana wielokrotnie, w kolejne miejsce, gdzie jest wywoływana, przejdziesz powtarzaając powyższą czynność. Odnośniki do łańcuchów wyświetlisz używając przycisku String Data References. Często możesz znaleźć ciekawe łańcuchy, które doprowadzą cię w sam środek algoryt- mu zabezpieczeń (rysunek 3.3). Jeżeli spróbujesz zdeasemblować jakiś shareware’owy program, znajdziesz tam najpewniej komunikat o poprawnie i (lub) niepoprawnie podanych informacjach rejestracyjnych itd. Rysunek 3.3. Odnośniki do łańcuchów mogą wiele podpowiedzieć Poruszanie się po znalezionych łańcuchach odbywa się tak samo, jak po spisie im- portowanych funkcji — wystarczy kliknąć dwa razy znaleziony łańcuch aby przejść do kodu programu. 96 Cracking bez tajemnic Praca z samym zdeasemblowanym kodem programu i orientacja w nim jest bardzo łatwa. Odnośniki do skoków i instrukcji #.. są przejrzyście wkomponowane w kod, tak więc nie ma problemu nawet w przypadku bardziej złożonych algorytmów. Jasno- niebieski pasek oznacza instrukcję, którą właśnie się zajmujesz. Skoki warunkowe i bezwarunkowe można śledzić naciskając klawisz strzałki w prawo (lub przycisk Jump To), tak samo jak wejścia do instrukcji #.. (można je wykonać również przyciskiem Call). Wrócić do instrukcji #.. można naciskając klawisz strzałki w lewo (lub przycisk Ret), zaś w przypadku skoków przy pomocy kombinacji klawiszy Ctrl+ strzałka w lewo (lub przycisk Ret JMP). W przypadku większych plików, z którymi często się pracuje a proces deasemblacji trwa dłużej, wygodnie jest zapisać zdeasemblowany kod korzystając z pozycji o na- zwie Save Disassembly File and Create Project File w menu Disassembler. Wczytać plik można następnie z menu Project, pozycja Open Project File. To było wyliczenie podstawowych funkcji deasemblera W32Dasm. Obsługa jest prosta i bardzo intuicyjna, więc resztę funkcji bardzo szybko przyswoisz sam. Możliwością wykorzystania tego programu również jako debugera nie będziemy się zajmować. Daleko odbiega od jakości SoftICE. Stosowane algorytmy Podobnie jak przy antydebugingu, tak w przypadku antydeasemblacji można się zabez- pieczać przed specyficznymi funkcjami deasemblera lub przed samą deasemblacją. Jedyną różnicą jest to, że kiedy w antydebugingu program bronił się przed debugin- giem aktywnie poprzez detekcję działającego debugera (w książce jednak przedstawię również inne metody stosowane w algorytmach ochrony przed debugingiem, które utrudniają sam debuging — np. w tym rozdziale), w przypadku ochrony przed de- asemblacją tak uczynić nie można. Program bowiem, tak samo jak przy edycji kodu programu w edytorze heksadecymalnym, nie jest uruchomiony, więc może się bro- nić wyłącznie pasywnie. Detekcja aktywna jest co prawda możliwa (np. za pomocą wyszukiwania nazw uruchomionych procesów, nazw okien itd.), ale byłaby zupełnie do niczego (nie bacząc na fakt, że w odróżnieniu od programu SoftICE, deasemblerów i edytorów heksadecymalnych jest całe mnóstwo). Przed kilku laty, kiedy jeszcze nie było deasemblerów tak rozwiniętych jak dzisiaj, można było zapobiec deasemblacji w prosty sposób. Do kodu programu dodawano algorytmy oraz ciągi instrukcji, których kompilator nigdy by nie wygenerował. Dzięki temu przy próbie dekompilacji (w tym przypadku mówiąc ściślej deasemblacji) docho- dziło do błędu lub zapętlenia dekompilatora; na przykład następujące ciągi „mylących” instrukcji były w przeszłości powszechnie stosowanea: OQXGCZJ RWUJGCZ TGV Rozdział 3. ♦ Ochrona przed deasemblacją 97 Ten kod jest w rzeczywistości ekwiwalentem instrukcji ,/2 #: i ciągle można go pod różnymi postaciami znaleźć w szeregu mechanizmów zaabezpieczających. W dzisiejszych czasach deasemblery są już na coś podobnego przygotowane, tak więc stosowanie tej metody nie zda egzaminu. Nasze starania dlatego skierowane będą w pierwszym rzędzie na to, aby deasemblacja pliku była całkowicie bezprzedmioto- wa. Plik będzie można zdeasemblować, ale kod wynikowy będzie bądź bezsensowny, bądź tak nieprzejrzysty, że nieużyteczny do jakiejkolwiek analizy. Tym zajmiemy się jednak za chwilę. Teraz pokażę, jak zabezpieczyć program przed najniebezpieczniej- szymi funkcjami deasemblera, którymi są odnośniki do łańcuchów i importowanych funkcji. Algorytmy podstawowe Ochrona łańcuchów Zapobieganie przeszukiwaniu stosowanych przez program łańcuchów jest całkiem łatwe: można je zaszyfrować (zamiast poprawnych łańcuchów pojawią się wówczas wyłącznie bezsensowne znaki, które crackerowi nie ułatwią zadania), zmienić lub zmodyfikować w inny sposób, a najlepiej zaprzestać (jeżeli jest to możliwe) ich sto- sowania. Sposobów na to, jak zapisać jakiś tekst do plaiku, jest przecież bez liku. Ochrona importowanych funkcji Deasembler przy generowaniu listy importowanych funkcji wskazujących na poszcze- gólne miejsca w programie korzysta ze specjalnej tabeli, tzw. tabeli importów. O jej dokładnej strukturze, funkcji i zabezpieczeniu dowiesz się więcej z rozdziału o formacie PE, z którego zastosowania wywodzi się większość metod ochrony funkcji importo- wanych. Teraz przedstawię tylko tę najprostszą technikę bazującą na pośrednim wywoływaniu funkcji tak, aby sam kompilator nie umieszczał ich w tabeli importów). W taki sposób wywoływane funkcje nie zostaną wpisane do tabeli importów i deasem- bler nie zaszereguje ich do swojego spisu. Ta technika jest wyśmienita w szczególności do wykorzystania z funkcjami API, gdzie biblioteki, z której chcemy w taki sposób „importować”, nie trzeba już wgrywać do pamięci. Najpierw sprawdzimy bazę obrazu (+OCIG$CUG — patrz rozdział o formacie PE) wczytanej biblioteki, gdzie umieszczona jest wymagana funkcja, a następnie określimy jej adres, który następnie już bezpośrednio wywołamya. Poniższy przykład ustali adres funkcji TGCVG(KNG# w bibliotece kernel32.dll. Jest to naprawdę łatwe: */1 7. *CPFNG)GV/QFWNG*CPFNG MGTPGN MGTPGN+OCIG$CUG (#4241  TGCVG)GV2TQE#FFTGUU *CPFNG TGCVG(KNG# CFTGUHWPMELK TGCVG(KNG# 98 Cracking bez tajemnic Teraz już tylko wystarczy funkcję wywołać — np. nastaępująco: AACUO ] RWUJ RWUJ(+. A#664+$76 A014/#. RWUJ12 0A :+56+0) RWUJ RWUJ(+. A5*#4 A4 # RWUJ) 0 4+ A4 # RWUJYUMCļPKMAFQAPCY[ARNKMW ECNN TGCVG #.. TGCVG(KNG# OQXWEJY[VARNKMWGCZ _ *#0 . (KNG TGCVG(KNG# PCYCRNKMW) 0 4+ A4 # (+. A5*#4 A4 # 07.. 12 0A :+56+0)(+. A#664+$76 A014/#.07..  Ta technika sama w sobie jest bardzo podatna na atak, ponieważ można za pomocą spisu importowanych funkcji znaleźć i wykorzystać kombinację bardzo dobrze znanych funkcji )GV/QFWNG*CPFNG i )GV2TQE#FFTGUU, a ponadto w liście łańcuchów można zna- leźć również nazwy bibliotek oraz funkcji, co akurat rzuca się w oczy. Zalecam łączenie tej techniki z najróżniejszymi innymi technikami ochrony importowanych funkcji i łańcuchów. Możesz się też spotkać z algorytmem, gdzie adres importowanej funkcji określony w jednym miejscu (chociażby z wykorzystaniem tabeli importów lub bez tego) zostaje zachowany, a następnie wywoływany w zupełnie innym miejscu. To tylko jeden z wielu sposobów zapobiegania wyświetleniu przez deasembler importowanej funkcji w miejscu, gdzie naprawdę najmniej tego potrzebujesaz. Praktyczny przykład wykorzystania powyższych metod znajdziesz w jednym z moich przykładów crackme w rozdziale dziewiątym. SMC — kod samomodyfikujący się Do najczęściej stosowanych sposobów zabezpieczenia oprogramowania, i to nie tylko przed deasemblacją, zaliczany jest SMC (ang. Self Modyfying Code). Możliwe, że zamieszczenie tej techniki w rozdziale o antydeasemblacji nie będzie się wydawało poprawne, ale miej na względzie to, że liczne techniki antycrackingowe nawzajem się pokrywają i uzupełniają, nie można więc dokładnie ich rozdzielić. Bardziej niż oczywi- ste jest, że jakaś technika antydeasemblacji „pracuje” również np. jako kod antydebu- gingowy i vice versa. W przypadku SMC obowiązuje to w dwójnasób: utrudnia lub wręcz uniemożliwia edycję kodu źródłowego, debuging ia deasemblację. Za SMC można uznać dwa rodzaje kodu: pierwszy wykorzystuje w pełni dynamiczne generowanie (edycję) kodu programu bezpośrednio podczas pracy programu. Drugi typ wykorzystuje wielopostaciowość zapisu kodu w asemblerze. W celu usystema- tyzowania, pierwszą z wymienianych możliwości pozwolę sobie nazwać aktywnym, a drugą pasywnym SMC. W żadnym jednak przypadku nie są ato oficjalne nazwy. Rozdział 3. ♦ Ochrona przed deasemblacją 99 Pasywny SMC Spójrz na następujący przykład:  $LOR  ECNNRCTCOGVT[KPUVTWMELKPKGUæYCľPG Zapewne zauważyłeś coś bardzo dziwnego — pierwsza instrukcja ,/2 skacze gdzieś w środek następnej instrukcji #..!? W ten sposób zostaje „przeskoczony” jeden bajt pod adresem . Po skoku więc kod w rzeczywistości wygląda następaująco:  $LOR  VCPKGYđCħEKYCKPUVTWMELCQUVCPKGRTGUMQEQPC KPEGCZ Na tym prostym przykładzie zrozumiałeś zapewne, o co chodzi w pasywnym SMC i jak ta technika funkcjonuje. Stosując taki sposób zapisu można osiągnąć doskonałe wyniki. Kod staje się bardzo nieprzejrzysty, co w niewyobrażalny wręcz sposób utrudnia nie tylko debugowanie i deasemblację, ale również samą edycję kodu pro- gramu. Zrozumienie struktury takiego kodu jest bardazo trudne. Obawiam się, że nie istnieją chyba ogólne wskazówki tworzenia algorytmów SMC. Zawsze wymaga to określonej ilości czasu, cierpliwośaci i doświadczenia. Niech poniższy przykład kodu SMC posłuży za inspiracjęa:  $LORU $$UWD=GDZ?=?FN LU ZQTCN  $LORU $(UWD=GEZ?=(?CN  $ZEJIGDRGDZ  CFFEJCN ( $KOWNGCZF=GEZ?=(? $ (  $ #TGVP1 # $ $$OQXCJ$  TGVP $RQRGDZ Czy powiedziałbyś, że jedyne, co ten kod realizuje, to wpisanie wartości 1 do rejestru EAX? Zapewne nie, a więc przyjrzyjmy się kolejnym zmianoam kodu przy jego realizacji. Po pierwszym skoku z adresu  kod zmieni się do następującej postaci: RWUJGDZ OQXGDZ LOR $UWD=GEZ (?CN ZEJIGDRGDZ CFFEJCN KOWNGCZ=GEZ (? $ (TGVGCGD OQXCJ$ TGV RQRGDZ 100 Cracking bez tajemnic Wykonane zostaną instrukcje pod adresami  i  i dojdzie do skoku pod adres . Po skoku kod wygląda następująco: LOR OQXCJ$ TGV RQRGDZ Wykonany zostanie kolejny skok z powrotem pod adresa  :  ZQTGDZ LOR ECNN CFEGCZ $  CFFCNE LOR OQXCJ$ TGV RQRGDZ Po wykonaniu instrukcji pod adresem  dochodzi do kolejnego skoku tym ra- zem pod adres : ZQTGDZ  PQR  LOR (TGVGCGD OQXCJ$ TGV RQRGDZ Teraz wreszcie dochodzi do ostatniego skoku pod adraesem  : OQXGCZGDZ RQRGDZ Jeżeli przepiszemy wszystkie „prawdziwe” instrukcje, otrzymamy następujący kod, z którego już bez problemu zrozumiesz, jak algorytm adziała: RWUJGDZCEJQYC $: OQXGDZJ $:J ZQTGDZJ $:J ZQTGDZJ $:N OQXGCZGDZ #: $:N RQRGDZRT[YTÎEK $: Cały powyższy kod jest ekwiwalentem instrukcji /18 #:. Dzięki zastosowaniu SMC i wybraniu większej liczby instrukcji do wykonania danego zadania (zamiast zwykłego /18 #:) tak prymitywne zadanie, jakim jest wpisanie wartości 1 do rejestru EAX, staje się bardzo nieprzejrzystą i skomplikowaną operacją. Zrozumienie struktury takiego kodu jest bardzo trudne. W przypadku dłuższego algo- rytmu bez debugera wykonanie tego zadania jest wręcaz niemożliwe. Ten przykład miał zilustrować nie tylko implementację SMC w praktyce, ale również fakt, że czasami nie jest złym pomysłem napisanie nawet prostej rzeczy w sposób trochę bardziej złożony. Wynik i powodzenie obu tych technaik możesz sam ocenić. Rozdział 3. ♦ Ochrona przed deasemblacją 101 Aktywny SMC Jednym z najlepszych sposobów ochrony kodu programu jest jego dynamiczne genero- wanie. Metodę tę już zalecałem na początku pierwszego rozdziału, jednak dokładniej zdefiniowana i opisana jest dopiero tutaj. Moim staraniem było zgrupowanie imple- mentacji SMC w jednym rozdziale — chociaż możliwe, że nie jest to najlepsze miejsce. Nie chodzi w zasadzie o nic innego niż edycję kodu programu bezpośrednio w trak- cie pracy programu. Tak jak wpisujesz dane do zmiennych, rejestrów, itp., możesz spokojnie modyfikować również kod programu. Jedynym problemem jest to, że obszar w pamięci, do którego wpisujemy, musi mieć charakterystykę YTKVGCDNG, a więc musi w nim istnieć możliwość zapisu, w przeciwnym razie w programie zaistnieje wy- jątek (56#675A# 55A8+1.#6+10). Ten temat jest ściśle związany z formatem PE, więc dowiesz się więcej dopiero w poświęconym temu zagadnieniu rozdziale. Tym- czasem wystarczy zastosowanie funkcji 8KTVWCN2TQVGEV, która z odpowiednimi pa- rametrami umożliwi nam zapisywanie w uruchamialnym akodzie programu. Aby zademonstrować prawdziwą moc i możliwości SMC, wszystko pokażę na naprawdę prostym przykładzie. Przyjrzyj się następującemu kodowi — zapewne natychmiast będzie dla ciebie oczywistym efekt jego działania: $11.#647  KH # /GUUCIG$QZ -QFRTQITCOWPKGQUVCđOQF[HKMQYCP[07../$A1-  GNUG /GUUCIG$QZ -QFRTQITCOWQUVCđRQYQFGPKGOOQF[HKMQYCP[07../$A1-  Konstrukcja z GNUG jest logicznie całkowicie zbędna, ponieważ zawsze dojdzie do wy- świetlenia komunikatu Kod programu nie został zmodyfikowany. W asemblerze kod zapiszemy mniej więcej tak: AACUO ] OQXGCZ EORGCZ LP5/ A _ /GUUCIG$QZ -QFRTQITCOWPKGQUVCđOQF[HKMQYCP[07../$A1-  TGVWTP 5/ A /GUUCIG$QZ -QFRTQITCOWQUVCđRQYQFGPKGOOQF[HKMQYCP[07../$A1-  Teraz do programu wstawimy wywołanie funkcji 8KTVWCN2QTVGEV i spróbujemy przepi- sać instrukcję ,0 przez instrukcję logicznie odwrotną , . Tym sposobem odwróci- my logikę całego algorytmu i powinno pojawić się okienko komunikatu /GUUCIG$QZ z tekstem Kod programu został z powodzeniem zmodyfikowany. Kod wygląda nastę- pująco: 914 #FTGU.CUV2TQVGEV AACUO ] OQX#FTGUQHHUGV2TGRKU _ 102 Cracking bez tajemnic 8KTVWCN2TQVGEV XQKF #FTGU2#) A4 # 94+6 .CUV2TQVGEV  AACUO ] OQXGDZ#FTGU OQX$[VGRVT=GDZ?JRTGRKUCPKGYCTVQħEKJPCJVPKPUVTWMELK ,0 PC, OQXGCZ EORGCZ _ 2TGRKU LP5/ A _ /GUUCIG$QZ -QFRTQITCOWPKGQUVCđOQF[HKMQYCP[07../$A1-  TGVWTP 5/ A /GUUCIG$QZ -QFRTQITCOWQUVCđRQYQFGPKGOOQF[HKMQYCP[07../$A1-  Wynikiem działania kodu po tej modyfikacji będzie komunikat Kod programu został z powodzeniem zmodyfikowany. Jak widzisz, naprawdę nie chodzi o żadną naukę. Wystarczy drobna modyfikacja w postaci wywołania funkcji API 8KTVWCN2TQVGEV poszerzająca prawa dostępu o moż- liwość zapisu (2#) A4 # 94+6 — odczyt i zapis) w określonym obszarze pamięci; w na- szym przypadku w obszarze, gdzie wczytany jest urucahamialny kod programu. Jak mówiłem, to naprawdę prymitywny przykład, ale wykorzystanie i potencjał SMC ilustruje wyśmienicie. Jak zawsze zależy tylko od ciebie, jak tę technikę dopracujesz i ile czasu poświęcisz na projekt kodu programu. Edycja kodu programu w trakcie pracy programu Najróżniejsze metody zabezpieczania programów przed crackingiem wykorzystują podstawową ideę aktywnego SMC — więc edycja kodu programu w trakcie jego działania należy bezspornie do tych najlepszych i również najczęściej stosowanych. Możliwości są naprawdę nieograniczone — od szyfrowania kodu programu, zmian poszczególnych instrukcji, ich celowego niszczenia, a z drugiej strony aż po wstawia- nie i przesuwanie wielkich bloków danych, przepisywania całych funkcji itd. Zależy to po prostu wyłącznie od twojej fantazji. Na kilka możliwości wykorzystania edycji kodu programu w trakcie jego pracy już kilkukrotnie zwracałem uwagę w wielu miejscach tej książki i jeszcze się z nimi spo- tkasz. Ta część rozdziału miała tylko pokazać, jakie to proste. W rozdziale siódmym omówimy szyfrowanie i deszyfrowanie danych w trakcie pracy programu z wyko- rzystaniem formatu PE.
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Cracking bez tajemnic
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: