Cracking Bez Tajemnic

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 16

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG

Cracking bez
tajemnic
Autor: Jakub Zemanek
Tumaczenie: Jerzy Kdziera
ISBN: 83-7361-444-3
Tytu oryginau: Cracking bez tajemstvi
Format: B5, stron: 304

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Zabezpieczanie programw i danych jest nierozerwalnie zwizane ze sposobami


omijania lub amania blokad. Nie mona stworzy skutecznych mechanizmw
chronicych programy i dane przez nielegalnym kopiowaniem, nie wiedzc, jak dziaaj
ludzie, ktry te mechanizmy forsuj. Oczywicie, niemoliwe jest wprowadzenie
zabezpieczenia, ktre bdzie niemoliwe do zamania lub obejcia. Caa sztuka polega
na stworzeniu takich sposobw zablokowania dostpu do danych lub kodu programu,
ktrych zamanie bdzie bardzo czasochonne. Im duej program pozostanie
niedostpny dla crackerw, tym duej uytkownicy bd kupowa wersj legaln.
Ksika Cracking bez tajemnic opisuje wszystko, co zwizane jest z crackingiem
i tworzeniem zabezpiecze od podstawowych zagadnie do bardzo zaawansowanych
technik. Zawiera informacje dotyczce prostych algorytmw zabezpiecze, jak rwnie
sposoby tworzenia wasnych szyfratorw. Jest przeznaczona zarwno dla
programistw, ktrzy chc si nauczy zabezpieczania swoich programw przed
crackingiem, ale rwnie dla wszystkich, ktrzy zamierzaj pozna techniki
crackowania.
W kolejnych rozdziaach ksiki znajdziesz:
Informacje o istniejcych metodach zabezpieczania programw i danych
Metody ochrony przed deasemblacj
Opisy narzdzi uywanych przez crackerw
Sposoby tworzenia szyfratorw i deszyfratorw PE
Metody crackowania programw
Podstawowe informacje dotyczce asemblera

Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl

Spis treci
Przedmowa........................................................................................ 9
Wstp ............................................................................................. 11
Czym jest cracking ............................................................................................................12
Oglne zasady ochrony przed crackingiem ......................................................................13
Zasady Marka..............................................................................................................13
Kolejne zasady ............................................................................................................14
Podstawowe pogramy uywane do crackingu ..................................................................15
Czy w ogle zabezpieczanie oprogramowania ma sens (I tak kto to scrackuje) .........16
Zawarto pyty CD ..........................................................................................................16

Rozdzia 1. Istniejce sposoby zabezpiecze i ich podatno na ataki ................. 17


Szyfrowanie danych ..........................................................................................................17
Programy niepene.............................................................................................................18
Podstawowa klasyfikacja dzisiejszych typw zabezpiecze ......................................18
Ograniczenia czasowe ..........................................................................................19
Kolejne ograniczenia ilociowe............................................................................22
Numer seryjny ......................................................................................................22
Plik klucza ............................................................................................................27
Programy z ograniczon funkcjonalnoci...........................................................32
Klucz sprztowy ...................................................................................................34
Kontrola obecnoci pyty CD ...............................................................................36
Zabezpieczenia przed kopiowaniem pyt CD z danymi .............................................39
Fizyczne bdy nonika CD ..................................................................................39
Bdne pliki (Dummy Files) .......................................................................................39
Pyty CD o pojemnoci wikszej ni 74 minuty (Oversized CD) ..............................40
Bdna warto TOC (Illegal Table of Contents) .......................................................40
Due pliki....................................................................................................................40
Programowe (fikcyjne) bdy i inne ingerencje w proces produkcji pyt CD ............41
Zabezpieczenia komercyjne..................................................................................41
SafeDisc ......................................................................................................................42
SecuROM....................................................................................................................43
ProtectCD....................................................................................................................43
Armadillo (The Armadillo Software Protection System) ...........................................44
ASProtect ....................................................................................................................45
SalesAgent ..................................................................................................................46

Cracking bez tajemnic


VBox ...........................................................................................................................46
Programy napisane w Visual Basicu ....................................................................46
Porwnanie acuchw ...............................................................................................47
Porwnanie zmiennych (Variant data type)................................................................48
Porwnanie zmiennych (Long data type) ...................................................................48
Przeksztacanie typw danych ....................................................................................48
Przemieszczanie danych .............................................................................................49
Matematyka.................................................................................................................49
Rne ..........................................................................................................................49
Kolejne powane bdy obecnych zabezpiecze..................................................49

Rozdzia 2. Ochrona przed debugingiem ............................................................. 55


Stosowane debugery..........................................................................................................56
Podstawy uywania programu SoftICE ............................................................................56
Konfiguracja programu...............................................................................................56
Podstawowe polecenia, funkcje i obsuga ..................................................................58
Okna......................................................................................................................58
Punkty wstrzymania .............................................................................................60
Praca z punktami wstrzymania .............................................................................63
SEH Strukturalna obsuga wyjtkw ...........................................................................64
Czym jest i do czego suy SEH .................................................................................64
Konstrukcje korzystajce z SEH.................................................................................65
Uywane algorytmy ....................................................................................................66
Algorytmy wykorzystujce funkcj API CreateFileA..........................................66
Interfejs BoundsChecker i wykorzystanie przerwania INT 3...............................67
Wykorzystanie przerwania INT 1.........................................................................69
Wykorzystanie przerwania INT 68h.....................................................................71
Wyszukiwanie wartoci w rejestrach ...................................................................72
Wyszukiwanie wartoci w pliku autoexec.bat......................................................72
Punkty wstrzymania ..........................................................................................................73
Programowe punkty wstrzymania...............................................................................74
Punkt wstrzymania na przerwanie (BPINT).........................................................74
Punkt wstrzymania na wykonanie (BPX).............................................................75
Punkt wstrzymania na dostp do zakresu pamici (BPR) ....................................75
Sprztowe punkty wstrzymania ..................................................................................76
Opis przykadowego programu do detekcji sprztowych punktw wstrzymania ...78
Metody zaawansowane .....................................................................................................80
Tryby Ring ..................................................................................................................80
Sposoby przejcia pomidzy Ring3 i Ring0.........................................................81
Wykrycie programu SoftICE za pomoc VxDCall ....................................................86
Dezaktywacja skrtu klawiaturowego programu SoftICE .........................................88
Kolejne proste moliwoci i wykorzystanie SEH .............................................................90

Rozdzia 3. Ochrona przed deasemblacj ............................................................ 93


Uywane deasemblery.......................................................................................................93
Podstawy uytkowania W32Dasm....................................................................................94
Stosowane algorytmy ........................................................................................................96
Algorytmy podstawowe ..............................................................................................97
Ochrona acuchw ..............................................................................................97
Ochrona importowanych funkcji ..........................................................................97
SMC kod samomodyfikujcy si ...........................................................................98
Pasywny SMC ......................................................................................................99
Aktywny SMC....................................................................................................101
Edycja kodu programu w trakcie pracy programu....................................................102

Spis treci

Rozdzia 4. Program FrogsICE i obrona przed nim ............................................. 103


Podstawy uytkowania programu FrogsICE...................................................................103
Basic options.......................................................................................................103
Advanced options ...............................................................................................104
Stosowane algorytmy ......................................................................................................105
VxDCall funkcji VMM_GetDDBList ......................................................................105
Wykorzystanie funkcji CreateFileA .........................................................................107

Rozdzia 5. Program ProcDump i obrona przed nim ........................................... 109


Podstawy uytkowania programu ProcDump .................................................................109
Co to jest dumping i do czego suy ...............................................................................112
Uywane algorytmy ........................................................................................................112

Rozdzia 6. Edycja kodu programu.................................................................... 115


Metody stosowane przy edycji kodu programu ..............................................................115
Podstawy uytkowania programu Hiew..........................................................................116
Edycja programu do detekcji SoftICE ......................................................................117
Stosowane algorytmy ......................................................................................................119
Kontrola spjnoci danych........................................................................................119
Kontrola spjnoci danych w pliku ....................................................................120
Kontrola spjnoci danych w pamici................................................................122
Inne sposoby .............................................................................................................126

Rozdzia 7. Szyfratory i kompresory PE oraz format PE...................................... 127


Co to jest format PE pliku? .............................................................................................127
Czym jest szyfrator (kompresor) PE i jak dziaa.............................................................128
Jak stworzy szyfrator (kompresor) PE..............................................................129
Wady szyfratorw (kompresorw) PE ...............................................................130
Stosowane szyfratory (kompresory) PE....................................................................130
ASPack ...............................................................................................................130
CodeSafe.............................................................................................................131
NeoLite ...............................................................................................................131
NFO ....................................................................................................................131
PE-Compact........................................................................................................132
PE-Crypt .............................................................................................................132
PE-Shield ............................................................................................................133
Petite ...................................................................................................................133
Shrinker ..............................................................................................................134
UPX ....................................................................................................................134
WWPack32 .........................................................................................................135
Format plikw PE............................................................................................................135
Weryfikacja formatu PE ...........................................................................................135
Nagwek PE ............................................................................................................138
Tabela sekcji .............................................................................................................140
Nie wiesz, co oznaczaj sowa Virtual, Raw i RVA? ........................................141
Tabela importw .......................................................................................................142
Tabela eksportw ......................................................................................................145
Tworzymy szyfrator PE ..................................................................................................146
Dodanie nowej sekcji do pliku..................................................................................147
Przekierowanie strumienia danych ...........................................................................150
Dodanie kodu do nowej sekcji..................................................................................151
Skok z powrotem i zmienne......................................................................................152
Funkcje importowane................................................................................................156
Utworzenie tabeli importw ...............................................................................157
Przetworzenie oryginalnej tabeli importw........................................................160
Uycie importowanej funkcji .............................................................................164

Cracking bez tajemnic


Obrbka TLS ............................................................................................................165
Szyfrowanie ..............................................................................................................167
Jaki wybra algorytm szyfrowania .....................................................................167
Znane algorytmy szyfrowania ............................................................................167
Co si stanie, gdy kto zamie szyfr ...................................................................169
Co szyfrowa, a czego nie ..................................................................................170
Demonstracja prostego szyfrowania w szyfratorze PE ......................................171
Finalna posta stworzonego szyfratora PE ...............................................................175
Dodatkowe moliwoci zabezpiecze ......................................................................192
Anti-SoftICE Symbol Loader .............................................................................192
Kontrola Program Entry Point ............................................................................193
RSA...........................................................................................................................193
Przykad zastosowania RSA ...............................................................................196
Podsumowanie szyfratorw i formatu PE.................................................................197

Rozdzia 8. Kolejne programy stosowane przez crackerw ................................ 199


Registry Monitor .............................................................................................................199
File Monitor.....................................................................................................................201
R!SCS Process Patcher ..................................................................................................202
Polecenia w skryptach ........................................................................................203
The Customiser ...............................................................................................................204

Rozdzia 9. Crackujemy ................................................................................... 207


Cruehead CrackMe v1.0.............................................................................................207
Cruehead CrackMe v2.0.............................................................................................210
Cruehead CrackMe v3.0.............................................................................................211
CoSH Crackme1.........................................................................................................214
Mexelite Crackme 4.0 ................................................................................................215
Immortal Descendants Crackme 8 .............................................................................216
Easy Serial ..........................................................................................................217
Harder Serial.......................................................................................................218
Name/Serial ........................................................................................................218
Matrix .................................................................................................................219
KeyFile ...............................................................................................................219
NAG....................................................................................................................220
Cripple ................................................................................................................220
Duelist Crackme #5....................................................................................................220
Rczne deszyfrowanie pliku ...............................................................................221
Zmiany bezporednio w pamici ........................................................................224
tC CrackMe 9 <id:6> .................................................................................................225
Uzyskanie poprawnego numeru seryjnego.........................................................225
Zamiana programu na generator numerw seryjnych ........................................227
tC CrackMe 10 <id:7> ...............................................................................................228
tC Crackme 13 <id:10>..............................................................................................229
tC Crackme 20 <id:17>..............................................................................................231
ZemoZ Matrix CrackMe ............................................................................................234
ZemoZ CRCMe..........................................................................................................237
Edycja programu w edytorze heksadecymalnym ...............................................239
Wykorzystanie programu adujcego .................................................................242

Rozdzia 10. Kolejne informacje o crackingu ...................................................... 245


Wielki wybuch, czyli jak si to wszystko zaczo ..........................................................245
Kto powica si crackingowi.........................................................................................246
Znani crackerzy i grupy crackerskie ...............................................................................246
+HCU..................................................................................................................247
Immortal Descendants ........................................................................................247

Spis treci

7
Messing in Bytes MiB ...................................................................................248
Crackers in Action CiA .................................................................................248
Phrozen Crew .....................................................................................................248
United Cracking Force UCF..........................................................................249
Ebola Virus Crew ...............................................................................................249
TNT ....................................................................................................................249
Evidence .............................................................................................................249
Da Breaker Crew ................................................................................................250
Wane miejsca i rda w internecie...............................................................................250
Kilka oglnych rad od crackerw ...................................................................................252
Cracking (Lucifer48) ..........................................................................................252
NOP Patching (+ORC) .......................................................................................253
Patching (MisterE)..............................................................................................253
Myle jak cracker (rudeboy) .............................................................................253
Tools (rudeboy) ..................................................................................................253

Rozdzia 11. Referencje..................................................................................... 255


Podstawowe instrukcje asemblera...................................................................................255
Komunikaty Windows.....................................................................................................261
Dostp do rejestrw.........................................................................................................264
Przegld funkcji programu SoftICE................................................................................267
Ustawianie punktw wstrzymania......................................................................267
Manipulowanie punktami wstrzymania..............................................................268
Wywietlanie i zmiany w pamici......................................................................268
Wywietlenie informacji systemowych..............................................................268
Polecenia dla portw we-wy...............................................................................270
Polecenia sterujce przepywem danych ............................................................270
Tryby pracy.........................................................................................................270
Polecenie wydawane przez uytkownika ...........................................................270
Uyteczne polecenia ...........................................................................................271
Polecenia klawiszy w edytorze liniowym ..........................................................271
Przewijanie .........................................................................................................272
Polecenia do manipulowania oknami .................................................................272
Obsuga okien .....................................................................................................272
Polecenia dla symboli i rde............................................................................273
Operatory specjalne ............................................................................................273
Skoki warunkowe, bezwarunkowe i instrukcje set .........................................................273
Skoki warunkowe (przejto z CRC32 Tutorial #7) ............................................273
Skoki bezwarunkowe (przejto z CRC32 Tutorial #7) ......................................275
Instrukcje SET (AntiMaterie) .............................................................................276
Algorytm CRC-32 ...........................................................................................................277
Kolejne algorytmy do zastosowania z szyfratorami i kompresorami PE........................279
Demonstracja algorytmu szyfrujcego............................................................................280
Drobne poprawki do ProcDumpa....................................................................................284
Interfejs BoundsChecker .................................................................................................287
Get ID .................................................................................................................287
Set Breakpoint ....................................................................................................288
Activate breakpoint.............................................................................................288
Deactivate Lowest Breakpoint............................................................................288
Get Breakpoint Status .........................................................................................288
Clear Breakpoint.................................................................................................288

Rozdzia 12. Podsumowanie .............................................................................. 289


Skorowidz...................................................................................... 291

Rozdzia 3.

Ochrona
przed deasemblacj
Pojcie deasemblacji ju objaniaem chodzi o przeksztacenie programu do jego
postaci statycznej w asemblerze. Takie postpowanie pomaga zrozumie logik niektrych algorytmw i uzyska ogln orientacj w programie (zwaszcza w kwestii
wyszukiwania acuchw i importowanych funkcji oraz miejsc w programie, skd s
wywoywane i stosowane).
Wanie dziki moliwoci wyszukiwania uywanych przez program acuchw i importowanych funkcji deasemblery stay si bardzo popularne. Dziki tym funkcjom
cracker czsto moe si dosta do algorytmu zabezpieczajcego, bez przeszkd go
przestudiowa i nastpnie usun. To czyni deasemblery potn broni nawet w rku
todzioba.

Uywane deasemblery
Za standard w dziedzinie deasemblacji mona uzna dwa programy W32Dasm
i IDA. Oczywicie istnieje jeszcze szereg innych (np. wymienity OllyDbg), ale te
dwa s po prostu najpopularniejsze. Pierwszy z nich jest co prawda przestarzay, jego
rozwj zosta ju dawno wstrzymany i mogoby si wydawa, e praktycznie jest ju
nie do wykorzystania, jednak tak nie jest. Crackerzy bowiem na tyle go sobie upodobali, e pomimo zakoczenia jego rozwoju, kontynuuj jego udoskonalanie i wydaj
najrniejsze aktualizacje i poprawki. Jest to pikny przykad wykorzystania inynierii wstecznej do udoskonalenia programu.
Najrniejsze aktualizacje i poprawki znajdziesz na zaczonej pycie CD.

94

Cracking bez tajemnic

W32Dasm jest przeznaczony dla wszystkich grup uytkownikw. Nie mamy zbyt
wielkiego wpywu na przebieg i ustawienia deasemblacji, co rekompensowane jest
przez bardzo prost i intuicyjn obsug oraz przejrzysto kodu wynikowego. Program
oferuje tworzenie odnonikw do acuchw oraz funkcji importowanych, wyszukiwanie penotekstowe i wiele innych funkcji (po wprowadzeniu jednej z poprawek rwnie
np. zintegrowany edytor heksadecymalny), ktre w znacznym stopniu uatwiaj wyszukiwanie i orientacj w programie. Obsuga tego narzdzia opisana jest w dalszej
czci niniejszego rozdziau.
IDA lub Interactive Disassembler jest, jak ju sama nazwa podpowiada, w peni
konfigurowalnym profesjonalnym narzdziem do deasemblacji. To prawdziwy krl
deasemblerw, ktry dziki swoim moliwociom i funkcjom nie ma konkurencji.
Dziki niesamowitej elastycznoci tego programu (wliczajc w to moliwo pisania
skryptw w jzyku podobnym do C) mona bez problemw poprawnie deasemblowa
rwnie programy, na ktrych W32Dasm poamie sobie zby. Procesem deasemblacji mona bowiem sterowa rcznie i w wielu aspektach go modyfikowa. Te zalety odbijaj si nieco na obsudze, ktra na pocztku moe si wydawa troch nieprzejrzysta
i skomplikowana. Program przeznaczony jest raczej dla dowiadczonych uytkownikw i nie jest odpowiedni dla pocztkujcych.

Podstawy uytkowania W32Dasm


rodowisko pracy programu sprawia bardzo uporzdkowane i przejrzyste wraenie
(rysunek 3.1). Najpierw wybierz plik, ktry chcesz deasemblowa (kliknij na pozycj
Open File to Disassemble i wybierz plik). Po tym, jak plik zostanie zdeasemblowany
(czas tego procesu zaley od wielkoci pliku), uaktywnione zostan kolejne funkcje
programu.
Rysunek 3.1.
rodowisko pracy
deasemblera
W32Dasm

Rozdzia 3. Ochrona przed deasemblacj

95

Naciskajc na klawisz F10 lub pozycj menu Goto Program Entry Point przejdziesz
do punktu wejcia kodu zdeasemblowanego (na ten temat wicej dowiesz si w czci
o formacie PE). Moesz przej pod jakikolwiek inny adres naciskajc Shift+F12 lub
przycisk Goto Code Location.
Spis importowanych funkcji wywietlisz za pomoc przycisku Imports (rysunek 3.2),
a eksportowanych Exports.
Rysunek 3.2.
Zorientowanie si
w spisie funkcji
importowanych
nie jest problemem

Jeeli dwukrotnie klikniesz na wybran funkcj API, przejdziesz do miejsca jej wywoania w kodzie programu. Jeeli funkcja jest wywoywana wielokrotnie, w kolejne
miejsce, gdzie jest wywoywana, przejdziesz powtarzajc powysz czynno.
Odnoniki do acuchw wywietlisz uywajc przycisku String Data References.
Czsto moesz znale ciekawe acuchy, ktre doprowadz ci w sam rodek algorytmu zabezpiecze (rysunek 3.3). Jeeli sprbujesz zdeasemblowa jaki sharewareowy
program, znajdziesz tam najpewniej komunikat o poprawnie i (lub) niepoprawnie
podanych informacjach rejestracyjnych itd.
Rysunek 3.3.
Odnoniki
do acuchw mog
wiele podpowiedzie

Poruszanie si po znalezionych acuchach odbywa si tak samo, jak po spisie importowanych funkcji wystarczy klikn dwa razy znaleziony acuch aby przej
do kodu programu.

96

Cracking bez tajemnic

Praca z samym zdeasemblowanym kodem programu i orientacja w nim jest bardzo


atwa. Odnoniki do skokw i instrukcji  s przejrzycie wkomponowane w kod,
tak wic nie ma problemu nawet w przypadku bardziej zoonych algorytmw. Jasnoniebieski pasek oznacza instrukcj, ktr wanie si zajmujesz.
Skoki warunkowe i bezwarunkowe mona ledzi naciskajc klawisz strzaki w prawo
(lub przycisk Jump To), tak samo jak wejcia do instrukcji  (mona je wykona
rwnie przyciskiem Call). Wrci do instrukcji  mona naciskajc klawisz
strzaki w lewo (lub przycisk Ret), za w przypadku skokw przy pomocy kombinacji
klawiszy Ctrl+<strzaka w lewo> (lub przycisk Ret JMP).
W przypadku wikszych plikw, z ktrymi czsto si pracuje a proces deasemblacji
trwa duej, wygodnie jest zapisa zdeasemblowany kod korzystajc z pozycji o nazwie Save Disassembly File and Create Project File w menu Disassembler. Wczyta
plik mona nastpnie z menu Project, pozycja Open Project File.
To byo wyliczenie podstawowych funkcji deasemblera W32Dasm. Obsuga jest prosta
i bardzo intuicyjna, wic reszt funkcji bardzo szybko przyswoisz sam. Moliwoci
wykorzystania tego programu rwnie jako debugera nie bdziemy si zajmowa.
Daleko odbiega od jakoci SoftICE.

Stosowane algorytmy
Podobnie jak przy antydebugingu, tak w przypadku antydeasemblacji mona si zabezpiecza przed specyficznymi funkcjami deasemblera lub przed sam deasemblacj.
Jedyn rnic jest to, e kiedy w antydebugingu program broni si przed debugingiem aktywnie poprzez detekcj dziaajcego debugera (w ksice jednak przedstawi
rwnie inne metody stosowane w algorytmach ochrony przed debugingiem, ktre
utrudniaj sam debuging np. w tym rozdziale), w przypadku ochrony przed deasemblacj tak uczyni nie mona. Program bowiem, tak samo jak przy edycji kodu
programu w edytorze heksadecymalnym, nie jest uruchomiony, wic moe si broni wycznie pasywnie. Detekcja aktywna jest co prawda moliwa (np. za pomoc
wyszukiwania nazw uruchomionych procesw, nazw okien itd.), ale byaby zupenie
do niczego (nie baczc na fakt, e w odrnieniu od programu SoftICE, deasemblerw
i edytorw heksadecymalnych jest cae mnstwo).
Przed kilku laty, kiedy jeszcze nie byo deasemblerw tak rozwinitych jak dzisiaj,
mona byo zapobiec deasemblacji w prosty sposb. Do kodu programu dodawano
algorytmy oraz cigi instrukcji, ktrych kompilator nigdy by nie wygenerowa. Dziki
temu przy prbie dekompilacji (w tym przypadku mwic cilej deasemblacji) dochodzio do bdu lub zaptlenia dekompilatora; na przykad nastpujce cigi mylcych
instrukcji byy w przeszoci powszechnie stosowane:





Rozdzia 3. Ochrona przed deasemblacj

97

Ten kod jest w rzeczywistoci ekwiwalentem instrukcji   i cigle mona go


pod rnymi postaciami znale w szeregu mechanizmw zabezpieczajcych.
W dzisiejszych czasach deasemblery s ju na co podobnego przygotowane, tak wic
stosowanie tej metody nie zda egzaminu. Nasze starania dlatego skierowane bd
w pierwszym rzdzie na to, aby deasemblacja pliku bya cakowicie bezprzedmiotowa. Plik bdzie mona zdeasemblowa, ale kod wynikowy bdzie bd bezsensowny,
bd tak nieprzejrzysty, e nieuyteczny do jakiejkolwiek analizy. Tym zajmiemy si
jednak za chwil. Teraz poka, jak zabezpieczy program przed najniebezpieczniejszymi funkcjami deasemblera, ktrymi s odnoniki do acuchw i importowanych
funkcji.

Algorytmy podstawowe
Ochrona acuchw
Zapobieganie przeszukiwaniu stosowanych przez program acuchw jest cakiem
atwe: mona je zaszyfrowa (zamiast poprawnych acuchw pojawi si wwczas
wycznie bezsensowne znaki, ktre crackerowi nie uatwi zadania), zmieni lub
zmodyfikowa w inny sposb, a najlepiej zaprzesta (jeeli jest to moliwe) ich stosowania. Sposobw na to, jak zapisa jaki tekst do pliku, jest przecie bez liku.

Ochrona importowanych funkcji


Deasembler przy generowaniu listy importowanych funkcji wskazujcych na poszczeglne miejsca w programie korzysta ze specjalnej tabeli, tzw. tabeli importw. O jej
dokadnej strukturze, funkcji i zabezpieczeniu dowiesz si wicej z rozdziau o formacie
PE, z ktrego zastosowania wywodzi si wikszo metod ochrony funkcji importowanych. Teraz przedstawi tylko t najprostsz technik bazujc na porednim
wywoywaniu funkcji tak, aby sam kompilator nie umieszcza ich w tabeli importw).
W taki sposb wywoywane funkcje nie zostan wpisane do tabeli importw i deasembler nie zaszereguje ich do swojego spisu.
Ta technika jest wymienita w szczeglnoci do wykorzystania z funkcjami API,
gdzie biblioteki, z ktrej chcemy w taki sposb importowa, nie trzeba ju wgrywa
do pamici.
Najpierw sprawdzimy baz obrazu (
  patrz rozdzia o formacie PE)
wczytanej biblioteki, gdzie umieszczona jest wymagana funkcja, a nastpnie okrelimy
jej adres, ktry nastpnie ju bezporednio wywoamy.
Poniszy przykad ustali adres funkcji   w bibliotece kernel32.dll. Jest to
naprawd atwe:
 !"#
"$%&&#
'()
*+,-,.. -/+!".*0+"$%&&1#/20
.*0+

98

Cracking bez tajemnic

Teraz ju tylko wystarczy funkcj wywoa np. nastpujco:


33
4
5
*'3+66,')637,+
-738'96'7
5
*'39+,3,+
 7,'.3,+
:#;0#33<:=30#
/.&&.+.*0+
/:=30#
>
&&+7*0.*0+!"<:0#" 7,'.3,+*'39+,3,+7
-738'96'7 *'3+66,')637,+7$%

Ta technika sama w sobie jest bardzo podatna na atak, poniewa mona za pomoc
spisu importowanych funkcji znale i wykorzysta kombinacj bardzo dobrze znanych
funkcji   i , a ponadto w licie acuchw mona znale rwnie nazwy bibliotek oraz funkcji, co akurat rzuca si w oczy. Zalecam czenie
tej techniki z najrniejszymi innymi technikami ochrony importowanych funkcji
i acuchw.
Moesz si te spotka z algorytmem, gdzie adres importowanej funkcji okrelony
w jednym miejscu (chociaby z wykorzystaniem tabeli importw lub bez tego) zostaje
zachowany, a nastpnie wywoywany w zupenie innym miejscu. To tylko jeden
z wielu sposobw zapobiegania wywietleniu przez deasembler importowanej funkcji
w miejscu, gdzie naprawd najmniej tego potrzebujesz.
Praktyczny przykad wykorzystania powyszych metod znajdziesz w jednym z moich
przykadw crackme w rozdziale dziewitym.

SMC kod samomodyfikujcy si


Do najczciej stosowanych sposobw zabezpieczenia oprogramowania, i to nie tylko
przed deasemblacj, zaliczany jest SMC (ang. Self Modyfying Code). Moliwe, e
zamieszczenie tej techniki w rozdziale o antydeasemblacji nie bdzie si wydawao
poprawne, ale miej na wzgldzie to, e liczne techniki antycrackingowe nawzajem si
pokrywaj i uzupeniaj, nie mona wic dokadnie ich rozdzieli. Bardziej ni oczywiste jest, e jaka technika antydeasemblacji pracuje rwnie np. jako kod antydebugingowy i vice versa. W przypadku SMC obowizuje to w dwjnasb: utrudnia lub
wrcz uniemoliwia edycj kodu rdowego, debuging i deasemblacj.
Za SMC mona uzna dwa rodzaje kodu: pierwszy wykorzystuje w peni dynamiczne
generowanie (edycj) kodu programu bezporednio podczas pracy programu. Drugi
typ wykorzystuje wielopostaciowo zapisu kodu w asemblerze. W celu usystematyzowania, pierwsz z wymienianych moliwoci pozwol sobie nazwa aktywnym,
a drug pasywnym SMC. W adnym jednak przypadku nie s to oficjalne nazwy.

Rozdzia 3. Ochrona przed deasemblacj

99

Pasywny SMC
Spjrz na nastpujcy przykad:
?55 5 555)5 255 5 55
?55 5 55
@ /%=0#/200A:B

Zapewne zauwaye co bardzo dziwnego pierwsza instrukcja  skacze gdzie


w rodek nastpnej instrukcji !? W ten sposb zostaje przeskoczony jeden bajt
pod adresem  . Po skoku wic kod w rzeczywistoci wyglda nastpujco:
?55 5 555)5 255 5 55
?55 5 55
@%0:CD/0:0#/2<0<#/<
?55 5 55  0/

Na tym prostym przykadzie zrozumiae zapewne, o co chodzi w pasywnym SMC


i jak ta technika funkcjonuje. Stosujc taki sposb zapisu mona osign doskonae
wyniki. Kod staje si bardzo nieprzejrzysty, co w niewyobraalny wrcz sposb
utrudnia nie tylko debugowanie i deasemblacj, ale rwnie sam edycj kodu programu. Zrozumienie struktury takiego kodu jest bardzo trudne.
Obawiam si, e nie istniej chyba oglne wskazwki tworzenia algorytmw SMC.
Zawsze wymaga to okrelonej iloci czasu, cierpliwoci i dowiadczenia.
Niech poniszy przykad kodu SMC posuy za inspiracj:
?55 5 555)5 2555 5 55
?55 5 55

@ ))EFEGFH55 G
?55 5 55 I@ 2555 5 5 
?55 5 55I
5

?55 5 55J) 2555 5 5


5
?55 5 55)
@@ *
 EF/GF5
* G
?55 5 5 @I)/(EKE
?55 5 5 5
@/K
?55 5 5 J@ * @ J J5)5 0KF/GF5 @* G55 )J
?55 5 5 *.
)++)
?55 5 5

) @)5@)
?55 5 5
. 
?55 5 5
 )E

Czy powiedziaby, e jedyne, co ten kod realizuje, to wpisanie wartoci 1 do rejestru


EAX? Zapewne nie, a wic przyjrzyjmy si kolejnym zmianom kodu przy jego realizacji.
Po pierwszym skoku z adresu  kod zmieni si do nastpujcej postaci:
?55 5 55 E
?55 5 55 E
I@
?55 5 55J255 5 5
5
?55 5 55)EF/L
* G
?55 5 5 /(EE
?55 5 5 /
?55 5 5 0F/L @* GK5 )J5J
?55 5 5 *E
?55 5 5

@)
?55 5 5

?55 5 5
E

100

Cracking bez tajemnic

Wykonane zostan instrukcje pod adresami ! i  i dojdzie do skoku pod
adres  . Po skoku kod wyglda nastpujco:
?55 5 5
5255 5 55.
?55 5 5

@)
?55 5 5

?55 5 5
E

Wykonany zostanie kolejny skok z powrotem pod adres :


?55 5 55.E@I

?55 5 5
255 5 5 
?55 5 5 / J J @

?55 5 5 J/)J5J
?55 5 5 /

?55 5 5
5255 5 55.
?55 5 5

@)
?55 5 5

?55 5 5
E

Po wykonaniu instrukcji pod adresem  dochodzi do kolejnego skoku tym razem pod adres ":
?55 5 5 EJ @
?55 5 5 .
?55 5 5 255 5 5

?55 5 5 *E
?55 5 5

K@)
?55 5 5

?55 5 5
E

Teraz wreszcie dochodzi do ostatniego skoku pod adresem #:


?55 5 5
E
?55 5 5
E

Jeeli przepiszemy wszystkie prawdziwe instrukcje, otrzymamy nastpujcy kod,


z ktrego ju bez problemu zrozumiesz, jak algorytm dziaa:
E&&</:)8
E
I@&&)8
I@
E@I
&&)8J J
EJ @&&)8
E&&+8)8
E&&<=:M/0)8

Cay powyszy kod jest ekwiwalentem instrukcji $% &.


Dziki zastosowaniu SMC i wybraniu wikszej liczby instrukcji do wykonania danego
zadania (zamiast zwykego $%  &) tak prymitywne zadanie, jakim jest wpisanie
wartoci 1 do rejestru EAX, staje si bardzo nieprzejrzyst i skomplikowan operacj.
Zrozumienie struktury takiego kodu jest bardzo trudne. W przypadku duszego algorytmu bez debugera wykonanie tego zadania jest wrcz niemoliwe.
Ten przykad mia zilustrowa nie tylko implementacj SMC w praktyce, ale rwnie
fakt, e czasami nie jest zym pomysem napisanie nawet prostej rzeczy w sposb troch
bardziej zoony. Wynik i powodzenie obu tych technik moesz sam oceni.

Rozdzia 3. Ochrona przed deasemblacj

101

Aktywny SMC
Jednym z najlepszych sposobw ochrony kodu programu jest jego dynamiczne generowanie. Metod t ju zalecaem na pocztku pierwszego rozdziau, jednak dokadniej
zdefiniowana i opisana jest dopiero tutaj. Moim staraniem byo zgrupowanie implementacji SMC w jednym rozdziale chocia moliwe, e nie jest to najlepsze miejsce.
Nie chodzi w zasadzie o nic innego ni edycj kodu programu bezporednio w trakcie pracy programu. Tak jak wpisujesz dane do zmiennych, rejestrw, itp., moesz
spokojnie modyfikowa rwnie kod programu. Jedynym problemem jest to, e obszar
w pamici, do ktrego wpisujemy, musi mie charakterystyk ' (, a wic
musi w nim istnie moliwo zapisu, w przeciwnym razie w programie zaistnieje wyjtek ()**+),)),%
$*
$-). Ten temat jest cile zwizany z formatem PE,
wic dowiesz si wicej dopiero w powiconym temu zagadnieniu rozdziale. Tymczasem wystarczy zastosowanie funkcji % , ktra z odpowiednimi parametrami umoliwi nam zapisywanie w uruchamialnym kodzie programu.
Aby zademonstrowa prawdziw moc i moliwoci SMC, wszystko poka na naprawd
prostym przykadzie. Przyjrzyj si nastpujcemu kodowi zapewne natychmiast bdzie
dla ciebie oczywistym efekt jego dziaania:
)+6,%
01!+$
()!"N(0<C<=10#:="7)3N$%

()!"N(<C<:<0<=10#:="7)3N$%

Konstrukcja z  jest logicznie cakowicie zbdna, poniewa zawsze dojdzie do wywietlenia komunikatu Kod programu nie zosta zmodyfikowany. W asemblerze kod
zapiszemy mniej wicej tak:
33
4

/
2<9.3
>
()!"N(0<C<=10#:="7)3N$%
%
9.3?
()!"N(<C<:<0<=10#:="7)3N$%

Teraz do programu wstawimy wywoanie funkcji %  i sprbujemy przepisa instrukcj -. przez instrukcj logicznie odwrotn .. Tym sposobem odwrcimy logik caego algorytmu i powinno pojawi si okienko komunikatu  /
z tekstem Kod programu zosta z powodzeniem zmodyfikowany. Kod wyglda nastpujco:
O,+-/%
33
4
+11-<0<
>

102

Cracking bez tajemnic


P0-/!!0Q$+ 5-+ 3,+O,'6R-/$%
33
4
E+
)=FEGI &&<00:D/0I I <K0#/20
S7TST

/
>
-<0<?
2<9.3
>
()!"N(0<C<=10#:="7)3N$%
%
9.3?
()!"N(<C<:<0<=10#:="7)3N$%

Wynikiem dziaania kodu po tej modyfikacji bdzie komunikat Kod programu zosta
z powodzeniem zmodyfikowany.
Jak widzisz, naprawd nie chodzi o adn nauk. Wystarczy drobna modyfikacja
w postaci wywoania funkcji API %  poszerzajca prawa dostpu o moliwo zapisu (,0#10
* odczyt i zapis) w okrelonym obszarze pamici; w naszym przypadku w obszarze, gdzie wczytany jest uruchamialny kod programu.
Jak mwiem, to naprawd prymitywny przykad, ale wykorzystanie i potencja SMC
ilustruje wymienicie. Jak zawsze zaley tylko od ciebie, jak t technik dopracujesz
i ile czasu powicisz na projekt kodu programu.

Edycja kodu programu w trakcie pracy programu


Najrniejsze metody zabezpieczania programw przed crackingiem wykorzystuj
podstawow ide aktywnego SMC wic edycja kodu programu w trakcie jego
dziaania naley bezspornie do tych najlepszych i rwnie najczciej stosowanych.
Moliwoci s naprawd nieograniczone od szyfrowania kodu programu, zmian
poszczeglnych instrukcji, ich celowego niszczenia, a z drugiej strony a po wstawianie i przesuwanie wielkich blokw danych, przepisywania caych funkcji itd. Zaley
to po prostu wycznie od twojej fantazji.
Na kilka moliwoci wykorzystania edycji kodu programu w trakcie jego pracy ju
kilkukrotnie zwracaem uwag w wielu miejscach tej ksiki i jeszcze si z nimi spotkasz. Ta cz rozdziau miaa tylko pokaza, jakie to proste. W rozdziale sidmym
omwimy szyfrowanie i deszyfrowanie danych w trakcie pracy programu z wykorzystaniem formatu PE.

You might also like